如何在电晕实验室中碰撞物体

时间:2016-03-23 23:17:07

标签: lua corona

我试图在Corona SDK中制作游戏,其中玩家可以通过跳过障碍物或使用子弹杀死它们而在障碍物中幸存。问题是即使玩家发射子弹,游戏也会结束。但只有当玩家与障碍物碰撞时才应该结束。 这是我的代码,直到现在!!

--local screen_adjustment = 1
local physics = require "physics" 
physics.start()

local storyboard = require ("storyboard")
local scene = storyboard.newScene()


function scene:createScene( event )

local screenGroup=self.view

background=display.newImage("rsz_islands1-background-animation.png")
background:setReferencePoint(display.BottomLeftReferencePoint)
background.x=-50
background.y=330
background.speed=math.random(2,6)
screenGroup:insert(background)

background1=display.newImage("rsz_islands1-background-animation.png")
background1:setReferencePoint(display.BottomLeftReferencePoint)
background1.x=500
background1.y=330
background1.speed=math.random(2,6)
screenGroup:insert(background1)

rightArrow=display.newImageRect("right_arrow.png",50,100)
rightArrow:setReferencePoint(display.BottomLeftReferencePoint)
rightArrow.x=370
rightArrow.y=290
screenGroup:insert(rightArrow)


upArrow=display.newImageRect("up_Arrow.png",100,50)
upArrow:setReferencePoint(display.BottomLeftReferencePoint)
upArrow.x=250
upArrow.y=240
screenGroup:insert(upArrow)



stone=display.newImageRect("stone.png",100,50)
stone:setReferencePoint(display.BottomLeftReferencePoint)
stone.x=math.random(500,1500)
stone.y=280
stone.speed=math.random(2,6)
physics.addBody(stone,"static",{bounce=0,friction=0,})
screenGroup:insert(stone)

base = display.newRect(0,0,450,3)
base.x=-50
base.y=282
base:setReferencePoint(display.BottomLeftReferencePoint)
base:setFillColor(255,255,255)
--physics.addBody(base,"static",{bounce=0.1,friction=0.1})
physics.addBody(base,"static",{bounce=0,friction=1.0,density=1.0})
screenGroup:insert(base)
base.myName="base1"


local sheetData = {
width=65,
height=75,
numFrames=4,
sheetContentWidth=130,
sheetContentHeight=150
}

local mySprite = graphics.newImageSheet("imageSheet.png",sheetData)

local sequenceData = {
name="normalRun",
frames={1,2,3,4},
time=500,
loopcount=0
}

animation = display.newSprite(mySprite,sequenceData)
if(animation.x<50) then
animation.x=50
end
animation.y=245


physics.addBody(animation,{bounce=0.3,friction=1.0,density=1.0,radius=35})
animation:play()
screenGroup:insert(animation)
animation.myName="animation1"




local sheetTigerData = {
width=100,
height=57,
numFrames=8,
sheetContentWidth=400,
sheetContentHeight=120
}

local myTigerSprite
graphics.newImageSheet("tigerImageSheet.png",sheetTigerData)

local sequenceTigerData = {
name="normalRun",
frames={1,2,3,4,5,6,7,8},
time=500,
loopcount=0
}

tigeranimation = display.newSprite(myTigerSprite,sequenceTigerData)
--tigeranimation.x=700
tigeranimation.x=math.random(500,1500)
tigeranimation.y=255
tigeranimation.speed=math.random(2,6)
physics.addBody(tigeranimation,"static",{bounce=0,friction=.2})
tigeranimation:play()
screenGroup:insert(tigeranimation)


local sheetBirdData = {
width=60,
height=40,
numFrames=6,
sheetContentWidth=180,
sheetContentHeight=80
}

local myBirdSprite =
graphics.newImageSheet("birdimagesheet.png",sheetBirdData)

local sequenceBirdData = {
name="normalRun",
frames={1,2,3,4,5,6},
time=500,
loopcount=0
}

birdanimation = display.newSprite(myBirdSprite,sequenceBirdData)
birdanimation.x=math.random(500,2500)
birdanimation.y=math.random(100,200)
birdanimation.speed=2
birdanimation.initY=birdanimation.y
birdanimation.amp=50
birdanimation.angle=math.random(1,360)
physics.addBody(birdanimation,"static",{friction=.2,bounce=0})
birdanimation:play()
screenGroup:insert(birdanimation)

local sheetCatData = {
width=100,
height=48,
numFrames=8,
sheetContentWidth=200,
sheetContentHeight=200
}

local myCatSprite =  
graphics.newImageSheet("rsz_runningcat.png",sheetCatData)

local sequenceCatData = {
name="normalRun",
frames={2,1,4,3,6,5,8,7},
time=500,
loopcount=0
}

catanimation = display.newSprite(myCatSprite,sequenceCatData)
catanimation.x=tigeranimation.x+math.random(110,1500)
catanimation.y=255
catanimation.speed=math.random(2,6)
physics.addBody(catanimation,"static",{bounce=0,friction=.2})
catanimation:play()
screenGroup:insert(catanimation)



gameSound=audio.loadStream("gamesound.mp3")
audio.play(gameSound)

gunshot=audio.loadStream("gunshot3.mp3")
end


function scrollBack( self,event )
if self.x<-590 then
self.x=500
audio.play(gameSound)
else 
    self.x=self.x-3
    audio.play(gameSound)
end
end

function moveTiger( self,event )
if self.x<-100 then
self.x=math.random(1500,4000)
self.y=255
self.speed=math.random(3,6)
audio.play(gameSound)
else 
    self.x=self.x-self.speed
    audio.play(gameSound)
end
end

function moveCat( self,event )
if self.x<-100 then
self.x=tigeranimation.x+math.random(800,2000)
self.y=255
self.speed=math.random(3,6)
else 
    self.x=self.x-self.speed
end
end


function moveStone( self,event )
if self.x<-100 then
self.x=math.random(1000,5000)
self.y=280
self.speed=math.random(3,6)
else 
    self.x=self.x-self.speed
end
end

function moveBird( self,event )
if self.x<-100 then
self.x=math.random(500,2500)
--self.x=300
self.y=math.random(100,200)
self.speed=2
self.amp=math.random(25,75)
self.angle=math.random(1,360)
--self.y=280
--self.speed=math.random(3,6)
else 
    self.x=self.x-self.speed
    self.angle=self.angle+.1
    self.y=self.amp*math.sin(self.angle)+self.initY
end
end

function fireLasers()
 blaster = display.newImageRect( "bullet.png", 40, 15 )
 physics.addBody(blaster,"dynamic")
blaster.x = animation.x+50
blaster.y = animation.y-10
--blaster.collided=false
if(animation.x<50) then
animation.x=50
end
transition.to( blaster, { time=1000, x=500} )
audio.play(gunshot)

end


function handleFireButton( event )
if ( event.phase == "began" ) then
    -- Fire the weapon
    fireLasers()
elseif ( event.phase == "ended" ) then
    -- Stop firing the weapon
    fireLasers()
end
return true
end
positionInAir = false

function jump(event)
if(event.phase == "began" and positionInAir==false) then

    --playerInAir = true
    --animation:setLinearVelocity( 0, 1 )
    animation:applyForce(0,-1000,animation.x,animation.y)
    positionInAir=true
    --physics.addBody(animation,"dynamic")
    --print("touch")
end
return true
end




function onCollision( event )
if(event.object1.myName == "base1" and event.object2.myName == "animation1")    
then
    positionInAir = false;
    -- base:removeSelf()
end
end

local function onManCollide(event)

if ( event.phase == "began"  ) then
storyboard.gotoScene("restart","fade",400)
audio.stop()
end
end




function scene:enterScene( event )

background.enterFrame=scrollBack
Runtime:addEventListener("enterFrame",background)

background1.enterFrame=scrollBack
Runtime:addEventListener("enterFrame",background1)

stone.enterFrame=moveStone
Runtime:addEventListener("enterFrame",stone)

tigeranimation.enterFrame=moveTiger
Runtime:addEventListener("enterFrame",tigeranimation)

birdanimation.enterFrame=moveBird
Runtime:addEventListener("enterFrame",birdanimation)

catanimation.enterFrame=moveCat
Runtime:addEventListener("enterFrame",catanimation)

animation.collision=onManCollide
animation:addEventListener("collision",onManCollide)


rightArrow:addEventListener( "touch", handleFireButton )
--Runtime:addEventListener( "touch", handleFireButton )
--Runtime:addEventListener( "enterFrame", handleFireButton )
--upArrow:addEventListener("touch", jump)

--Runtime:addEventListener( "collision", onCollision ) 
--Runtime:addEventListener( "touch", onScreenTouch )

--rightArrow:addEventListener( "touch", handleFireButton )
end


function scene:exitScene( event )

Runtime:removeEventListener("enterFrame",background)
Runtime:removeEventListener("enterFrame",background1)
Runtime:removeEventListener("enterFrame",stone)
Runtime:removeEventListener("enterFrame",tigeranimation)
Runtime:removeEventListener("enterFrame",birdanimation)
Runtime:removeEventListener("enterFrame",catanimation)
Runtime:removeEventListener("enterFrame",onManCollide)
rightArrow:removeEventListener( "touch", handleFireButton )
upArrow:removeEventListener("touch", jump)
Runtime:removeEventListener( "collision", onCollision )


end

function scene:destroyScene( event )

end
--local myGroup=display.newGroup()

--physics.addBody(background,"static",{bounce=0.1,friction=0.9})


--physics.addBody(background1,"static",{ bounce=0.1,friction=0.9})

scene:addEventListener("createScene",scene)
scene:addEventListener("enterScene",scene)
scene:addEventListener("exitScene",scene)
scene:addEventListener("destroyScene",scene)

return scene

1 个答案:

答案 0 :(得分:0)

你需要问一个具体的问题,你所说的很模糊。每次玩家发射子弹时游戏结束吗?您还应该考虑从故事板迁移到作曲家。