【问题标题】:function 'for - do - end" / moving object ( Corona Sdk )功能'for - do - end' / 移动物体(Corona Sdk)
【发布时间】:2014-01-13 17:23:14
【问题描述】:

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

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

我希望我更清楚 不管怎样,谢谢大家

【问题讨论】:

    标签: function for-loop sdk lua coronasdk


    【解决方案1】:

    我先回答你的第二个问题:

    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 的文档

    【讨论】:

      【解决方案2】:

      您正在循环中本地创建一个对象并尝试将其移出循环。由于 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 循环移动它,那么我们需要在上下文中查看更多代码。

      【讨论】:

        猜你喜欢
        • 2011-12-04
        • 2016-08-20
        • 2021-07-10
        • 1970-01-01
        • 2012-07-05
        • 1970-01-01
        • 1970-01-01
        • 2017-05-21
        • 2016-03-25
        相关资源
        最近更新 更多