Corona SDK / solar2d 多个移动物体

corona sdk / solar2d multiple moving objects

我在制作多个具有随机移动速度的对象时遇到了问题。 例如,我需要制作1000个物体,并以随机方向以随机速度移动它们。

OOP 方法不起作用,但在 love2d 中它可以毫无问题地工作。

local displayWidth = display.contentWidth
local displayHeight = display.contentHeight

particle = {}
particle.__index = particle

ActiveParticle = {}

function particle.new()
  instance = setmetatable({}, particle)
  instance.x = math.random(20, displayWidth)
  instance.y = math.random(20, displayHeight)
  instance.xVel = math.random(-150, 150)
  instance.yVel = math.random(-150, 150)
  instance.width = 8
  instance.height = 8
  table.insert(ActiveParticle, instance)
end


function particle:draw()
  display.newRect(self.x, self.y, self.width, self.height)
end

function particle.drawAll()
  for i,instance in ipairs(ActiveParticle) do
    particle:draw()
  end
end

function particle:move()
  self.x = self.x + self.xVel
  self.y = self.y + self.yVel
end

for i = 1, 10 do
  particle.new()
  particle.drawAll()
end

function onUpdate (event)
  instance:move()
end

Runtime:addEventListener("enterFrame", onUpdate)

此代码无效,似乎 solar2d 无法识别 'self'。

function particle.new()
  instance = setmetatable({}, particle)
  instance.x = math.random(20, displayWidth)
  instance.y = math.random(20, displayHeight)
  instance.xVel = math.random(-150, 150)
  instance.yVel = math.random(-150, 150)
  instance.width = 8
  instance.height = 8
  table.insert(ActiveParticle, instance)
end

instance应该是本地的!

还有

function particle.drawAll()
  for i,instance in ipairs(ActiveParticle) do
    particle:draw()
  end
end

应该使用 instance:draw() 因为你想绘制实例而不是 particle。否则 self 将不会引用 instance,因此您无法访问它的成员。

或者使用particle.draw(instance)

由于 __index 元方法 instance:draw() 将解析为 particle.draw(instance) 所以在 particle.drawself 指的是 instance