【问题标题】:(Java) Ship projectiles speeding up as more ships fire(Java)随着更多船只开火,船弹加速
【发布时间】:2015-02-17 23:57:07
【问题描述】:

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

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 语句是问题还是我必须区分哪些子弹属于哪艘船?

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

【问题讨论】:

    标签: java arrays projectile


    【解决方案1】:

    您可以确保只检查一次:

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

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

    【讨论】:

    • 地图本身实际上存储在与 PlayerMapData 不同的类中。 PlayerMapData 将子弹位置与船位置、宽度等一起存储。检查是否已经更新是否会导致它检查一次并且不再检查?所以子弹会射击然后不动,对吧?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 2014-01-18
      • 1970-01-01
      • 2015-03-03
      • 2017-09-29
      • 2013-11-29
      • 2020-12-13
      相关资源
      最近更新 更多