我如何产生更多的敌人? SDL2/C++
How do I spawn more enemies? SDL2/C++
我正在学习 SDL,我希望敌人在一段时间后随机生成。我知道如何将 1 个敌人渲染到屏幕上,但我正在努力渲染超过 1 个。在我的程序中,我有一个敌人 class,它具有绘制、检查碰撞、渲染和移动敌人的功能。你能给我一些代码示例吗,我更喜欢SDL/C++。
可能不会给出任何示例,但我会推荐一个简单的概念:将移动与渲染分开。还有一个,建立敌人列表。
你有一个敌人class,这很好。现在管理它们的列表。当你想添加一个新敌人时,创建一个新对象并将其添加到你的列表中。
然后分两步循环遍历整个列表 - 移动所有敌人(意味着更改对象中的 X、Y 等但不更改绘图)。
然后再次遍历列表并渲染敌人。
管理对象列表和对象生命周期(当敌人死亡时从列表中删除等)成为一个简单的案例。
我建议将你的敌人放在 std::vector
或 std::queue
中。每个敌人都应该有自己的坐标(以便于放置)。
在你的更新或刷新循环中,迭代敌人列表,根据需要处理它们。
在另一个计时循环或线程中,您可以将敌人添加到容器中。这不应该影响程序其余部分的代码;除了向量中可能有更多数据(敌人)需要处理。
示例:
class Enemy_Base
{
public:
virtual void draw(/* drawing surface */);
};
class Troll : public Enemy
{
//...
};
std::vector<Enemy_Base *> enemy_container;
//...
std::vector<Enemy_Base *>::iterator enemy_iter;
// Rendering loop
for (enemy_iter = enemy_container.begin();
enemy_iter != enemy_container.end();
++enemy_iter)
{
(*enemy_iter)->draw(/*..*/);
}
// Create a new enemy
Troll * p_troll = new Troll;
enemy_container.push_back(p_troll);
这个例子是为了演示概念。真正的实现应该使用智能指针和工厂设计模式。
我正在学习 SDL,我希望敌人在一段时间后随机生成。我知道如何将 1 个敌人渲染到屏幕上,但我正在努力渲染超过 1 个。在我的程序中,我有一个敌人 class,它具有绘制、检查碰撞、渲染和移动敌人的功能。你能给我一些代码示例吗,我更喜欢SDL/C++。
可能不会给出任何示例,但我会推荐一个简单的概念:将移动与渲染分开。还有一个,建立敌人列表。
你有一个敌人class,这很好。现在管理它们的列表。当你想添加一个新敌人时,创建一个新对象并将其添加到你的列表中。
然后分两步循环遍历整个列表 - 移动所有敌人(意味着更改对象中的 X、Y 等但不更改绘图)。
然后再次遍历列表并渲染敌人。
管理对象列表和对象生命周期(当敌人死亡时从列表中删除等)成为一个简单的案例。
我建议将你的敌人放在 std::vector
或 std::queue
中。每个敌人都应该有自己的坐标(以便于放置)。
在你的更新或刷新循环中,迭代敌人列表,根据需要处理它们。
在另一个计时循环或线程中,您可以将敌人添加到容器中。这不应该影响程序其余部分的代码;除了向量中可能有更多数据(敌人)需要处理。
示例:
class Enemy_Base
{
public:
virtual void draw(/* drawing surface */);
};
class Troll : public Enemy
{
//...
};
std::vector<Enemy_Base *> enemy_container;
//...
std::vector<Enemy_Base *>::iterator enemy_iter;
// Rendering loop
for (enemy_iter = enemy_container.begin();
enemy_iter != enemy_container.end();
++enemy_iter)
{
(*enemy_iter)->draw(/*..*/);
}
// Create a new enemy
Troll * p_troll = new Troll;
enemy_container.push_back(p_troll);
这个例子是为了演示概念。真正的实现应该使用智能指针和工厂设计模式。