【问题标题】:javafx Proper way of rendering Entities in Game?javafx 在游戏中渲染实体的正确方法?
【发布时间】:2018-03-27 04:04:05
【问题描述】:

我正在使用 javafx 开发游戏。我之前在awt中编写过一些游戏,所以我对游戏的工作原理有一个基本的了解。 (我使用了缓冲图像)但是,有了 javafx api 中的所有新东西,我怀疑我的旧游戏架构是否仍然适用于 javafx。这是我游戏的当前逻辑:

这就是我的渲染工作方式:

List<Entity> entities= new ArrayList<Entity>;
GraphicsContext gc;  ///imagine that I created a new GraphicsContext object

在 render 方法中它基本上是这样的:

  for(Entity e : entities)
 {
  gc.drawImage(e.getX(),e.getY(),e.getImage());
 }

但是,由于 javafx 有这么多新功能,我想知道这种方法是否过时或效率低下。我应该移动这些实体还是应该自己移动图像?我正在开发一款太空射击游戏,那么 Interpolate() 和 Transition 会改进我的游戏吗?

没有很多具体的javafx游戏教程可用,所以我必须在这里寻求一些帮助...... 谢谢!

【问题讨论】:

  • 查看Timeline,为example
  • @trashgod 我目前正在为我的循环使用 AnimationTimer。您如何看待让我的 Entity 类成为 ImageView 的子类?
  • 这可能是个坏主意,因为绘制 Image 并不像 ImageView 那样需要那么多内存。 ImageView 为您提供了更多不必要的选项,不应该用于游戏开发!
  • @AaronStein 感谢您的回复!我确实尝试过使用图像,但是当我的实体移动时,旧图像会留在背景上而不是消失......我应该每次都重新绘制背景吗?
  • 你需要覆盖背景

标签: java javafx java-8 entity game-loop


【解决方案1】:

在我看来,你正在做的方式是最好的方式,我做了类似的事情并使用了这样的实体: package jumpNRun.gameObjects;

import java.util.List;
import javafx.scene.image.Image;
import javax.xml.bind.annotation.XmlRootElement;
import jumpNRun.gameObjects.entitys.Solid;


@XmlRootElement
public class Entity {

    protected Image entityImage;

    protected double gravity = 0;

    protected int height = 0, width = 0;

    protected int x = 0, y = 0;

    protected int id = 0;
    /**
     * Class speciefed informations
     */
    protected String extraInfo;
    protected boolean killed = false;

    public String getExtraInfo() {
        return extraInfo;
    }

    public void setExtraInfo(String extraInfo) {
        this.extraInfo = extraInfo;
    }

... 等等 绘图可以这样完成:

    gc.drawImage(backround, 0, 0);
    for (Entity e : entitys) {
        gc.drawImage(e.getEntityImage(), e.getX(), e.getY());
    }

【讨论】:

  • 如果你愿意,我可以给你一个我制作的游戏项目。它不是很好,但可能会有所帮助
猜你喜欢
  • 1970-01-01
  • 2011-03-19
  • 2012-06-23
  • 1970-01-01
  • 2014-01-23
  • 1970-01-01
  • 2018-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多