有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java创建了一个简单的游戏引擎

我的第一场比赛我在路上,所有的设计和那些东西都完成了,只需左编码。 我已经在万维网上成功地观看了一些教程,其中包括关于图形以及如何在其中成功创建线程同步的信息

就像现在我有一个SurfaceView类和一个Thread类。thread类使用这个构造函数从我的SurfaceView类接收游戏引擎。 线程类构造函数中的简单代码:

    public Thread(SurfaceHolder localsurfaceHolder,
    Context context,
    Handler handler, 
    SurfacefView localEngine) {

    surfaceHolder = localsurfaceHolder;
    this.handler = handler;
    this.context = context;
    engine = localEngine;
}

从我的SurfaceView类中的surfaceCreated方法:

thread = new GameThread(getHolder(), context, new Handler(), this);

还有我的代码,当创建曲面时,它将开始触发线程

现在来看真正的交易。很快,我想要一个完全与视图分离的游戏引擎。问题是;如何做到这一点?GameEngine类构造函数应该是什么样子?我应该把绘图/计算方法放在哪里?游戏引擎是什么

现在我的GameEngine类看起来像:

package com.myname.mygame;

public class GameEngine {

      //If im right, a constructor for the engine should be placed here
      //How and which parameters shall I change and send with from the view

}

提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    How should the GameEngine-class constructor look like.

    一种常见的模式是有一个facade类,它为视图提供方法。这将是UI的主要控制类,因此任何更新模型状态的命令都要通过这个类。由于您通常只需要一个实例,所以这里的单例可能很有用

    public class GameEngine {
        private static GameEngine instance = null;
    
        private GameEngine(){
           // init stuff here
        }
    
        public static GameEngine getInstance(){
           if(instance == null){
              instance = new GameEngine();
           }
           return instance;
        }
    }
    

    然后,控制类还会将对象从核心传递回用户界面,用户界面可以通过getter方法访问。我不是说你必须这样做,这只是一种松散耦合的方式

    where shall I put the drawing/calculations-methods?

    计算运动、碰撞、人工智能和我在模型中输入的东西。这取决于你画的东西。为了更大的可移植性和凝聚力,我通常会把这些东西放在视图中

    玩得开心