我该如何制造更多的敌人?SDL2/C++
How do I spawn more enemies? SDL2/C++
我正在学习SDL,我希望敌人在一段时间后随机繁殖。我知道如何在屏幕上渲染1个敌人,但我很难渲染超过1个。在我的程序中,我有一个敌人类,它有绘制、检查碰撞、渲染和移动敌人的功能。你能给我一些代码示例吗?我更喜欢SDL/C++。
可能不会给出任何示例,但我建议使用一个简单的概念:将移动与渲染分离。另外,建立敌人列表。
你有一个敌人类,这很好。现在管理它们的列表。当你想添加一个新的敌人时,创建一个新对象并将其添加到你的列表中。
然后分两步,循环浏览整个列表——移动所有敌人(意味着改变对象中的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);
这个例子是为了演示概念。真正的实现应该使用智能指针和工厂设计模式。
相关文章:
- 如何创建事件驱动的 SDL2 应用程序
- 使用 SDL2 和SDL_image C++加载图像
- 将 SDL2 与 CMake 链接起来
- SDL2 透明背景
- 如何在使用 SDL2 的 Eclipse 中构建 c++ 程序
- 不带轮询的 SDL2 事件回调
- C++ SDL2:如何将矩形渲染到多个视口中
- SDL2 调整窗口大小后如何缩放鼠标坐标?
- SDL2 二维纹理分配/池化
- 如何使用 sdl2 快速绘制像素网格?
- 看不到文件'SDL2.lib'
- 我的 SDL2 程序需要哪些二进制文件,以便它在另一台未安装 SDL2 的计算机中工作
- SDL2 无法正确绘制矩形
- 实施英特尔实感和 SDL2 时出现问题
- 找不到 sdl2.dll
- SDL2 程序只写入部分字符串
- 为什么在使用 SDL2 时仍然收到'undefined reference'链接器错误?
- 在另一台 PC 上执行程序时加载 SDL2 共享库时出错
- 我该如何制造更多的敌人?SDL2/C++
- 敌人不会跟随玩家。SDL2/C++