科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道[冷枫]MIDP2.0 Game API简介

[冷枫]MIDP2.0 Game API简介

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

MIDP2.0 Game API简介

作者:冷枫 来源:CSDN 2007年9月22日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

使用层
在游戏里(或在绘图应用程序里)Screen经常由不同的物体组成,他们任何一个都可能和其他一个或几个有联系。举个例子,一只蜜蜂能在森林、陆地、水面和空中飞,但在迷宫里主角去不能穿墙。
在MIDP2.0 Game API里介绍了层,它提供了方法来管理物体或屏幕上的内容。层能够是TiledLayer(背景,墙)、Sprite(蜜蜂)或其他从Layer继承来的类。
下面的代码是把程序里不同的部分重叠在一起,如图所示来介绍Layer的用法。代码中重要的类是TiledLayer,LayerManager,Image。image类是保存几个相同大小图片的。TiledLayer使用这些图片把他们绘在栅格里。
JAVA手机网[www.cnjm.net]
当一个TiledLayer实例被创建时,构造函数需要5个参数。这些参数是列号、行号、图片、宽、高。在例子中,栅格有40列,16行,图片是Tiles.png,高和宽是7个象素。代码开始最后一个整数参考具体的用法。
在TiledLayer实例被创建后,调用fillCells()方法来填充栅格。在代码最后一行TiledLayer被加到LayerManage中。append()方法是观察者最大限度的安置layer。当然你可以用insert()方法插入你的layer在任何位置。
private TiledLayer tiles;
private LayerManager layers;
private Image tilesImage;

public final int TILE_GROUND = 1;
public final int TILE_WATER = 2;
public final int TILE_SHORE_LEFT = 3;
public final int TILE_FOREST = 4;
public final int TILE_AIR = 5;
public final int TILE_SHORE_RIGHT = 5;

// ...

JAVA手机网[www.cnjm.net]
// Creating an instance of the TiledLayer
layers = new LayerManager();
try {
 tilesImage = Image.createImage("/Tiles.png");
} catch (IOException e) {}
tiles = new TiledLayer(40, 16, tilesImage, 7, 7);

// ...

// Filling the TiledLayer with tiles
tiles.fillCells(0, 0, 40, 16, TILE_AIR);
tiles.fillCells(14, 12, 12, 4, TILE_WATER);
tiles.fillCells(0, 10, 14, 6, TILE_GROUND);
// and more tiles like FOREST and the shores...

layers.append(tiles);
下面的图片显示整个屏幕的状态。

使用Sprites
如前所述,Sprites描绘了屏幕上的一个单一物体。这个物体可以是推石头的小孩、一个射击敌人的战舰。Sprite类的工作方式有点类似tilesLayer类(他们都是从Layer继承来的)。Sprites也可以将几个相同大小图片当作一个图片来显示,无论如何这些图片没有标题,他们是动画里的帧。Sprites可以是活动的,可以显示帧让它看起来是活动的。
下面的代码说明怎样创建一个Sprites的实例,这个正确的原则也适用于TiledLayer.
try {
JAVA手机网[www.cnjm.net]
 spriteImage = Image.createImage("/Sprite.png");
} catch (IOException e) {}

sprite = new Sprite(spriteImage, 7, 7);
JAVA手机网[www.cnjm.net]
在Layer类里,有2种方法让Sprites在游戏区域里移动
move(int dx, int dy)
setPositions(int x, int y)
让LayerManage控制Sprites的绘制和移动是重要的,在代码里设置和存储Sprites也是很重要的。下面的代码说明了怎么样移动Sprites。Sprites里的图片是7个象素高宽的,因此Sprites每次移动7个象素。
public static final int UP = 0;
JAVA手机网[www.cnjm.net]
public static final int RIGHT = 1;
public static final int DOWN = 2;
public static final int LEFT = 3;

// ...
JAVA手机网[www.cnjm.net]

switch (direction){
 case UP:
   sprite.move(0, -7);
   break;
 case DOWN:
   sprite.move(0, 7);
   break;
 case RIGHT:
   sprite.move(7, 0);
   break;
 case LEFT:
   sprite.move(-7, 0);
   break;
 default: break;
}

在游戏中另一个重要的就是判断碰撞。Sprites可以停留在游戏区域中一个特定位置,这对判断Sprites是否和其他物体碰撞是很重要的。在游戏里碰撞意味着改变方向或游戏结束。Sprites用下面4个方法帮助开发者判断碰撞:
collidesWith(Image image, int x, int y,
            boolean pixelLevel)
collidesWith(Sprite s, boolean pixelLevel)
collidesWith(TiledLayer t, boolean pixelLevel)
defineCollisionRectangle(int x, int y,
                        int width, int height)

总结
这篇文章介绍了MIDP2.0里的一个新特性,Game API并给出了一个例子,它用到了API里的许多特性。这些可以帮助开发者应付游戏区域比屏幕大很多的情况,并可以在多个层上绘物体。
来自Wireless Toolkit 2.0 Beta的竞争者不很快,事实上这些特性中的一些使用起来仍然有点慢,但它带给我们基本的支持。重要的是这些已经被软件开发者开始设计。你不得不思考2次你想做什么;怎样做更好。最后没有平台和API提供坏的设计。 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1645526

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章