使用变量来影响我的位置

时间:2014-12-04 09:44:40

标签: java

我通过使用简单的方法在我的游戏中进行单位移动:获得该位置以北的位置。但是我希望不同的单位有不同的速度,我有点困惑,如何做到这一点。 职位等级:

public class Position {
private int x;
private int y;

public Position(int x, int y) {
    this.x = x;
    this.y = y;
}

public int getX() {
    return this.x;
}

public int getY() {
    return this.y;
}

public Position getPosToNorth() {
    Position position = new Position(getX(), getY() - 1);
    return position;
}
}

然后在我的另一节课中,我得到了这种移动方法:

public void move()
{
    if(this.direction == "North")
    {           
        setPosition(getPosition().getPosToNorth());
    }
}

如果我有变量,请说:speed = 10;我如何使用它来影响我的单位移动多少?我可以以某种方式从我的其他类获取速度变量到我的Position类,所以而不是采取getY() - 1它需要getY() - 速度?我试过但没有让它上班......提前谢谢。

5 个答案:

答案 0 :(得分:2)

答案取决于你的世界是如何定义的:

  • 是否有像瓷砖一样的离散位置?我假设是的,因为你使用的是整数坐标。
  • 允许单位对角移动吗?如果是,那会使事情变得复杂。

基本上,您只需根据当前坐标计算新位置,然后相应地加/减速度(不过在您的情况下定义)。

我会做这样的事情:

enum Direction {
  NORTH( 0, -1),
  SOUTH( 0, 1 ),
  EAST( 1, 0).
  WEST( -1, 0);
  int x;
  int y;

  //constructor and getters
}  

Position move(Direction dir, int speed) {
  return new Position(x + dir.getX() * speed, y + dir.getY() * speed);
}

答案 1 :(得分:0)

我想最简单的解决方案就是这样。 像这样更改getPosToNorth:

public Position getPosToNorth(int speed) {
    Position position = new Position(getX(), getY() - speed);
    return position;
}

在你的行动中现在这样做:

public void move()
{
    if(this.direction == "North")
    {           
        setPosition(getPosition().getPosToNorth(this.speed));
    }
}

因此您将速度存储在this对象中,然后将其传递给getPosToNorth方法

顺便说一句。使用equals()来比较字符串:

if(this.direction.equals("North"))

答案 2 :(得分:0)

在位置类中引入一个名为speed的新字段以及相应的getter和setter,如下所示:

int speed;
public int getSpeed() {return speed;}    
public void setSpeed(int speed) {this.speed = speed;}

你可以在你的getPosToNorth方法中做到:

public Position getPosToNorth() {
    Position position = new Position(getX(), getY() - getSpeed());//set the speed before calling this method
    return position;
}

或者如果你在课堂上获得移动方法的速度,那么改变getPosToNorth的签名以包括速度,如下所示:

public Position getPosToNorth(int speed) {
    Position position = new Position(getX(), getY() - speed);
    return position;
}

然后从move方法调用它:

setPosition(getPosition().getPosToNorth(1000));//set speed accordingly

答案 3 :(得分:0)

您只需将速度添加到方法中即可。

public Position getPosToNorth(int speed) {
    Position position = new Position(getX(), getY() - speed);
    return position;
}

此外,由于此方法在您自己的类中,因此您不必添加getX和getY。此外,您不必在返回之前先将新职位设置为新职位。你可以马上归还。就这样做:

public Position getPosToNorth(int speed) {
    return new Position(this.x, this.y - speed);
}

您可以使用以下方法调用此方法:

myOwnPositionObject.getPosToNorth(myspeed);

答案 4 :(得分:0)

为什么不在方法中使用参数?

  public Position getPosToNorth(int speed) {
      Position position = new Position(getX(), getY() - speed);
      return position;
  }

使用它的方法可能会变成

public void move()
{
    if(this.direction == "North")
    {           
        setPosition(getPosition().getPosToNorth(this.speed));
    }
}

请注意,您还可以在move()中使用速度参数。