2014-04-16 3 views
0

Добавлена ​​ссылка на раскадровке ПРОЕКТ ПОГРешНОСТеЙCorona SDK Проблемы с Scene Change

Проект - http://forums.coronalabs.com/index.php?app=core&module=attach&section=attach&attach_id=2062

оригинальная тема - http://forums.coronalabs.com/topic/46884-scene-change-pleeeeease-help/

Я попытался изменить сцены так много раз, это либо заставляет игрока сбой и перемещаться в любом месте, либо я пытаюсь применить силу (бла-бла-бла (не помню)) значение nil или плохой аргумент exp а также все другие сумасшедшие вещи. Чтобы все упростилось для нас обоих, я отправил вам код без изменения сцены, поскольку это полный беспорядок. Я пытался сделать это в течение нескольких недель, но не могу понять это правильно. Я знаю, что мне кажется, что я ничего не делаю, спрашивая вас, что похоже на невозможный код, но я не могу изменить сцену без больших ошибок.

Пожалуйста скажите мне код, чтобы сделать:

local function onCollision(event) 
    if event.phase == "began" then 
    -- go to nex​t lua/scene completely obliterating this one as 
    -- if I'm opening a whole new game 
    end 
    return true 
end 

Если вы действительно не хотите, чтобы сделать код для меня, я готов заплатить в данный момент

Я просто хочу, чтобы получить прошлое ... пожалуйста

display.setStatusBar(display.HiddenStatusBar) 

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

physics.setGravity(0, 15) -- set x & y gravity to 0 

local background = display.newImage("background.jpg") 
background.x = display.contentCenterX 
background.y = display.contentCenterY 

local ground = display.newImage("ground.png") 
ground.x = display.contentCenterX 
ground.y = 480 
physics.addBody(ground, "static", {density=1, friction=1, bounce=0.3 }) 

local flag = display.newImage("flag.png") 
flag.x = display.contentCenterX 
flag.y = 50 
physics.addBody(flag, "static", {density=0, friction=1, bounce=0.3 }) 

local player = display.newImage("player.png") 
player.x = display.contentCenterX 
player.y = 425 
physics.addBody(player, {density=0, friction=1, bounce=0.3 }) 
player.isFixedRotation = true 

system.setAccelerometerInterval(100.0) 

local tiltSpeed = 2 

local function onTilt(event) 
     movementX = tiltSpeed * event.xGravity 
     player.x = player.x + movementX 
       -- prevent player from moving offscreen 
     if player.x <= 30 then 
       player.x = 30 
     elseif player.x >= 310 then 
       player.x = 310 
     end 
end 

local function onCollision(event) 
    if event.phase == "began" then 
    -- go to next lua/scene completely obliterating this one as if I'm opening a whole new game 
    end 
    return true 
end 

local function onScreenTouch(event) 
    if event.phase == "began" then 
     -- make player jump 
     player:applyForce(0, -4, player.x, player.y) 
    end 
end 

Runtime:addEventListener("accelerometer", onTilt) 
Runtime:addEventListener("touch", onScreenTouch) 
flag:addEventListener("collision", onCollision) 

ответ

0

Вы не можете оставить текущую сцену во время столкновения. То, что вы можете сделать, заключается в том, что таймер вызывает функцию 1 миллисекунду после столкновения. Попробуйте этот код вместо вашего детектора событий столкновения:

local function onCollision(event) 
    if event.phase == "began" then 
     function(sceneChange) 
      storyboard.gotoScene(Your next scene here") 
     end 
     timer.performWithDelay(1,sceneChange,1) 
    end 
    return true 
end 

«Надежда, что помогает! Продолжайте кодирование!

+0

на другом примечании, вы должны действительно иметь всю свою графику в группе, чтобы было легче переходить между раскадными версиями. – PhotoDev13

0

Просто сделать функцию, которая изменяет переходит к следующей сцене

local function changeScene() 
    composer.gotoScene("nextScene") 
end 

local function onCollision(event) 
    if event.phase == "began" then 
    changeScene() 
    end 
    return true 
end 

Я предлагаю использовать composer api его более обновленное, чем раскадровки апи.

В качестве рекомендации удалите всех вызываемых вами событий, особенно тех, которые были у вас. Даже если вы смените сцену, это событие все равно будет срабатывать, следовательно, вы получите и ошибку, потому что она ссылается на нее. Правило большого пальца: «Если вам это не нужно, удалите его».

Смежные вопросы