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.draw
中 self
指的是 instance
我在制作多个具有随机移动速度的对象时遇到了问题。 例如,我需要制作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.draw
中 self
指的是 instance