You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lua+LOVE框架实现面向对象遇问题:多Ship实例显示异常

问题根源:全局变量导致实例被覆盖

这是代码错误,不是Lua解释器或LOVE框架的异常——问题出在你的Object:new方法里的变量o没有用local声明!

在Lua中,未用local修饰的变量会被视为全局变量。所以每次调用Ship:new()时,你都在复用同一个全局的o表:第一次创建ship1时,o指向第一个Ship实例;第二次创建ship2时,o被覆盖成第二个实例,最终ship1和ship2其实引用的是同一个对象(最后创建的那个),自然只会显示第二个实例。

修正后的通用Object类

只需要给o加上local声明,确保每次调用new都创建一个独立的局部实例表:

local Object = {}

function Object:load(arg) end
function Object:update(dt) end
function Object:draw() end

function Object:new(arg)
    local o = {}  -- 这里加上local!
    setmetatable(o, self)
    self.__index = self
    o:load(arg)
    return o
end

return Object

额外说明

你的Ship类设计是合理的:将sprite、px、py定义在Ship类本身(而不是实例上),意味着所有Ship实例共享同一个精灵资源,这能节省内存,是正确的做法。

修正后再创建ship1和ship2,它们就是两个完全独立的实例,各自拥有自己的x、y、tint等属性,绘制时就能正常显示两个飞船了。

内容的提问来源于stack exchange,提问作者Okarin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:10:42