当它不应该用Java时,它会变成180

问题描述 投票:0回答:1

所以我试图从pacman制作鬼(小指)。但是我对这个动作有问题。所以我使用getX()和getY()来确定pacman的位置,以及幽灵应该去哪里。

然而,当pacman例如是EAST并且幽灵已经走向WEST时,问题就出现了。然后,当幽灵检测到pacman X或Y时,它立即变为180。

这是代码,你不需要阅读所有内容,它是类似的。我试图涵盖每一个案例。

import ch.aplu.jgamegrid.*;
import java.awt.Color;
import java.util.*;

public class Ghost extends Actor    

Set<Location.CompassDirection> random2SubDirs = new HashSet<Location.CompassDirection>();
    Location pakLocation = pakman.wherePakman();
    Location.CompassDirection dir = Location.EAST; 
    if (pakLocation.getX() > this.getLocation().getX()){
        dir = Location.EAST;
    }
    else if (pakLocation.getX() < this.getLocation().getX()){
        dir = Location.WEST;
    }
    else if (pakLocation.getY() > this.getLocation().getY()){
        dir = Location.SOUTH;
    }
    else if (pakLocation.getY() < this.getLocation().getY()){
        dir = Location.NORTH;
    }

    if (pakLocation.getX() == this.getLocation().getX()){
        if((pakLocation.getY() > this.getLocation().getY())){
            dir = Location.SOUTH;
        else if((pakLocation.getY() < this.getLocation().getY())){
            dir = Location.NORTH;
    }
    else if (pakLocation.getY() == this.getLocation().getY()){
        if((pakLocation.getX() > this.getLocation().getX())){
            dir = Location.EAST;
        else if((pakLocation.getX() < this.getLocation().getX())){
            dir = Location.WEST;
    }

    if (pakLocation.getY() > this.getLocation().getY() && pakLocation.getX() < this.getLocation().getX()){
        //southwest  
       random2SubDirs.add(Location.SOUTH);
       random2SubDirs.add(Location.WEST);
            int n = randomNumberGen.nextInt(2);
     System.out.println("southwest " + n);
            switch(n){
                case 0 : dir = Location.SOUTH;
                case 1 : dir = Location.WEST;
            }
     no180Turn(dir);
    }else if(pakLocation.getY() > this.getLocation().getY() && pakLocation.getX() > this.getLocation().getX()){
     //southeast   
       random2SubDirs.add(Location.SOUTH);
       random2SubDirs.add(Location.EAST);
            int n = randomNumberGen.nextInt(2);
       System.out.println("southeast " + n);
            switch(n){
                case 0 : dir = Location.SOUTH;
                case 1 : dir = Location.EAST;
            }
    }else if(pakLocation.getY() < this.getLocation().getY() && pakLocation.getX() < this.getLocation().getX()){
        //northwest
       random2SubDirs.add(Location.NORTH);
       random2SubDirs.add(Location.WEST);
            int n = randomNumberGen.nextInt(2);
       System.out.println("northwest " + n);
            switch(n){
                case 0 : dir = Location.NORTH;
                case 1 : dir = Location.WEST;
            } 
    }else if(pakLocation.getY() < this.getLocation().getY() && pakLocation.getX() > this.getLocation().getX()){
        //northeast
        random2SubDirs.add(Location.NORTH);
       random2SubDirs.add(Location.EAST);
            int n = randomNumberGen.nextInt(2);
       System.out.println("northeast " + n);
            switch(n){
                case 0 : dir = Location.NORTH;
                case 1 : dir = Location.EAST;
            }
    }
    if (fleeing){
        dir = oppositeDir(dir);
    }
    this.setDirection(dir);
    if (canMove(dir)){
        lastDir = dir;
        move();
    }else {randomMode = 10;
           System.out.println("now it is random");
    }
}

是在IF还是我应该为此制作另一种方法?

任何帮助将非常感激。

java localization location game-physics
1个回答
0
投票

而不是使用枚举方向(我假设这是NORTHEAST ...),为什么不只是计算方向?你可以这样做:

int xDifference = pakLocation.getX() - this.getLocation.getX();

它给出了沿着x轴从幽灵到pakman的距离,并且包括指示方向的符号(在x坐标的情况下为东或西)。

然后,为了获得唯一的方向,使用signum

int xDirection = Math.signum(xDifference);

哪个将返回1(向东),-1(向西)或0(不改变横向位置)。然后,如果你需要调整速度,可以将xDirection乘以你想要每个“tick”移动鬼的数量。然后只复制上面的2行来处理y轴。

这无疑是远非完美的,但我认为它允许更容易的调试。这不会直接解决您的问题,但应该使运动逻辑更简单,这可能会有所帮助。

如果有人在逻辑中发现任何问题,请发表评论,我会更新它。

© www.soinside.com 2019 - 2024. All rights reserved.