我正在使用我的第一个游戏,所有的设计和那些东西都完成了,只是编码了。 我已经成功地在万维网上观看了有关Graphics的信息以及如何在其中创建成功的线程同步的信息。
就像现在我有一个SurfaceView类和一个Thread类。线程类有这个构造函数从我的SurfaceView类接收游戏引擎。 Thread-class构造函数的简单代码:
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是什么?
现在我的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
}
提前致谢!
答案 0 :(得分:2)
GameEngine-class构造函数应该如何。
一个常见的模式是有一个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方法访问。我不是说你必须这样做,它只是一种松散耦合的事情。
我应该在哪里绘制图纸/计算方法?
计算移动,碰撞,AI和我放入模型中的东西。用于绘制依赖的东西。为了获得更好的可移植性和凝聚力,我通常将这些东西放在视图中。
玩得开心。