2017-07-17 153 views
2

我做了子彈地獄遊戲。一切按預期工作。由於我從未有過任何遊戲設計課程等,我對代碼有所擔憂(質量上的明智和設計上的明智)。玩家,敵人和子彈互動(遊戲設計)

我所做的是將所有對象存儲在全局向量中(我知道它是壞的)。如

EnemiesArray

bulletsArray //敵人的子彈

playerBullets //玩家子彈

而對於碰撞我有更新檢查碰撞

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


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

因此,當一個經理有子彈與敵人的碰撞,很多事情都會受到影響。例如背景對象移動,播放器獲取xp和Hud更改等。

管理器包含對bg hud和它需要的所有內容的引用。

問題1:

如何擺脫全局向量。 (它允許我從代碼中的任何地方創建子彈/敵人)。

問題2: 是否應該有管理員檢查子彈碰撞?或者對象本身應該檢查它?如果是的話,我怎麼給敵人的子彈參考。

問題3: 管理器管理的對象太多,像我提到的。 (對不起,我聽起來很愚蠢)。我聽到一位經理應該管理一種工作。

回答

1

我在過去的幾個月裏成功創建了自己的遊戲。其中一個主要特點是讓玩家射擊敵人。你的問題與我的看法很相似,所以我會告訴你我在項目中如何處理它們。我的遊戲由幾個關卡組成。每個級別都是一個單獨的對象,具有自己的容器用於敵人/獎勵等等。可以將生物添加到關卡中的唯一地方是關卡的構造函數。但是,在某些情況下動態添加它們並不是問題。關鍵是,在完成特定級別後,我擺脫了分配給它的所有對象。唯一支持的是關於球員和他的得分的信息。

問題2:每件動態事件都應該有自己的碰撞檢測器。對象本身應該而不是能夠自己檢查它。我寧願建議創建另一個類,如探測器並定義一些方法來處理檢查玩家與敵人/玩家和子彈/子彈與敵人等之間的碰撞(一種方法用於一個目的)。您可能會將等級的容器傳遞給檢測器,以便它能夠遍歷它們並運行您爲特定碰撞定義的算法。

問題3:經理應爲每一件你的遊戲設計的接口,例如用於BulletManagerEnemiesManager - 這就是我如何處理它。

我希望你能以任何方式找到我的解決方案。

+0

對於問題1:讓我說我創建一個對象的級別。那麼我必須爲敵人添加所有對象。這很好。但是當敵人射擊的時候。 如何將子彈添加到關卡?是否所有的敵人都保持了關卡的水平? –

+0

對於問題1:當敵人射出新子彈時,必須將其添加到敵人子彈的矢量中。這些應該分開,我的意思是玩家的子彈和enemie應該有自己的容器,在檢查碰撞時更容易迭代。當來自敵人的子彈與玩家接觸時,應該發生適當的事情,結果必須從矢量中刪除該子彈。通過這種方式,你的遊戲包含3個階段,這意味着移動物體,拍攝和檢查碰撞。 – MJey