纪念Rokon停止更新——从零开始用Rokon开发一个小游戏

懒骨头(http://blog.csdn.com/iamlazybone)

纪念Rokon停止更新——从零开始用Rokon开发一个小游戏

还没开始认真的学习Rokon框架,就这么停止更新了,真想接过来继续做下去,可惜骨头太有自知之名了。

那就用Rokon写个小游戏纪念一下:

 

0.建项目

首先新建一个android项目,然后建立libs文件夹,把rokon-2-0-3.jar文件和libgdx.so文件拖进去,然后项目右键Properties里找到Java Build Path,把rokon-2-0-3.jar作为引用库添加到项目里。

1.入口Activity类

下面是LazyGameByRokon.java的代码

package lazy.game.rokon.main; import com.stickycoding.rokon.DrawPriority; import com.stickycoding.rokon.RokonActivity; public class LazyGameByRokon extends RokonActivity { public static final float GAME_WIDTH = 480f; public static final float GAME_HEIGHT = 320f; @Override public void onCreate() { // 调试模式,打印,FPS // debugMode(); normalMode(); // 设置全屏 forceFullscreen(); // 强制横屏,也可以在manifest里设置'android:screenOrientation="landscape"' forceLandscape(); // 设置屏幕大小 setGameSize(GAME_WIDTH, GAME_HEIGHT); // 设置渲染模式,PRIORITY_VBO模式比一般的模式快 setDrawPriority(DrawPriority.PRIORITY_VBO); // 设置资源路径'.assets/textures/' setGraphicsPath("textures/"); // 创建引擎 createEngine(); } @Override public void onLoadComplete() { gotoGameScene(); } public void gotoGameScene() { } }

首先我们的activity类要继承RokonActivity,在onCreate()方法里进行引擎的一些初始化设置。

当引擎加载完成后,会自动调用onLoadComplete()方法。比如我们可以从这里进入游戏主菜单。

2.建场景类

和大多数游戏引擎一样,Rokon分场景Scene来管理的,比如主菜单为一个场景,游戏中为一个场景。这里我们只要游戏中一个场景。

新建一个GameScene类继承自Rokon的Scene类,如下:

package lazy.game.rokon.main; import android.util.Log; import android.view.KeyEvent; import android.view.MotionEvent; import com.stickycoding.rokon.Scene; public class GameScene extends Scene { public LazyGameByRokon game; public GameScene(LazyGameByRokon game) { super(3);// 设定当前场景的层数 this.game = game;// 主类句柄 useInvoke();// 回调方法可用,Sprite必须有名字才能使用回调方法 } @Override public void onGameLoop() { } public void onTouchDown(float x, float y, MotionEvent event, int pointerCount, int pointerId) { Log.i("GameScene", "onTouchDown()"); } public void onTouchMove(float x, float y, MotionEvent event, int pointerCount, int pointerId) { Log.i("GameScene", "onTouchMove()"); } public void onTouchUp(float x, float y, MotionEvent event, int pointerCount, int pointerId) { Log.i("GameScene", "onTouchUp()"); } public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_CALL: Log.i("GameScene", "onKeyDown() KEYCODE_CALL "); break; case KeyEvent.KEYCODE_BACK: Log.i("GameScene", "onKeyDown() KEYCODE_BACK "); break; case KeyEvent.KEYCODE_SEARCH: Log.i("GameScene", "onKeyDown() KEYCODE_SEARCH "); break; case KeyEvent.KEYCODE_MENU: Log.i("GameScene", "onKeyDown() KEYCODE_MENU "); break; case KeyEvent.KEYCODE_ENDCALL: Log.i("GameScene", "onKeyDown() KEYCODE_ENDCALL "); break; case KeyEvent.KEYCODE_HOME: Log.i("GameScene", "onKeyDown() KEYCODE_HOME "); break; } return false; } @Override public void onPause() { } @Override public void onResume() { // 释放资源 } @Override public void onReady() { } }  

我们只是实现和覆盖了一些基本的方法,比如

onGameLoop();//顾名思义,是游戏循环时调用的方法,可以在里面做一些更新。

onTouchDown();//等等按键和触摸事件。

onResume();//这里以后会用到,可以在这里释放图片资源。

useInvoke();// 回调方法以后再说。

场景类添加好了之后,回到主Activity里创建一下:

private GameScene gameScene; public void gotoGameScene() { GameTextures.load(); gameScene = new GameScene(this); setScene(gameScene); } 

3.加载图片资源

此时GameTextures.load();这句会报错。下面我们来添加资源类GameTextures。

GameTextures类代码如下:

package lazy.game.rokon.main; import com.stickycoding.rokon.Texture; import com.stickycoding.rokon.TextureAtlas; public class GameTextures { // 资源管理器 public static TextureAtlas atlas; // 背景资源 public static Texture gameBack; public static void load() { try { atlas = new TextureAtlas(128); // 新建一个资源并添加到资源管理器 atlas.insert(gameBack = new Texture("background.png")); // 资源加载结束 atlas.complete(); } catch (Exception e) { e.printStackTrace(); } } } 

每当需要一个资源时,你就可以new一个新的Texture,实例化并且添加到资源管理器altlas里。记住最要要调用atlas.complete();告诉引擎资源加载完成。

4.加载背景和Sprite精灵类

在GameScene.java里添加背景:(模拟器可能无法看到背景,真机可以,原因不明)

private FixedBackground background;

构造方法里面添加

 

background = new FixedBackground(GameTextures.gameBack);

setBackground(background);

精灵类的添加:

private Sprite boy;

 

// 实例化boy并添加到Scene里

boy = new Sprite(100, 100, GameTextures.boy.getWidth(),

GameTextures.boy.getHeight());

boy.setTexture(GameTextures.boy);

add(1, boy);

 

 

-----------------待续----------------

 

 

 

 

 

 

 

 

你可能感兴趣的:(游戏,exception,properties,search,float,引擎)