2015-07-16 3 views
0

Я думал, что это будет просто, но я расчесывал сеть, пытаясь решить ее в течение нескольких дней.Передача информации обратно родителям (Corona SDK)

То, что я собираюсь сделать, это кнопка, которая вызывает небольшое всплывающее окно, которое затем можно использовать для выбора нового изображения для исходной кнопки. То, как я надеялся сделать это, - установить исходные кнопки sprite frame в composer.getVariable («buttonState»), но я не уверен, как передать команду для обновления исходного спрайта.

В настоящее время в main.lua я использую

local composer = require("composer") 
composer.setVariable("buttonState", 1) 
composer.gotoScene("scene_game") 

Тогда в scene_game.lua есть спрайт установить то:

local composer = require("composer") 

--calling up sprite.lua library 
local sprite = require("sprite") 
--setting up sprite sheet 
local sheet1 = sprite.newSpriteSheet("itemSlot.png", 72, 72) 
---spriteSheet, startFrame, frameCount 
local spriteSet1 = sprite.newSpriteSet(sheet1, button1state, 4) 
--Slot 1 
--spriteSet, sequenceName, startFrame, frameCount, time, [loopParam] 
sprite.add(spriteSet1, "green", composer.getVariable("buttonState"), 4) 
local slot1 = sprite.newSprite(spriteSet1) 
slot1.x = 72*6 --button location left/right 
slot1.y = 72*5 --button location up/down 

--Bring up Item slot Selection window 
slot1.dropDown=function(event) 
    if(event.phase == "ended") then 
    composer.showOverlay("scene_dropDown", options) 
    end 
end 
slot1:addEventListener("touch",slot1.dropDown) 

В scene_dropDown.lua

local composer = require("composer") 
local scene_game = require("scene_game") 
local sprite = require("sprite") 

--setting up sprite sheet 
local sheet1 = sprite.newSpriteSheet("itemSlot.png", 72, 72) 

---spriteSheet, startFrame, frameCount 
local spriteSet2 = sprite.newSpriteSet(sheet1, 1, 4) 

--Item option 1 
--spriteSet, sequenceName, startFrame, frameCount, time, [loopParam] 
sprite.add(spriteSet2, "green", 1,4) 
local item1 = sprite.newSprite(spriteSet2) 
item1.x = display.contentCenterX+36 --button location left/right 
item1.y = display.contentCenterY-36 --button location up/down 
item1:setFrame(2) 

--Item option 1 functions 
function state1Cb(event) 
display.remove(item1) 
composer.setVariable("buttonState", 2) 
item1:removeEventListener("tap", state1Cb) 
timer.performWithDelay(1, addListenerA) -- Do this instead 
return true 
end 

--Item option 1 listener 
function addListener1() 
item1:addEventListener("tap", state1Cb) 
end 

--Finishing up the listeners 
addListener1() 
return scene 

Это сокращенная версия кода только с одним вариантом.

ответ

0

В showOverlay() должен быть параметр в таблице событий, который является объектом сцены родителя. Если добавить функции или переменные сцены объекта/таблицы, то в showOverlay() 's создать или показать функции вы можете сделать:

local parentScene = event.parent 
parentScene.doSomething() 
parentScene.someValue = 10 

и т.д.