功能'for - do - end'/移动物体(Corona Sdk)

时间:2014-01-13 17:23:15

标签: function for-loop sdk lua corona

我是编码的初学者,我有疑问: 首先,我想知道为什么代码没有移动:

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线?

我希望我更清楚 无论如何,谢谢大家

2 个答案:

答案 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循环移动它,那么我们需要在上下文中看到更多代码。