当它不应该用Java时,它会变成180
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当它不应该用Java时,它会变成180相关的知识,希望对你有一定的参考价值。
所以我试图从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还是我应该为此制作另一种方法?
任何帮助将非常感激。
答案
而不是使用枚举方向(我假设这是NORTH
,EAST
...),为什么不只是计算方向?你可以这样做:
int xDifference = pakLocation.getX() - this.getLocation.getX();
它给出了沿着x轴从幽灵到pakman的距离,并且包括指示方向的符号(在x坐标的情况下为东或西)。
然后,为了获得唯一的方向,使用signum
:
int xDirection = Math.signum(xDifference);
哪个将返回1(向东),-1(向西)或0(不改变横向位置)。然后,如果你需要调整速度,可以将xDirection
乘以你想要每个“tick”移动鬼的数量。然后只复制上面的2行来处理y轴。
这无疑是远非完美的,但我认为它允许更容易的调试。这不会直接解决您的问题,但应该使运动逻辑更简单,这可能会有所帮助。
如果有人在逻辑中发现任何问题,请发表评论,我会更新它。
以上是关于当它不应该用Java时,它会变成180的主要内容,如果未能解决你的问题,请参考以下文章