我是编码的初学者,我有疑问: 首先,我想知道为什么代码没有移动:
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)
因为我同时得到了相同的结果
为了做到这一点,为什么当我使用“for”功能来复制像我已经完成的正方形之类的东西时,这个将图像放在彼此之后并且不像彼此旁边的正方形(我正在尝试的图像)复制有超过4面)
感谢您的回复!
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
Corona不承认“circle.x
”所以我不能,也许是因为插入“FOR”
所以我的问题是:“如果可以使用”FOR“,如何移动这个Circle线?
我希望我更清楚 无论如何,谢谢大家
答案 0 :(得分:0)
我先回答你的第二个问题:
Runtime:addEventListener( "enterFrame", cube )
函数addEventListener将一个侦听器添加到对象的侦听器列表中。当命名事件发生时(在本例中为“enterFrame”),将调用侦听器并提供表示事件的表。在你的代码中,监听器将在每一帧上调用cube()(通常,游戏以每秒60帧的速度运行)。
timer.performWithDelay(delay, listener [, iterations])
performWithDelay执行它所说的:延迟后调用指定的函数。 timer函数返回一个可与其他timer。*函数一起使用的对象。在你的代码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/
中查看Corona的文档答案 1 :(得分: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循环移动它,那么我们需要在上下文中看到更多代码。