快速业务通道

使用Game API函数制作二维动作游戏 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
确定行数和列数,源图像以及这个源图像里每个贴片的像素大小。下面的代码片断告诉你如何装载图像和创建TiledLayer类。

Image image = Image.createImage("/board.png");

TiledLayer tiledLayer = new TiledLayer(10, 10, image, 16, 16);

在例子中,新的TiledLayer类有10行,10列。这些来自image的图像贴片大小是16*16像素。

使用Game API函数制作二维动作游戏(4)

时间:2011-01-15

有趣的部分还是用这些图像贴片来创建一幕场景。利用setCell()方法可以把一个图像贴片分配到一个数组元胞里。你需要提供这个数组元胞所在行列数以及图像贴片的编号。例如,你可以通过调用setCelll(2,1,5)方法把编号为5的图像贴片分配到第2行中的第3个数组元胞里。如果你觉得这些参数看起来不对,请注意,图像贴片编号是从1开始计数,而行和列的编号是从0开始的。参数缺省情况下,新的TiledLayer类对象中的所有数组元胞的图像贴片标号为0,这就意味着它们是空的。

下面的代码片断向你说明一种使用整数数组来填充TiledLayer类对象。在实际图像中,TiledLayer类可以从资源文件里定义,这就使得定义背景时可以有更多的灵活性,并能提供新的背景和级别来增强游戏的可玩性。

private TiledLayer createBoard() { Image image = null; try { image = Image.createImage("/board.png"); } catch (IOException ioe) { return null; } TiledLayer tiledLayer = new TiledLayer(10, 10, image, 16, 16); int[] map = { 1, 1, 1, 1, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 11, 0, 0, 0, 0, 0, 0, 0, 7, 6, 0, 0, 0, 0, 0, 0, 0, 7, 6, 0, 0, 0 }; for (int i = 0; i < map.length; i++) { int column = i % 10; int row = (i - column) / 10; tiledLayer.setCell(column, row, map[i]); } return tiledLayer; }

为了把这个TiledLayer类对象显示在屏幕上,你需要调用一个Graphics对象的paint()方法。

TiledLayer类还支持动画图像帖子,这样就使得通过一系列贴片来移动元胞集合很容易了。若想得到更详细的说明,参看TiledLayer类相关的API文档。

使用Sprite类实现人物动画

Game API函数里提供的另一个具体的Layer类是Sprite类。一方面,Sprite类是TileLayer类的概念化的逆转.TiledLayer类使用源图像贴片的调色板来创建一幅大场景,而Sprite类则使用一系列源图像帧来产生动画。

你创建一个Sprite类所需要的只是源图像和每个帧的尺寸。在TiledLayer类里,源图像被分为相同大小的图像贴片;在Sprite类里,子图像被称为帧。在下面的例子里,源图像tank.png用来创建帧大小为32*32像素的Sprite类对象。

private MicroTankSprite createTank() { Image image = null; try { image = Image.createImage("/tank.png"); } catch (IOException ioe) { return null; } return new MicroTankSprite(image, 32, 32); }

源图像里面的每一帧都有一个编号,从0开始,以此累加。(在这里不要糊涂,记住图像贴片的编号才是从1开始的)Sprite类有一个帧序列,它决定了帧显示的顺序。一个新Sprite类对象的缺省帧序列简单地依照可用帧,从0开始累加。

使用Sprite类的nextFrame()方法和prevFrame()方法,可以把帧在帧序列中向前或向后移动。这些方法把帧序列的头尾连接起来了。例如,如果Sprite类对象已经把位于帧序列末尾的帧显示出来了,若在调用nextFrame()方法将会显示帧序列的头帧。

调用setFrameSequence()方法,可以通

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号