0

所以到目前为止,我有一个小游戏,你可以在其中建造船只并试图摧毁敌方站。一切正常,除了不止一艘船在车站开火。似乎发生的事情(或者至少我相信)是设置子弹位置的代码发生的次数与船只的数量一样多。所以我尝试简单地将子弹的速度除以有多少艘船,但最终子弹停止移动。这是代码,因为它没有尝试任何修复。

for (int j = 0; j < 9999; j++) {
    if (PlayerMapData.weaponFireCreated [j]) {
        PlayerMapData.weaponFire [j].setLocation (
            (int) (PlayerMapData.weaponFire [j].x + playerMapData.weaponTravelSpeed * PlayerMapData.weaponFireDirectionX [j]),
            (int) (PlayerMapData.weaponFire [j].y + PlayerMapData.weaponTravelSpeed * PlayerMapData.weaponFireDirectionY [j])
        );

命中检测发生在下面。setLocation 语句是问题还是我必须区分哪些子弹属于哪艘船?

编辑:应该指定这是在一个计时器中。

4

2 回答 2

0

您可以确保只检查一次:

 if (PlayerMapData.weaponFireCreated [j] && !PlayerMapData.alreadyUpdated[j]) 
 { 
           ...
           PlayerMapData.alreadyUpdated[j]=true;
 }

您不会为每个飞船实例扫描整个地图,是吗?

于 2015-02-18T00:04:13.423 回答
0

所以问题仅仅是因为武器火力数组是一维的,因此被多艘船引用。使用 2D 阵列解决了这个问题,因为船只现在拥有它们发射的子弹的“所有权”,而不是试图移动任何船只发射的每颗子弹。

于 2015-03-03T02:27:02.057 回答