2013-11-05 31 views
1

請原諒總共n00b個問題。我是Corona SDK的新手(一般來說編程,除了一些VB和閱讀Frank Zammetti的優秀書),我遇到了一個問題。在嘗試了幾件事情並廣泛搜索後,我無法理解這一點......Corona - 與個別收聽者一起孵化物體

背景:作爲一種學習練習,我試圖編寫一個遊戲,其中有六個'thingies'。每件東西都會根據隨機屬性給予「分數」,而得分最高的東西將是「正確」的選擇。用戶將點擊他們的選擇,然後他們會被告知他們是否正確選擇。

我正在研究我的'繪製水平'功能,它會產生東西。這個功能應該在屏幕上產生6個圖像,然後使這六個圖像中的每一個都可以通過點擊來識別。這是我寫的代碼:

for i=1,6,1 do 
    thingy[i] = display.newImageRect("graphics/thingy.png", 67, 122, true); 
    thingy[i].name = ("thingy"..i); 
    thingy[i].id = i; 
    thingy[i].x = (positionSpacing * i) - (positionSpacing/2); 
    thingy[i].y = display.contentCenterY; 
    table.insert(thingy[i], gc.gameDG); 
    print(thingy[i].name.." "..thingy[i].x.." index "..thingy[i].id); --for debug 
    thingy[i]:addEventListener("tap", gc.positionTapped); 

end 

這創造了在屏幕上愉快的事情。於是我定義一個函數來對事物的反應攻絲:

function gc:positionTapped(event) 
    utils:log(sceneName, "positionSelected()"); 
    print(self.id); 

end 

的utils的:日誌功能是有調試,並且能夠正常運行。但是print self.id不起作用。我期待它給我thingy id(這應該是我在循環中定義的)。它返回'零'。

我試圖改變產卵循環是:

for i=1,6,1 do 
    thingy[i] = display.newImageRect("graphics/thingy.png", 67, 122, true); 
    thingy[i].name = ("thingy"..i); 
    thingy[i].id = i; 
    thingy[i].x = (positionSpacing * i) - (positionSpacing/2); 
    thingy[i].y = display.contentCenterY; 
    table.insert(thingy[i], gc.gameDG); 
    print(thingy[i].name.." "..thingy[i].x.." index "..thingy[i].id); --for debug 
    thingy[i]:addEventListener("tap", gc:positionTapped); 

end 

,循環崩潰了與「近有望函數參數)」

所以我改變了它再次爲:

for i=1,6,1 do 
    thingy[i] = display.newImageRect("graphics/thingy.png", 67, 122, true); 
    thingy[i].name = ("thingy"..i); 
    thingy[i].id = i; 
    thingy[i].x = (positionSpacing * i) - (positionSpacing/2); 
    thingy[i].y = display.contentCenterY; 
    table.insert(thingy[i], gc.gameDG); 
    print(thingy[i].name.." "..thingy[i].x.." index "..thingy[i].id); --for debug 
    thingy[i]:addEventListener("tap", gc:positionTapped()); 

end 

它崩潰了「運行時錯誤斷言失敗!」在循環過程中,一樣:

thingy[i]:addEventListener("tap", gc.positionTapped(thingy[i].id)); 

也是如此:

thingy[i]:addEventListener("tap", gc.positionTapped(i)); 

我一直在閱讀和谷歌上搜索了三天仍然無法找到答案。如果你願意對n00b表示同情並幫助我,我會非常感激。 :-)

回答

2

試試這個:

local thingy = {} 
local positionSpacing = 55 

function tapHandler(event) 
    print(event.target.name) 
end 

for i=1,6,1 do 
    thingy[i] = display.newImageRect("Icon.png", 50, 50, true); 
    thingy[i].x = (positionSpacing * i) - (positionSpacing/2); 
    thingy[i].y = display.contentCenterY; 
    thingy[i].name = ("thingy"..i); 
    thingy[i]:addEventListener("tap",tapHandler) 
end 

保持編碼...............