设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

Android 游戏设计教程:游戏元素和工具

2012-6-11 09:31| 发布者: 红黑魂| 查看: 10162| 评论: 0|来自: 游戏邦

摘要: 作者:Richard A. Rogers (本节内容选自《Learning Android Game Programming》这本书,主要分享针对Android设备开发游戏的基本原则和方法。) 创造优秀手机游戏不仅需要编写某些相当复杂的软件,还需要创造其他的 ...

TileMap制作:Tiled

Tiles在电脑游戏中往往用来生成连续图像列,比如地图。在V3中,用来显示入侵的吸血鬼和障碍物。Tiled地图编辑器(可在 http://www.mapeditor.org/处下载)是免费的,使用Qt跨平台库编写而成,可以在Windows、Linux和Mac OS X系统上运行。图2.3显示Tiled在tile地图编辑期间的模样。

图2.3 Tiled地图编辑器(from gamecareergudie)

图2.3 Tiled地图编辑器(from gamecareergudie)

TrueType字体制作和编辑:FontStruct

Android支持使用TrueType字体,我们在游戏中使用的就是这种字体。现在有许多工具可以用来制作和编辑TrueType字体,当然还可 以使用许多其他的字体(游戏邦注:有些字体是免费的,有些字体需要购买)。很显然,FontShop制作的基于网络的FontStruct是个不错的工 具,你可以在开放社区中分享你已经制作出的字体。字体可以下载,每种字体都有其相关授权。

自行制作字体需要大量的工作。我不推荐这么做,除非你实在找不到适合的字体或者你喜欢制作字体。图2.4为FontStructor网站窗口,你可以在这里制作和编辑字体。

图2.4 FontStruct字体编辑器(from gamecareergudie)

图2.4 FontStruct字体编辑器(from gamecareergudie)

音频工具

V3游戏包含两种类型的音频资产,我们需要工具来制作和编辑这两种音频。音效指持续时间较短的声音(游戏邦注:最多5秒,通常情况下少于3秒),随游戏中某些事件的发生而播放。音乐是持续时间较长的声音,通常在场景呈现时作为背景播放。

音效:Audacity

如果游戏没有音效会怎么样呢?你想要为自己的游戏制作令人惊奇的音效,Audacity(网址为 http://audacity.sourceforge.net/)是个世界级的音效编辑工具,可免费在Windows、Mac OS X和Linux系统上运行。Audacity支持开发者可以输入或捕捉音效文件,编辑文件并将它们输出成各种不同的音频格式。Android偏好AAC、 MP3、MIDI、Ogg Vorbis和WAV文件,这些格式的文件都可以用Audacity来处理。图2.5显示Audacity正在编辑音效。

图2.5 Audacity声音编辑器(from gamecareergudie)

图2.5 Audacity声音编辑器(from gamecareergudie)

背景音乐:MuseScore

你的游戏还需要背景音乐,格式可以是MP3、OGG或MIDI文件。当然,你可以用许多种方法来制作所需的音乐。比如,你或许有足够的才能自行用乐器弹奏出音乐,然后用设备录下。或者,你可以在网络上寻找可免费用于商业化用途的音乐文件。

我的音乐才能有限,所以我选择使用开源音乐制作工具MuseScore(网址为http://www.musescore.org/)来为V3游戏 制作音乐。这个软件让你可以使用电脑键盘或配套的MIDI键盘来制作或编辑音乐。图2.6显示正在编辑音乐片段的MuseScore主界面。

图2.6 MuseScore(from gamecareerguide)

图2.6 MuseScore(from gamecareerguide)

完成音乐制作后,使用MuseScore可以将音乐保存为MIDI、MP3、OGG或WAV文件,这些格式都能为Android所识别。

实践:开场画面

我们花了这么长的篇幅来阐述游戏概念和工具,现在是时候开始编写代码,进入开发循环。我们采用的模型是,先在这里创建某Android项目的基础,然后在以下章节中不断添加新内容,直至形成完整的游戏。

我们先来看看该程序的开场画面(如图2.7所示)。屏幕在显示这个画面5秒钟后转变成空白屏幕。

图2.7 V3游戏中的启动画面(from gamecareerguide)

图2.7 V3游戏中的启动画面(from gamecareerguide)

创建游戏项目

在本书中,我们使用的是Android SDK。要使用SDK来制作V3游戏,我们先要创建一个新的Android项目。“新建”——“Android项目”对话框需要你输入下列信息:

1、项目名称:V3

2、选择“在工作区创建新项目”

3、选择默认的工作区存储位置(游戏邦注:设计师亦可根据自己的需要变更存储位置)

实践:开场画面27

4、在Build Target中选择“Android 1.6”

5、应用名称:V3

6、安装包名称:com.pearson.lagp.v3

7、Create Activity:StartActivity

8、Min SDK Version:4

通过这些步骤就可以为范例游戏创建新项目,项目包括StartActivity,不过现在它的内容只是简单的“Hello, World”。在本章节后面的版块中,我们将在开始添加代码时修改它的内容。

添加AndEngine库

如果你还未从AndEngine网站下载AndEngine库,先完成这个步骤。获得AndEngine的.jar文件的最佳地方是谷歌上的 AndEngineExamples库,网址为http://code.google.com/p/andengineexamples/。

在源代码标签下,你可以在库文件夹中浏览查找.jar文件,也可以直接将整个树形源代码克隆至本地计算机。推荐使用第2种方法,这样你就已经为访问 范例代码做好准备。AndEngine使用Mercurial源代码控制系统。如果你还未安装Mercurial,网站上的指导会告诉你如何实现。你 将.jar文件添加到机器上之后,接下来就需要输入源代码:

1、在Eclipse Package Explorer中,扩展V3项目。右键点击V3项目,选择“新建文件夹”,在对话框中输入相关信息,这样便创建了库文件夹。

2、右键点击库文件夹,从弹出菜单中选择“输入…”

3、在下个对话框中选择“常规”——“文件系统”,使用“浏览”按钮导向你已下载的AndEngine .jar文件的存放地址。点击地址名称。

4、现在,输入对话框显示的应当是复选框无内容的地址。右侧窗口显示地址中的文件,应该有andengine.jar。点击文件名旁边的复选框,然后点击“完成”。

5、要将.jar文件包含在你的构建路径中,可以在Eclipse Project Explorer窗口中右键点击.jar文件,然后选择“构建路径”——“添加至构建路径”。这样,.jar文件也会直接显示在项目文件夹下。

添加开场画面代码

我们需要修改自动生成的StartActivity.java文件,这样才能在游戏组件加载时呈现开场画面。最终,在所有内容加载完毕之后,我们要 让画面跳转到游戏菜单上。但现在,我们要实现的是保持开场画面一直可见,直到用户回到主界面。列表2.1就是StartActivity.java修改后 的版本。

列表2.1 StartActivity.java


01package com.pearson.lagp.v3;
02 
03import org.anddev.andengine.engine.Engine;
04 
05import org.anddev.andengine.engine.camera.Camera;
06 
07import org.anddev.andengine.engine.options.EngineOptions;
08 
09import org.anddev.andengine.engine.options.EngineOptions.
10 
11ScreenOrientation;
12 
13import org.anddev.andengine.engine.options.resolutionpolicy.
14 
15RatioResolutionPolicy;
16 
17import org.anddev.andengine.entity.scene.Scene;
18 
19import org.anddev.andengine.entity.sprite.Sprite;
20 
21import org.anddev.andengine.entity.util.FPSLogger;
22 
23import org.anddev.andengine.opengl.texture.Texture;
24 
25import org.anddev.andengine.opengl.texture.TextureOptions;
26 
27import org.anddev.andengine.opengl.texture.region.TextureRegion;
28 
29import org.anddev.andengine.opengl.texture.region.TextureRegionFactory;
30 
31import org.anddev.andengine.ui.activity.BaseGameActivity;
32 
33public class StartActivity extends BaseGameActivity {
34// ===========================================================
35// Constants
36// ===========================================================
37private static final int CAMERA_WIDTH = 480;
38private static final int CAMERA_HEIGHT = 320;
39// ===========================================================
40// Fields
41// ===========================================================
42private Camera mCamera;
43private Texture mTexture;
44private TextureRegion mSplashTextureRegion;
45// ===========================================================
46// Methods for/from SuperClass/Interfaces
47// ===========================================================
48@Override
49public Engine onLoadEngine() {
50this.mCamera = new Camera(0, 0, CAMERA_WIDTH,
51CAMERA_HEIGHT);
52return new Engine(new EngineOptions(true,
53ScreenOrientation.LANDSCAPE,
54new RatioResolutionPolicy(CAMERA_WIDTH,
55CAMERA_HEIGHT),
56this.mCamera));
57}
58@Override
59public void onLoadResources() {
60this.mTexture = new Texture(512, 512,
61TextureOptions.BILINEAR_PREMULTIPLYALPHA);
62this.mSplashTextureRegion = TextureRegionFactory
63.createFromAsset(this.mTexture,
64this, “gfx/Splashscreen.png”, 0, 0);
65this.mEngine.getTextureManager().loadTexture(this.mTexture);
66}
67@Override
68public Scene onLoadScene() {
69this.mEngine.registerUpdateHandler(new FPSLogger());
70final Scene scene = new Scene(1);
71/* Center the splash on the camera. */
72final int centerX =
73(CAMERA_WIDTH – this.mSplashTextureRegion.getWidth()) / 2;
74final int centerY =
75(CAMERA_HEIGHT -
76this.mSplashTextureRegion.getHeight()) / 2;
77/* Create the sprite and add it to the scene. */
78final Sprite splash = new Sprite(centerX,
79centerY, this.mSplashTextureRegion);
80scene.getLastChild().attachChild(splash);
81return scene;
82}
83@Override
84public void onLoadComplete() {
85}
86}

这样看上去代码似乎很多,但是在AndEngine中,开场画面只是普通的精灵。因而,我们在上述代码中实现的只是对整款游戏的初始化。下面,让我们解析代码的各个部分:

1、在输入完成后,我们的类就成为BaseGameActivity的子集。这种类可以实现所有的一般AndEngine初始化,为我们提供些许随后将会用到的方法。

2、随后,我们设定了镜头视图的尺寸。因为这是个开场画面,所以我们希望它能够占有整个屏幕。开场画面图片Splashscreen.png的像素大小为480×320,与默认Android显示尺寸相一致。

3、接下来,我们确定了镜头领域、我们将要使用的质感和质感区域。

4、现在,我们从超类BaseGameActivity处重写3个方法。每个方法对应加载过程中的一个点:

(1)onLoadEngine()方法在为这种活动加载游戏引擎时调用。我们在此处初始化镜头和引擎。关于引擎的初始化,有两点需要注意。首先, 我们设定屏幕方向为横向。多数手机游戏使用的都是横向屏幕。其次,我们请求称为“RatioResolutionPolicy”的分辨率协议。在这个协议 下,引擎会通过缩放功能自行调整适应不同的屏幕几何尺寸,同时保持画面纵横比不变。

(2)onLoadResources()方法在加载所需资源时调用。在上述代码中,我们创建了我们将要使用的纹理,并从开场动画图片 Splashscreen.png处加载这种纹理。这个文件应当位于我们的项目工作区中名为“assets/gfx”的文件夹中,否则应用就无法运行。现 在还无需担心TextureOptions设置,我们将在第5章的绘图和精灵中进行更细节化的阐述。最后,我们将纹理加载入引擎的 TextureManager中。

(3)onLoadScene()方法在引擎准备呈现场景时调用。我们初始化每秒帧数记录器,创建场景,将镜头置于场景中,为开场画面制作精灵,将 其依附在场景上,然后将结果反馈给引擎。AndEngine提供为开场画面提供了一种较为特别的场景(即SplashScene),但我们的这种方法也可 以实现目标。

填写完StartActivity.java所需的代码后,我们需要导入图像文件。这需要以下数个步骤:

1、右键点击Project Explorer中V3项目下的资产文件夹。选择“新建”——“文件夹”,创建子文件夹gfx。

2、右键点击新建子文件夹gfx,导入文件Splashscreen.png。将这个图片放入资产文件夹中,使得我们可以使用create-FromAsset()方法来将其加载进纹理中。

在模拟器中运行游戏

在Android模拟器中运行游戏很简单,选择“运行”——“从Eclipse菜单运行”即可。如果你想要立即选择AVD,可以这么做,随后你应当 可以看到开场画面呈现在模拟器窗口中。如果你需要旋转模拟器至横向,按Ctrl+F12这个键位组合即可。如果应用在强制关闭时崩溃,你可能会失去某些所 需的资产。LogCat会告诉你哪些资产已丢失。

在Android设备上运行游戏

你需要访问设备制造商的开发者网站,查看Android开发工作的相关信息。只需要确保设备上运行的Android版本至少同你在创建项目时选择的版本号(游戏邦注:范例中选择的是等级4的API,相当于Android 1.6)一样新。

现在,当你选择“运行”——“从Eclipse菜单运行”时,应当可以看到在设备上运行的选项。Android SDK将会在设备上安装应用,随后开始运行该应用。我们可以使用后退或Home键返回主菜单,但是同所有的Android应用一样,你的游戏将继续在后台 运行。Android智能设备不会显示游戏运行画面,虽然设备不会耗费内存周期来更新不可见的屏幕画面,但游戏的运行仍需要消耗些许内存周期。要停止或卸 载应用,使用设备上的“设置”——“应用程序”——“管理应用程序”功能即可。

总结

本章涵盖了诸多内容。我们浅析了Android SDK,介绍了Android和游戏组件:镜头;场景;层次;精灵;实体;修改器;纹理;质感区域;引擎;BaseGameActivity;物理连接器。

我们介绍了许多可以用来生成手机游戏组件的工具,包括:Inkscape:用于可缩放矢量图像;GIMP:用于位图图像;AnimGet:用于动画捕捉;Tiled:用于编辑tile地图;Audacity:用于音频编辑;MuseScore:用于制作音乐。

最后,我们开始制作V3游戏。我们使用Android SDK Wizard创建Android项目,添加AndEngine库,添加代码恰当地执行AndEngine初始化,为游戏制作出开场画面。

转载自:游戏邦,原文链接


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部