我如何产生更多的敌人? SDL2 / C ++

时间:2015-02-19 19:54:41

标签: c++ sdl

我正在学习SDL,我希望敌人在一段时间间隔后随机产生。我知道如何让1个敌人渲染到屏幕上,但我正在努力渲染超过1个。在我的程序中,我有一个敌人类,它具有绘制,检查碰撞,渲染和移动敌人的功能。你能给我一些代码示例,我更喜欢SDL / C ++。

2 个答案:

答案 0 :(得分:1)

可能不会得到任何给出的例子,但我会推荐一个简单的概念:从渲染中单独移动。另外,建立敌人名单。

你有一个敌人类,这很好。现在管理它们的列表。如果要添加新敌人,请创建一个新对象并将其添加到列表中。

然后分两步,循环遍历整个列表 - 移动所有敌人(意味着更改对象中的X,Y等,但不是绘图)。

然后再次浏览列表并渲染敌人。

管理对象列表和对象生命时间(当敌人死亡时从列表中删除等)变成一个简单的例子。

答案 1 :(得分:0)

我建议将敌人置于std::vectorstd::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);

这个例子是为了演示概念。真正的实现应该使用智能指针和工厂设计模式。