2013-11-23 45 views
0

我有一個水圖像,在碰撞時殺死用戶精靈,從生命變量中取1,並重新生成精靈到開始。我有另一張木筏圖像,它不斷產生在屏幕上移動的新圖像。即時通訊試圖獲得它,使用戶可以移動到木筏上,即在水面上,而不是重新開始。有一個圖像否定另一個圖像的碰撞檢測

--sets the function for the death sequence. 
function waterCollide(event) 
    frog.x = display.contentWidth/2 
    frog.y = 504 
    isOnRaft = 0 

    lives = lives - 1 
    showlives.text = "Lives: "..lives,230,-36,native.systemFont,25 

    lose() 
end 

--sets water 
water = display.newRect(0,0,320,150) 
water.x = display.contentWidth*0.5 
water.y = 144 
water.alpha = 0 
physics.addBody(water,"static", {isSensor = true}) 
water:addEventListener("collision", function()timer.performWithDelay(50,waterCollide)end) 

--Set log position and movement 
local mRandom = math.random 
local raft = {"Raft1" ,"Raft2"} 
local objectTag = 0 
local object = {} 

function spawnlogleft() 
    objectTag = objectTag + 1 
    local objIdx = mRandom(#raft) 
    local objName = raft[objIdx] 
    object[objectTag] = display.newImage(objName..".png") 
    object[objectTag].x = -96 
    object[objectTag].y = 216 
    object[objectTag].name = objectTag 
    transition.to(object[objectTag], {time = 10000, x = 416, onComplete = function(obj) obj:removeSelf(); obj = nil; end}) 
    physics.addBody(object[objectTag], "static",{isSensor = true}) 
end 
spawnlogleft() 
timer.performWithDelay(3500,spawnlogleft,0) 

--user sprite details 
frog = display.newSprite(frogSheet, sequenceData) 
frog.x = display.contentWidth/2 
frog.y = 504 
physics.addBody(frog, "dynamic", physicsData:get("FrogSheetData")) 
frog.isFixedRotation = true 

用戶精靈是三幀和300時間的動畫。任何幫助將不勝感激。如果需要,我會提供更多細節。

謝謝

+0

這與你提出的[其他問題](http://stackoverflow.com/q/19771145/828255)有什麼不同? –

+0

,因爲我沒有動畫,當我只有固定的日誌。如果我因爲某種原因使用它,當在木筏上等於24時,isOnRaft = 1。 – Ross

回答

1

電暈有這些整潔的東西叫做CollisionFilters。它們向你展示瞭如何在/ Physics/CollisionFilter中使用它們。

您基本上設置位以使某些對象與其他對象不可碰撞。檢查這個main.lua的例子:

local physics = require("physics") 
physics.start() 

physics.setScale(60) 

display.setStatusBar(display.HiddenStatusBar) 

local bkg = display.newImage("stripes.png") 

borderCollisionFilter = { categoryBits = 1, maskBits = 6 } -- collides with (4 & 2) only 
borderBodyElement = { friction=0.4, bounce=0.8, filter=borderCollisionFilter } 

local borderTop = display.newRect(0, 0, 320, 1) 
borderTop:setFillColor(0, 0, 0, 0)  -- make invisible 
physics.addBody(borderTop, "static", borderBodyElement) 

local borderBottom = display.newRect(0, 479, 320, 1) 
borderBottom:setFillColor(0, 0, 0, 0)  -- make invisible 
physics.addBody(borderBottom, "static", borderBodyElement) 

local borderLeft = display.newRect(0, 1, 1, 480) 
borderLeft:setFillColor(0, 0, 0, 0)  -- make invisible 
physics.addBody(borderLeft, "static", borderBodyElement) 

local borderRight = display.newRect(319, 1, 1, 480) 
borderRight:setFillColor(0, 0, 0, 0)  -- make invisible 
physics.addBody(borderRight, "static", borderBodyElement) 


local red = {} 
local blue = {} 

local redCollisionFilter = { categoryBits = 2, maskBits = 3 } -- collides with (2 & 1) only 
local blueCollisionFilter = { categoryBits = 4, maskBits = 5 } -- collides with (4 & 1) only 

local redBody = { density=0.2, friction=0, bounce=0.95, radius=43.0, filter=redCollisionFilter } 
local blueBody = { density=0.2, friction=0, bounce=0.95, radius=43.0, filter=blueCollisionFilter } 


for i = 1,4 do 
    red[i] = display.newImage("red_balloon.png", (80*i)-60, 50 + math.random(20)) 
    physics.addBody(red[i], redBody) 
    red[i].isFixedRotation = true 

    blue[i] = display.newImage("blue_balloon.png", (80*i)-60, 250 + math.random(20)) 
    physics.addBody(blue[i], blueBody) 
    blue[i].isFixedRotation = true 
end