2013-11-04 52 views
1

我在屏幕上有两个图像重叠称为A和B.我有第三个图像称为C,用户可以在屏幕上移动。两者中较大的一个(A)将C重置为碰撞后的重生点。我需要知道如何让C可以遍历图像B,而不是重置到重生点。如在图像B中重叠图像A并且否定碰撞功能。我如何让一个物理体取消另一个物体的碰撞。

这里是代码:

--Hides status bar from top of page 
display.setStatusBar(display.HiddenStatusBar) 

--Set a test background image 
local backgroundimg = display.newImageRect("testbackground.png", 320,576) 
backgroundimg.x = display.contentWidth*0.5 
backgroundimg.y = display.contentHeight*0.5 

--Set the position and amount of score and lives 

local score = 0 
local lives = 5 

local showscore = display.newText("Score: "..score,0,-36,native.systemFont,25) 
showscore:setTextColor(0, 0, 0) 

local showlives = display.newText("Lives: "..lives,230,-36,native.systemFont,25) 
showlives:setTextColor(0, 0, 0) 

--Set physics for collisions, etc. 
physics = require("physics") 
physics.start() 
physics.setGravity(0,0) 

--set water 
local water = display.newImageRect("water.png",320,192) 
water.x = display.contentWidth*0.5 
water.y = 144 
physics.addBody(water,"static") 
water:addEventListener("collision", function()timer.performWithDelay(50,waterCollide)end) 

function waterCollide(event) 
    lives = lives - 1 
    display.remove(frog) 
    frog = display.newImageRect("FrogTest.png",32,48) 
    frog.x = display.contentWidth*0.5 
    frog.y = 504 
    physics.addBody(frog, "dynamic") 
    frog.isFixedRotation = true 
end 

--Sets buttons images and positions 
local forward = display.newImageRect("Forward Button.png",106,100) 
forward.x = 160 
forward.y = 478 

local left = display.newImageRect("Left Button.png",106,100) 
left.x = 53 
left.y = 478 

local right = display.newImageRect("Right Button.png",106,100) 
right.x = 267 
right.y = 478 

--Set log position and movement 
local log1 = display.newImageRect("log1.png", 96, 48) 
log1.x = 32 
log1.y = 226 
physics.addBody(log1,"kinematic") 
transition.to(log1, {time = 3500, x = 288}) 


--Set a frog sprite on the screen 
frog = display.newImageRect("FrogTest.png",32,48) 
frog.x = display.contentWidth*0.5 
frog.y = 504 
physics.addBody(frog, "dynamic",{density = 1.0, friction = 1, bounce = -1}) 
frog.isFixedRotation = true 

--Sets motion variables 
local motionX = 0 
local motionY = 0 
local speed = 4 

--Moving forward 
function forward:touch() 
    motionX = 0 
    motionY = -speed 
end 
forward:addEventListener("touch",forward) 

--Moving Right 
function right:touch() 
    motionX = speed 
    motionY = 0 
end 
right:addEventListener("touch",right) 

--Moving left 
function left:touch() 
    motionX = -speed 
    motionY = 0 
end 
left:addEventListener("touch",left) 

--Moves Frog each time frame is called 
function movefrog (event) 
    frog.x = frog.x + motionX 
    frog.y = frog.y + motionY 
end 
Runtime:addEventListener("enterFrame", movefrog) 

--Stops frog from moving continuously 
local function stop (event) 
    if event.phase == "ended" then 
     motionX = 0 
     motionY = 0 
    end 
end 
Runtime:addEventListener("touch", stop) 

--Making sure the frog does not go off the screen 
local function stopfrog (event) 
    if frog.x <= 16 then 
     frog.x = 16 
    end 
    if frog.x >= 304 then 
     frog.x = 304 
    end 
end 
Runtime:addEventListener("enterFrame", stopfrog) 

回答

1

你需要以否定重生设置waterCollide功能的一个条件。

取决于你有多复杂需要它,你可以简单地检查是否frog的立场是log1内的边界,也许你可以有log1有自己的碰撞任何未来的日志在碰撞时将标志设置为不触发重生,然后在与任何日志碰撞结束时清除标志。

下面是一个例子:

local onLog = 0 

function frogDie() 
    lives = lives - 1 
    display.remove(frog) 
    frog = display.newImageRect("FrogTest.png",32,48) 
    frog.x = display.contentWidth*0.5 
    frog.y = 504 
    physics.addBody(frog, "dynamic") 
    frog.isFixedRotation = true 
end 

function waterCollide(event) 
    if onLog < 1 then frogDie() end 
end 

function logCollide(event) 
    if event.phase == 'began' then 
     onLog = onLog + 1 
    else 
     onLog = onLog - 1 
    end 
end 

log1:addEventListener("collision", logCollide) 
--log2:addEventListener("collision", logCollide) 

用一个数字来跟踪青蛙是否是对数应该比一个布尔更安全,因为日志最终可能会重叠并清除标志,才能正确复位在多次碰撞过程中。

相关问题