Java 创建一个简单的游戏引擎
我正在进行我的第一个游戏,所有的设计和东西都完成了,只剩下编码了。 我已经成功地观看了万维网的教程,其中包含有关图形以及如何在其中成功创建线程同步的信息 就像现在我有一个SurfaceView类和一个Thread类。thread类使用此构造函数从我的SurfaceView类接收游戏引擎。 线程类构造函数中的简单代码:Java 创建一个简单的游戏引擎,java,android,Java,Android,我正在进行我的第一个游戏,所有的设计和东西都完成了,只剩下编码了。 我已经成功地观看了万维网的教程,其中包含有关图形以及如何在其中成功创建线程同步的信息 就像现在我有一个SurfaceView类和一个Thread类。thread类使用此构造函数从我的SurfaceView类接收游戏引擎。 线程类构造函数中的简单代码: public Thread(SurfaceHolder localsurfaceHolder, Context context, Handler handl
public Thread(SurfaceHolder localsurfaceHolder,
Context context,
Handler handler,
SurfacefView localEngine) {
surfaceHolder = localsurfaceHolder;
this.handler = handler;
this.context = context;
engine = localEngine;
}
从surfaceCreated方法中的我的SurfaceView类:
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
}
提前谢谢
GameEngine类构造函数应该是什么样子
一个常见的模式是拥有一个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方法访问。我不是说你必须这样做,这只是一种松散耦合的方式
我应该把图纸/计算方法放在哪里
计算运动、碰撞、人工智能和我在模型中加入的东西。这取决于你画的东西。为了更好的可移植性和内聚性,我通常会将这些东西放在视图中
玩得开心。谢谢你的回答!我知道我应该把我的东西放在哪里。但是getInstance,当实例为空时,它只是第一次加载东西吗?还有一件事,为了以正确的方式触发和更新对象,我仍然不理解我必须建立的连接。例如,我应该如何在thread类中连接我的游戏引擎?当您第一次调用getInstance()时,它会运行该类的构造函数一次,因此对它的任何进一步调用都只使用现有模型。要连接引擎,只要在需要访问模型时从接口调用getInstance()。或者,当您第一次调用它时,您可以在接口中存储对它的引用。希望这有道理。我想我现在明白了。然后我还将必要的计算/绘制函数放入GameEngine,然后放入线程类,例如GameEngine.getInstance().calculateNow();访问GameEngine calculateNow()方法。是吗?是的,就是这样。正如我所说,我可能会在UI中保留绘图例程以实现内聚。此外,如果您要经常调用游戏引擎方法,那么最好存储对它的引用,因为调用它会有一点开销。内聚基本上意味着执行的任务与类的预期功能密切相关,视图中的类通常负责显示内容,而模型处理的是内部力学。此外,绘制方法设计用于图形环境,并且往往依赖于图形环境。比如说,如果您想移植您的模型以使用不同的图形库,那么您就不必重构模型中的代码。存储对facade的引用可以避免不必要地调用getInstance。