玩家,敌人和子弹互动(游戏设计)

时间:2017-07-17 10:45:32

标签: c++ oop design-patterns cocos2d-x

我做了一个子弹地狱游戏。一切都按预期工作。由于我从未参加任何游戏设计课程等,我对代码感到担忧(质量明智和设计明智)。

我所做的是将所有对象存储在GLOBAL VECTORS中(我知道它很糟糕)。比如

EnemiesArray

bulletsArray //敌人子弹

playerBullets //玩家子弹

对于碰撞,我有一个Manager来检查更新中的冲突

for (auto playerBullet : playerBullets)
{
 for(auto enemy : EnemyArray)
    {


        if(enemy->checkCollision(playerBullet->bulletSprite->getPosition()) )
        {
           //collided
         }
    }
}

因此,当子弹与敌人发生碰撞时,很多事情都会受到影响。例如后台对象移动,Player获取xp和Hud更改等。

Manager包含对bg hud及其所需内容的引用。

问题1:

如何摆脱全局载体。 (它允许我从代码中的任何地方创建子弹/敌人。)

问题2: 是否应该有经理来检查子弹碰撞?或者对象本身应该检查它?如果是这样的话,我如何将敌人的参考物提供给子弹。

问题3: 管理员正在管理像我提到的太多对象。 (对不起,我在这里听起来很蠢)。我听说一位经理应该管理一种工作。

1 个答案:

答案 0 :(得分:1)

我在过去几个月里成功创建了自己的游戏。其中一个主要功能是让玩家射击敌人。你的问题看起来和我的问题非常相似,所以我会告诉你我在项目中是如何处理它们的。

问题1:我的游戏包含几个级别。每个级别都是一个单独的对象,拥有自己的敌人/奖金等容器。唯一可以将生物添加到关卡的地方是关卡的构造函数。但是,在某些情况下动态添加它们不是问题。关键是在完成特定级别后,我删除了分配给它的所有对象。唯一能够得到关于球员及其得分的信息。

问题2:每个动态事件都应该有自己的碰撞检测器。对象本身应能够自行检查。我宁愿建议创建另一个类,如探测器,并定义一些方法来处理检查玩家和敌人/玩家和子弹/子弹和敌人等之间的碰撞(一种方法用于一个目的)。您可以将level的容器传递给Detector,以便它能够遍历它们并运行您为特定碰撞定义的算法。

问题3:经理应该是游戏设计的每个部分的界面,例如 BulletManager EnemiesManager - 这就是我的方式处理它。

我希望您能以任何方式找到我的解决方案。