- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一步一步学习midp2.doc
一步一步学习midp2。0游戏编程(五)
Sprite(精灵类)
Sprite是用个用来显示图像的类 (每次一个). 该类和TiledLayer的区别是。Sprite是由一个图像(可以有好几帧,但是一次只有一个显示)组成 (当然Sprite还有其他的额外特性,不过每次只能只用一个图像而不是一次使用多个图像来填充屏幕是它的最主要特征.) 因而Sprite 被用来定义一些小的有动作的游戏对象(比如飞船和小行星对撞), TiledLayer 更被常用来构造生动的背景.
Sprite另一个让人激动的特性是:虽然它一次只能显示一个图像,但是我们可以为它定义一系列的图像,以便在不同的环境下构造不同的动画. 在我的例子中,牛仔有三帧图像描绘它的走路,一帧描绘牛仔的跳. 这些将要赋值给Sprite的图像需要被存在一个png文件中.这些帧被存在一个文件中的好处是你可以从管理多个Image对象的麻烦中解脱出来。下面是牛仔类的图片:
这个是滚草的动画:
在某个特定的时刻决定显示哪一帧帧是非常直观的. 第一, 如果你的图像文件包括多个帧, 在构造Sprite 类的时候你需要指定精灵的高度和宽度(象素值). 图像的高度和宽度必须是精灵高宽的整数倍.换句话说,你要能正好让电脑把你的图像按照精灵的大小划分成几个类. 通过上面的例子你也看到了,至于这些帧是横着拍还是竖着排抑或横竖都有排成一个方阵都无所谓. 接着就可以指定帧数了, 左上放是编号0,然后从左到右,从上到下依次排列。你可以使用setFrame(int sequenceIndex) 选择哪一帧被显示,是要把它的编号作为参数传递就成了.
Sprite还可以让你使用方法setFrameSequence(int[] sequence)定义一个帧的序列.比如我可以为牛仔定义这么一个序列 { 1, 2, 3, 2 }而为滚草定义 { 0, 1, 2 } 序列. 使用nextFrame(),就可以让你的Sprite 动画前进了。(后退的话使用prevFrame()).对于象滚草这样使用了全部帧的情况的确很方便,不过对于象牛仔这样有的帧没有使用的情况就稍微有点复杂了。这是因为一个序列一旦被设置, setFrame(int sequenceIndex) 方法中的参数对应的帧数变成了序列数组中对应的参数而不是图片本身参数的顺序。比如我把牛仔的序列设置为 { 1, 2, 3, 2 },如果我调用setFrame(0)的话,序号为1的那帧被显示, setFrame(3)将会显示2. 因而如果让人物跳起的动画对应的第0帧就没有办法引用了.所以当我需要牛仔跳起时,我需要设置序列为null,然后再调用setFrame(0),接着再把序列设置成 { 1, 2, 3, 2 }. 你可以参考下面代码中的jump() 和 advance(int tickCount, boolean left).
当帧改变时,为了改变精灵的外观,你可对它去旋转或者镜像的操作. 牛仔和滚草都可以向左或者向右运动,所以我需要对图像进行镜像变换以得到相反方向的动作. 当你开始变换成,你需要保留住精灵的引用象素. 这是因为如果你变换你的精灵的时候, 引用象素是一个不变的象素. 你可以设想,你的精灵图像是一个矩形,当它进行变换以后,仍然是原来位置上的那个矩形。这是不一定的。为了说明.我们来设想一个例子,有一个向左站的人,他的引用象素在脚趾上对他进行90度旋转以后, 你会发现他向前倒在地上了.很明显是引用象素发生了作用 (好像一个图钉).如果你希望变换后仍然占有相同的矩形话,你需要首先调用 defineReferencePixel(int x, int y) 把你的精灵的引用象素设置成矩形的中心, 就想我在下面代码的构造方法中干的那样. 要注意 defineReferencePixel(int x, int y)中的坐标 是相对于精灵的左上角 ,然而setRefPixelPosition(int x, int y)使用的是整个屏幕的坐标系统. 更准确的说,被送到 setRefPixelPosition(int x, int y)中的坐标用的是精灵将被直接绘制到的Canvas的坐标系统, 但是如果精灵通过 LayerManager进行绘制, 那么使用的就是LayerManager的坐标系统了. (这些坐标的关系在在 LayerManager那部分已经讲解过了) 要特别注意的是,如果你对一个精灵图像进行了多重变化的话,后面的变化是相对原始状态而不是当前状态. 换句话说,如果你调用了两次 setTransform(TRANS_MIRROR)和调用一次的效果是一样 的,而不是想你想象的那样再变换回去. 如果你想让你的变型还原,调用setTransform(TR
文档评论(0)