我正在用Java制作一个Pacman玩家和Player游戏,我想知道我是否在以一种很好的方式实现游戏中的移动。任何将减少代码大小或使程序更快的东西都是需要的。
请注意,游戏还没有完成,我只在第一玩家(Pacman)上工作过。我还没有开始对第二名球员(幽灵)或迷宫或小球。
Movable接口public interface Movable {
void move();
}Pacman / Player One 此类表示第一名玩家,或Pacman字符。它实现了Movable。
@Override
public void move() {
if (this.direction == Direction.UP) {
y -= 5;
} else if (this.direction == Direction.DOWN) {
y += 5;
} else if (this.direction == Direction.RIGHT) {
x += 5;
} else if (this.direction == Direction.LEFT) {
x -= 5;
}
create();
}Game类在这个类中,我创建了一个Pacman类的全局类型,并在Game's初始化方法中实例化它。
Pacman pacman;我还为我的可移动接口创建了一个全局数组,其大小为一个(目前),它将容纳我的pacman实例。
private Movable mover[] = new Movable[1];然后:
@Override
public void actionPerformed(ActionEvent e) {
if (running) {
moveEntities();
}
this.repaint();
}
private void moveEntities() {
initializeMovement();
for (Movable m : mover) {
m.move();
}
}
private void initializeMovement() {
mover[0] = pacman;
}发布于 2016-06-18 19:34:14
最初的想法是:
move要打电话给create?我不知道create做什么,但这似乎是一种奇怪的工作方式。从你的评论来看,create似乎吸引了帕克曼。如果是这样的话,那么我仍然认为您不希望在move方法中调用它。你想要将你的游戏机制+运动/碰撞逻辑与你的绘图/渲染逻辑解耦,它们是不同的关注点,并且很可能以不同的速度移动。您正在寻找的一件事是提高代码运行的速度。如果您考虑在不同的硬件上运行游戏,需要考虑的一件事是,您需要开始考虑如何有效地使用该硬件。举一个具体的例子,如果你当前的计算机每秒处理你的move方法10次,那就会移动你的Pacman 50单元。另一台计算机可能只运行它5(移动25个单元)或可能运行它50个(移动250个单位),这是一个很大的变化,通常是通过将移动的距离与经过的时间联系起来,这可能与渲染时间分离。
我还没有读过所有的东西(而且它似乎是针对移动市场的),但是这似乎是对游戏循环机制的一个很好的介绍。
https://codereview.stackexchange.com/questions/132396
复制相似问题