我正在尝试将 Lua 与我的游戏引擎原型一起使用,但我遇到了奇怪的错误。
我的目标是用 Lua 循环创建 X 对象并渲染它们。
sprite = Sprite("icon.jpg", 300, 300, 0)
sprite2 = Sprite("icon.jpg", 100, 100, 0)
b1 = BoxObject(sprite)
b2 = BoxObject(sprite2)
sprite3 = Sprite("circle.png", 200, 100, 0)
sprite4 = Sprite("circle.png", 300, 100, 0)
b3 = CircleObject(sprite3)
b4 = CircleObject(sprite4)
n = Node()
n:AddChild(b1)
n:AddChild(b2)
n:AddChild(b3)
n:AddChild(b4)
for i = 0, 10, 1 do
x = math.random(700)
y = math.random(500)
n:AddChild(BoxObject(Sprite("icon.jpg", x, y, 0)))
end
for i = 0, 10, 1 do
x = math.random(700)
y = math.random(500)
local s = Sprite("circle.png", x, y, 0)
local o = CircleObject(s)
n:AddChild(BoxObject)
end
如果我这样做,代码可以正常工作,但游戏会在瞬间到几秒的随机时间内崩溃。如果我将此代码仅用于循环创建的对象,而不是手动创建的对象,游戏会立即崩溃。
但是,如果我用 C++ 编写等效的 Lua 代码,它可以毫无问题地运行。
for(int i = 0; i < 20; i++){
float x = rand() % 700;
float y = rand() % 500;
n->AddChild(new BoxObject(new Sprite("icon.jpg", x, y)));
}
for(int i = 0; i < 20; i++){
float x = rand() % 700;
float y = rand() % 500;
n->AddChild(new CircleObject(new Sprite("circle.png", x, y)));
}
这是我的 Lua 绑定
static void Lua(lua_State *lua){
luabind::module(lua)
[
luabind::class_<Node>("Node")
.def(luabind::constructor<>())
.def(luabind::constructor<float, float, float>())
.def("Render", &Node::Render)
.def("Move", &Node::Move)
.def("Rotate", &Node::Rotate)
.def("AddChild", &Node::AddChild)
.def("RotateAroundPoint", &Node::RotateAroundPoint)
];
}
除 AddChild 外,每个方法都接受并返回 void
virtual void AddChild(Node *child);
Sprite 和 Box a 和 Circle 对象都继承自 Node 类。
有谁知道什么会导致这个奇怪的错误?我会很高兴有任何帮助。