2014-01-13 28 views
0

我是初學者編碼,我有幾個問題:首先 我想知道這是爲什麼代碼不動:功能「的 - 做 - 結束」 /移動物體(科羅娜SDK)

local speed = 5 
function cube() 
    for i = 1,20,2 do 
    local rect = display.newRect(50,50,50,50) 
    rect.x = screenleft-300 + (50*i) 
    rect.y = _y 
    rect.x = rect.x - speed 
     if (rect.x < -450)then 
     rect.x = 1200 
     end 
    end 
end 

timer.performWithDelay(1, cube, -1) 

其次:有什麼之間

Runtime:addEventListener("enterFrame", cube) 
and 
timer.performWithDelay(1, cube, -1) 

因爲我與他們兩人

而且做的同樣的結果,爲什麼當我使用功能「爲」複製像廣場上的差異我已經做好了,這一個把圖像放在彼此背後,而不是像彼此旁邊的正方形(我試圖複製的圖像超過4邊)

感謝您的回覆!


THKS很多夥計,我知道你在這裏通過意思,但我的問題是有點怪異,也許笑,也許我們不能做到這一點 我嘗試再解釋:

for i=1,10,1 do 
    local Circle = display.newCircle(50, 20, 20) 
    Circle.x = _x + (50*i) 
    Circle.y = _y 
    end 

所以在這裏我有一個類似於00000的圓線(想象0是圓圈^^) 並且我想讓這條線從左側移動到右側屏幕,但是當我嘗試使它移動時:

Circle.x = Circle.x - speed 

科羅娜不承認「circle.x」,所以我不能,也許是因爲插入到「FOR」 所以我的問題是:「如果可以用」FOR「來移動這條環線?

我希望我已經去過更清晰 無論如何,感謝所有

回答

0

我先回答你的第二個問題:

Runtime:addEventListener("enterFrame", cube) 

功能的addEventListener添加監聽器監聽的對象的列表。當發生命名事件(在本例中爲「enterFrame」)時,監聽器將被調用並被提供表示事件的表。在您的代碼中,偵聽器將在每幀中調用cube()(正常情況下,遊戲以每秒60幀的速度運行)。

timer.performWithDelay(delay, listener [, iterations]) 

performWithDelay做它所說的:延遲後調用指定的函數。定時器函數返回一個可以與其他定時器*函數一起使用的對象。在您的代碼timer.performWithDelay(1,cube,-1)中,該函數每1ms調用一次cube(),並且它將一直這樣做。這不是一件好事。沒有什麼能夠捕捉定時器功能的返回,它將永遠運行。

現在,回答你的主要問題。我相信你要做的就是創建一個正方形並將其移動到屏幕上。如果這是正確的,這裏是你應該怎麼做:

local square = display.newRect(100,100,50,50) 
local speed = 2 

-- called every frame 
local function moveSquare() 
    square.x = square.x + speed 
end 

Runtime:addEventListener("enterFrame", moveSquare) 

你想讓它做什麼你的代碼不這樣做的原因是因爲你誤會了一些基本的東西CoronaSDK。

希望這個小小的代碼可以幫助你更多地瞭解CoronaSDK的工作原理。不要忘記檢查電暈的文檔http://docs.coronalabs.com/

0

你正在一個循環中創建一個本地對象,並試圖將它移到循環之外。由於lua使用局部變量的方式,這不起作用。有關更多信息,請參閱http://www.lua.org/pil/4.2.html

此外,您需要將對象放置到一個顯示組中,以便輕鬆移動它們。如果您使用Box2D物理學,我建議您在http://docs.coronalabs.com/api/library/physics/index.html處閱讀更多內容。

您的代碼:

for i=1,10,1 do 
    local Circle = display.newCircle(50, 20, 20) 
    Circle.x = _x + (50*i) 
    Circle.y = _y 
end 

應改爲:

local Circle = display.newGroup(); --Forward declaration of Variable. Place this before any calls for it. 
local speed = 2; 

for i=1,10,1 do 
    local object = display.newCircle(50,20,20); 
    object.x = _x + (50*i); 
    object.y = _y; 
    Circle:insert(object); --Insert this local object into the display group 
end 

function moveCircle() 
    Circle.x = Circle.x + speed; 
end 

Runtime:addEventListener("enterFrame", moveCircle); 

這將每一幀移動環線,在X軸上,由速度變量的值。

如果你想用for循環來移動它,那麼我們需要在上下文中看到更多的代碼。