J2ME 2D小游戏入门之旅(三) 控制飞机的移动

原创 2004年10月28日 17:04:00

    实在是等不及了吧?加把劲,让我们加入游戏的主角飞机吧。    
    
你可以将这个游戏定位在动作游戏,一个动作游戏需要不断的从用户端获得输入,基本上不间断,所以plane需要不断的改变位置。那么这个基于桢的游戏应该定在多少桢合适呢?这需要在手机中测试,在模拟器上,如果定在15-18桢左右,是比较合适的。听csdn的几位xd说有的游戏仅仅定在12桢,所以不同的游戏是不一定的。基本上动作游戏对机子的要求是要高一点。我们的游戏框架是线性的,即输出显示和接受输入是在同一个线程中,15桢以下的游戏处理输入会显得比较苯,高于20桢如果处理器速度较慢,很容易出现输入卡在缓冲区,处理不过来的情况。现阶段尽量让桢数降下来吧,你不能和pc上用dx编程时,统一30fps的情况相提并论。

在这个以控制精灵移动为主要内容的游戏中,我们不封装任何的游戏事件,我们的程序可能有些稚嫩,没关系,一步一步来吧。

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

1.       飞机

plane是一个标准的plane。由三桢画面组成,:

 

在构造函数中,我们加入对飞机的初始化对象语句:

Image img=ImageTools.getImage("/pic/MyPlaneFrames.png");

plane=new GameObject(img,24,24);

      

       gameInit()中初始化状态,位置居中:

plane.reset();

plane.moveto((screenwidth-plane.sprite.getWidth())/2,(screenheight-plane.sprite.getHeight())/2);

 

       gameMain中加入:

plane.paint(g);

 

       接下来,让飞机在控制下移动,主要是在gameMain中加入输入处理,如果飞机左移就更新画面到飞机左倾的画面,如果飞机右倾反之,没有输入的时候让飞机处于正常。

if (gameover) {

}else{

       if (keyevent) {

        if(key_up){

          plane.move(0, -3);

          plane.sprite.setFrame(0);

        }

        if(key_down){

          plane.move(0, 3);

            plane.sprite.setFrame(0);

        }

        if(key_left){

          plane.move( -3, 0);

          plane.sprite.setFrame(1);

        }

        if(key_right){

          plane.move(3, 0);

          plane.sprite.setFrame(2);

        }

        if(key_fire){

          }

        }

      }

      else {

        plane.sprite.setFrame(0);

      }

}

       尽管很简单,但这是控制精灵移动的主要方式。可以想象一下,如果往左飞不是简单的一桢画面而是播放动画,该怎么实现呢?我们的GameObject功能有限,没有对spriite的动画序列进行增强,今后我们可以增强GameObject,使其支持多个动画序列,弥补spriite的不足。现在逐渐体会到一个好的游戏引擎是多么重要了吧

      

2.       背景

       让飞机在海面飞行吧,我们用一个蓝色的背景图片代表海面,我们需要他铺满整个背景。我们使用TiledLayer来绘画背景。

 

初始化:

img=ImageTools.getImage("/pic/back_water.png");

int backcolumns=screenwidth/img.getWidth()+1;//计算横向

int backrows=screenheight/img.getHeight()+1;

background=new TiledLayer(backcolumns,backrows,img,img.getWidth(),img.getHeight());

int x,y;

for (int i = 0; i < backcolumns*backrows; i++) {

   x=i%backcolumns;

   y=i/backcolumns;

   System.out.println("x="+x+" y="+y);

   background.setCell(x,y,1);

}

 

接下来在gameMain中加入绘制语句。

background.paint(g);//draw background

注意,要保证背景的绘制在飞机的绘画之前。如果使用Layermanager可以很方便的的控制绘制层,但是我们的接下来的子弹要求多个子弹对象共用一个sprite的图像,但是Layermanager绘画的时候以Layer为单位,由Layermanager帮助我们调用各个layerpaint,so一次只支持将一个sprite画在一个地方,所以我觉得Layermanager有些鸡肋。一般时候我们还是自己paint吧。当然,层是一个很重要的概念,利用层,屏幕校准将非常方便,震动整个屏幕等特效将很实现。也许你有个好法,可以让我不在Layermanager层与sprite状态对象组之间矛盾

 

    可喜可贺呀,我们的飞机动起来了,哈哈,让我们期待加入子弹吧,thumbs_up.gif那是本游戏的“精华”。

J2ME 2D小游戏入门之旅(三)控制飞机移动

作者:favoyang 文章来源:J2ME开发网 三、控制飞机的移动   实在是等不及了吧?加把劲,让我们加入游戏的主角飞机吧。你可以将这个游戏定位在动作游戏,一个动作游戏需要不断的从用户端获得输入,...
  • mobilechannel
  • mobilechannel
  • 2005年05月24日 14:36
  • 2136

J2ME 2D小游戏入门之控制飞机移动

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 05:47
  • 116

J2ME 2D小游戏入门之旅

CSDN 首页 → 移动频道首页 → 栏目文章列表http://mobile.csdn.net/List.aspx?Column=edfb0da7-e3b1-495d-b38c-5e362c42a78...
  • liulcsy
  • liulcsy
  • 2005年05月28日 16:52
  • 648

J2ME 2D小游戏入门之旅(八)源码

作者:favoyang 文章来源:J2ME开发网八、源码源码:说明一下,请不要将里面的图片用于商业目的,有什么问题的话联系tony(yesming),tony的blog地址为http://blog.c...
  • mobilechannel
  • mobilechannel
  • 2005年05月24日 14:58
  • 3306

J2ME 2D小游戏入门之旅(八) 源码

源码:说明一下,请不要将里面的图片用于商业目的,有什么问题的话联系tony(yesming),我的纯粹是学习之用。他的blog:blog.csdn.net/yesming源码请上 www.j2mede...
  • alikeboy
  • alikeboy
  • 2004年10月31日 20:07
  • 1975

键盘事件的监听-控制飞机移动

package com.onclick; import android.app.Activity; import android.os.Bundle; import android.util.Dis...
  • LauraChen93
  • LauraChen93
  • 2016年05月05日 18:03
  • 804

Java窗体实现飞机躲子弹游戏

Java窗体实现飞机躲子弹游戏
  • sinadrew
  • sinadrew
  • 2016年10月19日 12:00
  • 1617

J2ME 2D小游戏入门之旅(一)游戏的框架

                                                                                                    ...
  • alikeboy
  • alikeboy
  • 2004年10月28日 14:09
  • 1676

2D开发SpaceShooterGame,飞机移动出现倾斜

其实这里的倾斜并不是飞机的倾斜,而是相机的缘故。 运行游戏,飞机在中央,如下图 看,刚开始飞机没有倾斜。当通过键盘操作把飞机移动到最左边时出现下图 看,倾斜了。 这个原因其实就...
  • LaoJiu_
  • LaoJiu_
  • 2015年11月13日 15:42
  • 1129

J2ME入门之HelloWorld

引言  前面几篇文章已经介绍了Eclipse及其工作环境的安装、配置过程,并完成各项相关准备工作。因此从本文开始将讲述如何使用前面配置好的Eclipse开发环境来创建J2ME项目,开始真正的J2ME开...
  • runner0592
  • runner0592
  • 2006年08月10日 23:35
  • 4108
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:J2ME 2D小游戏入门之旅(三) 控制飞机的移动
举报原因:
原因补充:

(最多只允许输入30个字)