我通过使用简单的方法在我的游戏中进行单位移动:获得该位置以北的位置。但是我希望不同的单位有不同的速度,我有点困惑,如何做到这一点。 职位等级:
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() - 速度?我试过但没有让它上班......提前谢谢。
答案 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()
中使用速度参数。