- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章 精灵、帧动画与碰撞检测
从零开始Android游戏编程(第二版) 第
七章 精灵、帧动画与碰撞检测
第七章 精灵、帧动画与碰撞检测
经过前几章的学习,大 家对使用位图、接受用户控制应该已经有了初步的概念,
也可以运用这些知识完成简单的小游戏。这一章中,我们会为游戏中最重要的部
分——图形处理建立一个基 本的框架,这还不是游戏引擎,但是其中很多方法
可以为读者以后创建自己的游戏引擎提供借鉴。这一章的涉及的内容比较多,既
有2D游戏的基础理论,又有复杂 的代码。尤其是代码部分,如果详细讲解,恐
怕会占用很大的篇幅。所以我们只对关键的函数进行讲解,以方便读者今后灵活
运用这些代码(所有的源代码都与本章 节内容一同提供下载)。
这个框架是完全依照MIDP中javax.microedition.lcdui.game包设计的:
Classes
GameCanvas
Layer
LayerManager
Sprite
TiledLayer
game 包中有5个类,其中Layer(层)是一个抽象类,对图形显示作了基本的
定义。以我们的目标游戏《坦克大战》为例,在游戏中有这样一些图形元素:我
方和敌 方的坦克、坦克发出的子弹、地面、墙体、水域掩体等。这些元素虽然
外观不同,但是本质上却非常相似:都是在特定位置以特定尺寸显示一个或一组
位图,有些位 图位置还会变动,Layer就定义了位置,尺寸,显示等相关的功
能。之所以叫做Layer,与游戏中分层地图的概念有关,先让我们了解一下什么
是分层地图:还是说坦克大战,当我们的坦克行驶在普通地面上时,坦克的图像
肯定是覆盖了地面的图像,这样我们能看到坦克。当坦克行驶到掩体时,我们会
发现,掩体的图像覆盖了坦克的图像,如图所示:
Linux公社(LinuxIDC.com) 是包括Ubuntu,Fedora,SUSE技术,必威体育精装版IT资讯等Linux专业类网站。
实 际上,我们在程序中,只要首先显示地面的图像,然后显示坦克的图像,最
后显示掩体的图像(掩体图片是镂空的),就能达到这种效果,这就是分层地图。
通常我 们把最下面的叫做地面层,中间的叫做物件层,最上面的叫做天空层。
关于地图我们就讲这么多,这里只介绍图形意义上的分层,是为了帮助大家理解
Layer一 词的意义。关于地图的详细内容我们在第十章会深入讲解。
首先让我们看一下抽象类Layer的定义:
package mon;
import android.graphics.Canvas;
public abstract class Layer {
int x = 0; // Layer的横坐标
int y = 0; // Layer的纵坐标
int width = 0; // Layer的宽度
int height = 0; // Layer的高度
boolean visible = true; // Layer是否可见
Layer(int width, int height) {
setWidthImpl(width);
setHeightImpl(height);
}
/**
Linux公社(LinuxIDC.com) 是包括Ubuntu,Fedora,SUSE技术,必威体育精装版IT资讯等Linux专业类网站。
* 设定Layer的显示位置
*
* @param x
* 横坐标
* @param y
* 纵坐标
文档评论(0)