首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Pacman游戏中实现移动

在Pacman游戏中实现移动
EN

Code Review用户
提问于 2016-06-18 19:14:24
回答 1查看 1.8K关注 0票数 1

我正在用Java制作一个Pacman玩家和Player游戏,我想知道我是否在以一种很好的方式实现游戏中的移动。任何将减少代码大小或使程序更快的东西都是需要的。

请注意,游戏还没有完成,我只在第一玩家(Pacman)上工作过。我还没有开始对第二名球员(幽灵)或迷宫或小球。

Movable接口

代码语言:javascript
复制
public interface Movable {
void move();
}

Pacman / Player One

此类表示第一名玩家,或Pacman字符。它实现了Movable

代码语言:javascript
复制
@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初始化方法中实例化它。

代码语言:javascript
复制
Pacman pacman;

我还为我的可移动接口创建了一个全局数组,其大小为一个(目前),它将容纳我的pacman实例。

代码语言:javascript
复制
private Movable mover[] = new Movable[1];

然后:

代码语言:javascript
复制
@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;
}
EN

回答 1

Code Review用户

回答已采纳

发布于 2016-06-18 19:34:14

最初的想法是:

  • 为什么move要打电话给create?我不知道create做什么,但这似乎是一种奇怪的工作方式。
  • 你用5表示所有的四个方向,这似乎应该是一个常数。
  • 目前还不清楚如何实现碰撞检测,但在为移动项定义接口时要考虑到这一点。

从你的评论来看,create似乎吸引了帕克曼。如果是这样的话,那么我仍然认为您不希望在move方法中调用它。你想要将你的游戏机制+运动/碰撞逻辑与你的绘图/渲染逻辑解耦,它们是不同的关注点,并且很可能以不同的速度移动。您正在寻找的一件事是提高代码运行的速度。如果您考虑在不同的硬件上运行游戏,需要考虑的一件事是,您需要开始考虑如何有效地使用该硬件。举一个具体的例子,如果你当前的计算机每秒处理你的move方法10次,那就会移动你的Pacman 50单元。另一台计算机可能只运行它5(移动25个单元)或可能运行它50个(移动250个单位),这是一个很大的变化,通常是通过将移动的距离与经过的时间联系起来,这可能与渲染时间分离。

我还没有读过所有的东西(而且它似乎是针对移动市场的),但是似乎是对游戏循环机制的一个很好的介绍。

票数 5
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/132396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档