1 / 15
文档名称:

Andriod游戏开发_第七章_精灵、帧动画与碰撞检测.docx

格式:docx   页数:15
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Andriod游戏开发_第七章_精灵、帧动画与碰撞检测.docx

上传人:陈晓翠 2012/3/20 文件大小:0 KB

下载得到文件列表

Andriod游戏开发_第七章_精灵、帧动画与碰撞检测.docx

文档介绍

文档介绍:从零开始Android游戏编程(第二版) 第七章精灵、帧动画与碰撞检测收藏
第七章精灵、帧动画与碰撞检测
经过前几章的学习,大家对使用位图、接受用户控制应该已经有了初步的概念,也可以运用这些知识完成简单的小游戏。这一章中,我们会为游戏中最重要的部分——图形处理建立一个基本的框架,这还不是游戏引擎,但是其中很多方法可以为读者以后创建自己的游戏引擎提供借鉴。这一章的涉及的内容比较多,既有2D游戏的基础理论,又有复杂的代码。尤其是代码部分,如果详细讲解,恐怕会占用很大的篇幅。所以我们只对关键的函数进行讲解,以方便读者今后灵活运用这些代码(所有的源代码都与本章节内容一同提供下载)。
:
Classes
GameCanvas
Layer
LayerManager
Sprite
TiledLayer
game 包中有5个类,其中Layer(层)是一个抽象类,对图形显示作了基本的定义。以我们的目标游戏《坦克大战》为例,在游戏中有这样一些图形元素:我方和敌方的坦克、坦克发出的子弹、地面、墙体、水域掩体等。这些元素虽然外观不同,但是本质上却非常相似:都是在特定位置以特定尺寸显示一个或一组位图,有些位图位置还会变动,Layer就定义了位置,尺寸,显示等相关的功能。之所以叫做Layer,与游戏中分层地图的概念有关,先让我们了解一下什么是分层地图:还是说坦克大战,当我们的坦克行驶在普通地面上时,坦克的图像肯定是覆盖了地面的图像,这样我们能看到坦克。当坦克行驶到掩体时,我们会发现,掩体的图像覆盖了坦克的图像,如图所示:
实际上,我们在程序中,只要首先显示地面的图像,然后显示坦克的图像,最后显示掩体的图像(掩体图片是镂空的),就能达到这种效果,这就是分层地图。通常我们把最下面的叫做地面层,中间的叫做物件层,最上面的叫做天空层。关于地图我们就讲这么多,这里只介绍图形意义上的分层,是为了帮助大家理解Layer一词的意义。关于地图的详细内容我们在第十章会深入讲解。
首先让我们看一下抽象类Layer的定义:
.;
import ;
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);
}
/**
* 设定Layer的显示位置
*
* ***@param x
* 横坐标
* ***@param y
* 纵坐标
*/
public void setPosition(int x, int y) {
= x;
= y;
}
/**
* 相对于当前的位置移动Layer
*
* ***@param dx
* 横坐标变化量
* ***@param dy
* 纵坐标变化量
*/
public void move(int dx, int dy) {
x += dx;
y += dy;
}
/**
* 取得Layer的横坐标
*
* ***@return 横坐标值
*/
public final int getX() {
return x;
}
/**
* 取得Layer的纵坐标
*
* ***@return 纵坐标值
*/
public final int getY() {
return y;
}
/**
* 取得Layer的宽度
*
* ***@return 宽度值
*/
public final int getWidth() {
return width;
}
/**
* 取得Layer的高度
*
* ***@return 高度值
*/
public final int getHeight() {
return height;
}
/**
* 设置Layer是否可见
*
* ***@param visible
* true Layer可见,false Layer不可见
*/
public void setVisible(boolean visible) {
= visible;
}