0

2 つのボタンを持つメニューを作成しました。ストーリーボード API を使用してシーンを移動していますが、最初のボタンでのみ機能し、他のボタンでは黒い画面が表示されます。SCENE 2 には何も問題はないと確信しています。両方のシーン (SCENE 1 と SCENE 2) に同じコードを設定しようとしましたが、SCENE 1 で動作しましたが、SCENE 2 にはまだ黒い画像が表示されます。ここに私のメニュー コードを示します。うまくいけば、エラーを修正できます。

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


   function scene:createScene(event)

local screenGroup = self.view

background = display.newImage("start.png")
background:setReferencePoint(display.BottomLeftReferencePoint)
background.x = 0
background.y = 320
background.speed = 1
screenGroup:insert(background)

city2 = display.newImage("city2.png")
city2:setReferencePoint(display.BottomLeftReferencePoint)
city2.x = 0
city2.y = 320
screenGroup:insert(city2)



play = display.newImage("play.png")
play.x = 242
play.y = 161
screenGroup:insert(play)

controls = display.newImage("controls.png")
controls.x = 144
controls.y = 201 
screenGroup:insert(controls)



function SCENE1(event)
if event.phase == "began" then
    storyboard.gotoScene("SCENE1", "fade", 400)
end
end

function SCENE2(event)
if event.phase == "began" then
    storyboard.gotoScene("SCENE2", "fade", 400)
end
end

function scene:enterScene(event)

 play:addEventListener("touch", SCENE1)
 controls:addEventListener("touch", SCENE2)
 end



function scene:exitScene(event)
play:removeEventListener("touch", SCENE1)
controls:removeEventListener("touch", SCENE2)
end

function scene:destroyScene(event)

end

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

return scene

シーン 2 の場合:

   module(..., package.seeall)

   -- requires 

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

   require "sprite"

   score = require ("score")

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

  function scene:createScene(event)

local screenGroup = self.view

background = display.newImage("bg.png")
screenGroup:insert(background)

scoreInfo = score.getInfo()
score.init({
x = 40,
y = 5}
)
score.setScore(0)

ceiling = display.newImage("invisibleTile.png")
ceiling:setReferencePoint(display.BottomLeftReferencePoint)
ceiling.x = 0
ceiling.y = 0
physics.addBody(ceiling, "static", {density=.1, bounce=0.1, friction=.2})
screenGroup:insert(ceiling)

theFloor = display.newImage("invisibleTile.png")
theFloor:setReferencePoint(display.BottomLeftReferencePoint)
theFloor.x = 0
theFloor.y = 340
physics.addBody(theFloor, "static", {density=.1, bounce=0.1, friction=.2})
screenGroup:insert(theFloor)


city1 = display.newImage("city1.png")
city1:setReferencePoint(display.BottomLeftReferencePoint)
city1.x = 0
city1.y = 320
city1.speed = 1
screenGroup:insert(city1)

city2 = display.newImage("city1.png")
city2:setReferencePoint(display.BottomLeftReferencePoint)
city2.x = 480
city2.y = 320
city2.speed = 1
screenGroup:insert(city2)

city3 = display.newImage("city2.png")
city3:setReferencePoint(display.BottomLeftReferencePoint)
city3.x = 0
city3.y = 320
city3.speed = 2
screenGroup:insert(city3)

city4 = display.newImage("city2.png")
city4:setReferencePoint(display.BottomLeftReferencePoint)
city4.x = 480
city4.y = 320
city4.speed = 2
screenGroup:insert(city4)


jetSpriteSheet = sprite.newSpriteSheet("jet.png", 50, 17)
jetSprites = sprite.newSpriteSet(jetSpriteSheet, 1, 4)
sprite.add(jetSprites, "jets", 1, 4, 1000, 0)
jet = sprite.newSprite(jetSprites)
jet.x = -80
jet.y = 100
jet:prepare("jets")
jet:play()
jet.collided = false
physics.addBody(jet, "static", {density=.1, bounce=0.1, friction=.2, radius=12})
screenGroup:insert(jet)
jetIntro = transition.to(jet,{time=2000, x=100, onComplete=jetReady})

explosionSpriteSheet = sprite.newSpriteSheet("explosion.png", 24, 23)
explosionSprites = sprite.newSpriteSet(explosionSpriteSheet, 1, 8)
sprite.add(explosionSprites, "explosions", 1, 8, 2000, 1)
explosion = sprite.newSprite(explosionSprites)
explosion.x = 100
explosion.y = 100
explosion:prepare("explosions")
 -- explosion:play()
explosion.isVisible = false
-- physics.addBody(jet, "dynamic", {density=.1, bounce=0.1, friction=.2, radius=12})
screenGroup:insert(explosion)

mine1 = display.newImage("mine.png")
mine1.x = math.random(480,500)
mine1.y = math.random(1,100)
mine1.speed = math.random(2,6)
mine1.initY = mine1.y
mine1.amp = math.random(20,90)
mine1.angle = math.random(1,360)
physics.addBody(mine1, "static", {density=.1, bounce=0.1, friction=.2, radius=12})
screenGroup:insert(mine1)

mine2 = display.newImage("mine.png")
mine2.x = math.random(900,950)
mine2.y = math.random(1,100)
mine2.speed = math.random(2,6)
mine2.initY = mine2.y
mine2.amp = math.random(20,100)
mine2.angle = math.random(1,360)
physics.addBody(mine2, "static", {density=.1, bounce=0.1, friction=.2, radius=12})
screenGroup:insert(mine2)


mine3 = display.newImage("mine.png")
mine3.x = math.random(1450,1570)
mine3.y = math.random(300,340)
mine3.speed = math.random(2,6)
mine3.initY = mine3.y
mine3.amp = math.random(20,70)
mine3.angle = math.random(1,360)
physics.addBody(mine3, "static", {density=.1, bounce=0.1, friction=.2, radius=12})
screenGroup:insert(mine3)

mine4 = display.newImage("mine.png")
mine4.x = math.random(2500,2770)
mine4.y = math.random(330,330)
mine4.speed = math.random(2,6)
mine4.initY = mine3.y
mine4.amp = math.random(20,100)
mine4.angle = math.random(1,360)
physics.addBody(mine4, "static", {density=.1, bounce=0.1, friction=.2, radius=12})
screenGroup:insert(mine4)

mine6 = display.newImage("mine.png")
mine6.x = math.random(4000,4770)
mine6.y = math.random(1,320)
mine6.speed = math.random(2,6)
mine6.initY = mine6.y
mine6.amp = math.random(20,80)
mine6.angle = math.random(1,360)
physics.addBody(mine6, "static", {density=.1, bounce=0.1, friction=.2, radius=12})
screenGroup:insert(mine6)

mine5 = display.newImage("mine.png")
mine5.x = math.random(5500,5770)
mine5.y = math.random(1,130)
mine5.speed = math.random(2,6)
mine5.initY = mine5.y
mine5.amp = math.random(20,80)
mine5.angle = math.random(1,360)
physics.addBody(mine5, "static", {density=.1, bounce=0.1, friction=.2, radius=12})
screenGroup:insert(mine5)
end

 function scrollCity(self,event)
if self.x < -477 then
    self.x = 480
else 
    self.x = self.x - self.speed
end
 end

  function moveMines(self,event)
if self.x < -50 then
     self.x = 500
     self.y = math.random(90,220)
     self.speed = math.random(2,6)
     self.amp = math.random(20,100)
     self.angle = math.random(1,360)
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 addtoit (event)
if event.phase == "ended" then
score.setScore (score.getScore()+1)
end
end


function jetReady()
jet.bodyType = "dynamic"
end

function activateJets(self,event)
self:applyForce(0, -1.5, self.x, self.y)
print("run")
end

function touchScreen(event)
print("touch")
if event.phase == "began" then
 jet.enterFrame = activateJets
     Runtime:addEventListener("enterFrame", jet)
end

if event.phase == "ended" then
 Runtime:removeEventListener("enterFrame", jet)
  end

end

function gameOver()
storyboard.gotoScene("restart", "fade", 400)
end

function explode()

explosion.x = jet.x
explosion.y = jet.y
explosion.isVisible = true
explosion:play()
jet.isVisible = false
timer.performWithDelay(3000, gameOver, 1)

end
 local taSound = audio.loadSound("GAME.mp3")
 local tapSound = audio.loadSound("explosion-01.wav")
function onCollision(event)
if event.phase == "began" then
  if jet.collided == false then 
    jet.collided = true
    jet.bodyType = "static"
    explode()
     audio.stop()
     audio.play(tapSound ,{ duration=3100 } )
     background:removeEventListener("touch", addtoit)
  end
end
end


 function scene:enterScene(event)


storyboard.purgeScene("start")
storyboard.purgeScene("restart")

Runtime:addEventListener("touch", touchScreen)

city1.enterFrame = scrollCity
Runtime:addEventListener("enterFrame", city1)

city2.enterFrame = scrollCity
Runtime:addEventListener("enterFrame", city2)

city3.enterFrame = scrollCity
Runtime:addEventListener("enterFrame", city3)

city4.enterFrame = scrollCity
Runtime:addEventListener("enterFrame", city4)

mine1.enterFrame = moveMines
Runtime:addEventListener("enterFrame", mine1)

mine2.enterFrame = moveMines
Runtime:addEventListener("enterFrame", mine2)

mine3.enterFrame = moveMines
Runtime:addEventListener("enterFrame", mine3)

mine4.enterFrame = moveMines
Runtime:addEventListener("enterFrame", mine4)

mine5.enterFrame = moveMines
Runtime:addEventListener("enterFrame", mine5)

 mine6.enterFrame = moveMines
 Runtime:addEventListener("enterFrame", mine6)

 Runtime:addEventListener("collision", onCollision)

audio.play(taSound)
 background:addEventListener("touch", addtoit)
end

function scene:exitScene(event)

Runtime:removeEventListener("touch", touchScreen)
Runtime:removeEventListener("enterFrame", city1)
Runtime:removeEventListener("enterFrame", city2)
Runtime:removeEventListener("enterFrame", city3)
Runtime:removeEventListener("enterFrame", city4)
Runtime:removeEventListener("enterFrame", mine1)
Runtime:removeEventListener("enterFrame", mine2)
Runtime:removeEventListener("enterFrame", mine3)
Runtime:removeEventListener("enterFrame", mine4)
Runtime:removeEventListener("collision", onCollision)

end

function scene:destroyScene(event)

end
scene:addEventListener("createScene", scene)
scene:addEventListener("enterScene", scene)
scene:addEventListener("exitScene", scene)
scene:addEventListener("destroyScene", scene)
return scene
4

1 に答える 1

0

問題は、scene:enterScene都市オブジェクトを何度も何度も読み込もうとすると同時に、コードに非常に多くのランタイムリスナーがあり、同じオブジェクトを繰り返し呼び出すことにあると思います。横スクロールゲームを作成していますか?もしそうなら、横スクロールゲームを最初から作成する方法に関するこのリンクを見てみることができますhttp://mobile.tutsplus.com/tutorials/corona/corona-sdk-create-a-side-scroller-from-scratch/ これを願っています役立ちます

于 2013-06-30T08:13:51.123 に答える