2010-08-17 147 views
0

我在我的第一场比赛的路上,所有的设计和东西都完成了,只剩下编码。 我已经成功地观看了有关图形的信息以及如何在其中创建成功的线程同步的万维网上的教程。创建一个简单的,简单的游戏引擎

像现在一样,我有一个SurfaceView类和一个线程类。线程类有这个构造函数来从我的SurfaceView类接收游戏引擎。从线程类的构造函数 简单代码:

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); 

而且有我的代码创建表面时将启动trigging线程。

现在到真实交易。不久我想要一个与视图完全分离的游戏引擎。问题是;如何实现这一目标? 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 

} 

谢谢!

回答

2

GameEngine-class构造函数应该如何看起来像。

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

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; 
    } 
} 

的控制类将然后也从芯回用户接口,其可以通过吸气剂的方法来访问传递对象。我并不是说这就是你必须这样做的方式,它只是一种松散耦合的方式。

我应该在哪里放置图纸/计算方法?

移动,碰撞,AI和我放在模型中的东西的计算。用于绘制依赖的东西。为了提高可移植性和内聚性,我通常会将这些东西放在视图中。

玩得开心。

+0

感谢您的回答!我明白我应该把我的init-stuff放在哪里。 但是,getInstance,是否只是为了第一次加载东西,当实例为空?还有一件事,我仍然不明白我必须建立的联系,才能以正确的方式触发和更新对象。我应该如何在线程类中连接我的GameEngine? – Curtain 2010-08-17 21:23:00

+0

第一次调用getInstance()时,它会为该类的构造函数运行一次,因此对它的任何进一步调用仅使用现有模型。要想连接引擎,只需要访问模型,只需从您的界面调用getInstance()。或者,当您第一次在界面中存储对其的引用时,就可以调用它。希望这是有道理的。 – 2010-08-17 21:32:51

+0

我想我现在明白了。然后,我还将必要的计算/绘图函数放入GameEngine中,然后放入线程类,例如GameEngine.getInstance()。calculateNow();访问GameEngine的calculateNow()方法。对? – Curtain 2010-08-17 21:46:34