J2ME 2D
小游戏入门之控制飞机移动
三、控制飞机的移动
实在是等不及了吧?加把劲,让我们加入游戏的主角飞机吧。 你可以将这个游戏定位在动作游戏,一个动作游戏需要不断的从用户端获得输入,基本上不间断,所以 plane 需要不断的改变位置。那么这个基于桢的游戏应该定在多少桢合适呢?这需要在手机中测试,在模拟器上,如果定在 15-18 桢左右,是比较合适的。听 csdn 的几位 xd 说有的游戏仅仅定在 12 桢,所以不同的游戏是不一定的。基本上动作游戏对机子的要求是要高一点。我们的游戏框架是线性的,即输出显示和接受输入是在同一个线程中, 15 桢以下的游戏处理输入会显得比较苯,高于 20 桢如果处理器速度较慢,很容易出现输入卡在缓冲区,处理不过来的情况。现阶段尽量让桢数降下来吧,你不能和 pc 上用 dx 编程时,统一 30fps 的情况相提并论。 在这个以控制精灵移动为主要内容的游戏中,我们不封装任何的游戏事件,我们的程序可能有些稚嫩,没关系,一步一步来吧。 1. 飞机 plane 是一个标准的 plane 。由三桢画面组成,首先在 ps 中处理,让其透明: ![]() 在构造函数中,我们加入对飞机的初始化对象语句:
在 gameInit() 中初始化状态,位置居中:
在 gameMain 中加入:
接下来,让飞机在控制下移动,主要是在 gameMain 中加入输入处理,如果飞机左移就更新画面到飞机左倾的画面,如果飞机右倾反之,没有输入的时候让飞机处于正常。
尽管很简单,但这是控制精灵移动的主要方式。可以想象一下,如果往左飞不是简单的一桢画面而是播放动画,该怎么实现呢?我们的 GameObject 功能有限,没有对 spriite 的动画序列进行增强,今后我们可以增强 GameObject ,使其支持多个动画序列,弥补 spriite 的不足。现在逐渐体会到一个好的游戏引擎是多么重要了吧 … 2. 背景 让飞机在海面飞行吧,我们用一个蓝色的背景图片代表海面,我们需要他铺满整个背景。我们使用 TiledLayer 来绘画背景。 ![]() 初始化:
接下来在 gameMain 中加入绘制语句。
注意,要保证背景的绘制在飞机的绘画之前。如果使用 Layermanager 可以很方便的的控制绘制层,但是我们的接下来的子弹要求多个子弹对象共用一个 sprite 的图像,但是 Layermanager 绘画的时候以 Layer 为单位,由 Layermanager 帮助我们调用各个 layer 的 paint,so 一次只支持将一个 sprite 画在一个地方,所以我觉得 Layermanager 有些鸡肋。一般时候我们还是自己 paint 吧。当然,层是一个很重要的概念,利用层,屏幕校准将非常方便,震动整个屏幕等特效将很实现。也许你有个好法,可以让我不在 Layermanager 层与 sprite 状态对象组之间矛盾 … 可喜可贺呀,我们的飞机动起来了,哈哈,让我们期待加入子弹吧,那是本游戏的 “ 精华 ” 。 |