使用OOP在Corona LUA中创建多个精灵对象

由于代码量很少,我决定将其全部发布如下。

我试图创建的OOP代码的核心从“Balloon”的初始化开始

我将气球(imageRect)设置为每个Balloon实例的精灵属性。

然后我有一个“tapListener”来告诉气球实例在被轻敲时移动。

然而,当我轻敲创建的3个气球中的任何一个时,只有一个气球会移动。

我猜测这与对self对象的全局引用或在“tapListener”函数中更改作用域有关。

有什么建议吗?

您可以直接运行下面的代码,所有内容都在这里!

local background = display.newImageRect("background.png", 460, 570)
background.x = display.contentCenterX
background.y = display.contentCenterY

local platform = display.newImageRect("platform.png", 300, 50)
platform.x = display.contentCenterX
platform.y = display.contentHeight-25

local physics = require("physics")
physics.start()

physics.addBody(platform, "static")

Balloon = {xloc = display.contentCenterX, yloc = display.contentCenterY}
function Balloon:new(o)
    o = o or {}
    setmetatable(o, self)
    self.__index = self
    self.sprite = display.newImageRect("balloon.png", 112, 112)
    self.sprite.x = o.xloc
    self.sprite.y = o.yloc
    physics.addBody(self.sprite, "dynamic", {radius=50, bounce=0.4})
    return o
end

function Balloon:push()
    self.sprite:applyLinearImpulse(0.2, -0.75, self.sprite.x-10, self.sprite.y)
end

function Balloon:tapListener()
    self.sprite:addEventListener("tap", function() self:push() end)
end

balloons = {}

for i=1,3,1 do
    balloons[i] = Balloon:new{xloc=display.contentWidth-(120*i)+60}
    balloons[i]:tapListener()
end
点赞