www.kernel.org
分类: 系统运维
2012-10-28 11:01:19
开发你的第一个游戏
本章我们将一步一步学习如何用Gamma来开发游戏。
· 准备
· 添加平台
· 添加角色
· 移动角色
· 添加敌人
· 自定义游戏视角
· 添加光线
· 添加纹理
·
· 创建多级关卡
· 创建HUD
· 为游戏添加平滑的光照反射效果
准备
在里我们已经将开发环境搭建好,创建的game.js 内容如下:
require(['gma/base', 'gma/manager'],
function(gma) {
//游戏的具体定义包括在这个函数中.
var manager = gma.manager();
manager.storeLevels({});
manager.init();
}
);
require函数
首先,在game.js文件里我们用require函数导入Gamma库,require函数的输入参数是由Gamma库里gma/base 和 gma/manager 包所构成的一个数组。除了require函数外,我们还定义了一个可执行函数。
/*全局的require方法 */
require(['gma/base', 'gma/manager'],
function(gma) {
//游戏的具体定义包括在这个函数中.
...
}
);
该函数只接受 包作为其输入参数.
创建场景
其次,在game.sj中我们用代码 var manager = gma.manager();. 创建了一个管理器(译者注:在Gamma游戏开发中这个管理器充当了场景的作用,后面我们都将Gamma的管理器称为场景)。缺省情况下,该场景会在html文件里id名为"gamma"的div标签里显示出来。(在创建游戏场景时我们还可以设置它的 属性。设置方法请参考: 和.)。
另外,创建场景时还可以通过和属性来指定其宽度和高度。下面这个例子创建了一个宽、高各为600和500的场景:
/*全局的require方法*/
require(['gma/base', 'gma/manager'],
function(gma) {
var manager = gma.manager({
width : 600,
height : 500
});
}
);
启动游戏的主循环
为了让我们的游戏真正地运行起来,必须设置游戏的主循环。可个过程可以通过在场景里保存游戏关卡,然后调关卡的init()方法来实现游戏主循环的初始化。在我们的游戏里我们设置了一个空了关卡:
manager.storeLevels({});
manager.init();
添加平台
下面我们来创建一个基本关卡,这个关卡仅包含一个小平台,然后将该平台添加到关卡里。平台的类型为entity,所以如果有多个平台我们可以将其定义成entity数组,然后将该数组添加到关卡里。例如:
var myLevel = {
entities : [
{type: 'platform', top:0, left:0, width:30, height:3},
{type: 'platform', top:0, left:36, width:30, height:3}
]
};
因为平台的缺省类型是entity,所以可以省略不写,如下:
var myLevel = {
entities : [
{top:0, left:0, width:30, height:3},
{top:0, left:36, width:30, height:3}
]
};
最后,我们用方法将关卡添加到场景里:
manager.storeLevels(myLevel);
最终示范代码
require(['gma/base', 'gma/manager'],
function(gma) {
var manager = gma.manager({
width : 600,
height : 500
});
var myLevel = {
entities : [
{top:0, left:0, width:30, height:3},
{top:0, left:36, width:30, height:3}
]
};
manager.storeLevels(myLevel);
manager.init();
}
);
提示
关于如何定义一个平台的更多详情请参考 的相关章节
添加角色
创建游戏角色时需要调用 方法实例化一个角色对象,然后将它和关联起来。下面的代码创建角色时指定了其位置和大小:
manager.character = gma.character({
left : 0,
bottom : 0,
width : 3,
height : 6,
depth : 3
});
以上代码,需要将gma/entities/character 添加到require函数的依赖数组中。
设置角色的出生点位
spawn 用于定义了角色的出现位置,一般在关卡对象用标签属性来定义。当关卡被加载后,角色的显示位置就由spawn对象里main标签的值来确定。
Gamma中,角色位置是由角色左下角的x,y坐标值确定。下面的例子创建了的出生点位是:x=15,y=24:
var mylevel = {
spawn : {
main : [15, 24]
}
}
提示
如果关卡中,spawn对象没有用main标签定义角色的出生点位,当游戏运行时角色的默认显示位置是[0, 0]
最终示范代码
require([
'gma/base',
'gma/manager',
'gma/entities/character',
'gma/events'
],
function(gma) {
var manager = gma.manager({
width : 600,
height : 500
});
manager.character = gma.character({
left : 0,
bottom : 0,
width : 3,
height : 6,
depth : 3
});
var myLevel = {
spawn : {
main : [15, 24]
},
entities : [
{top:0, left:0, width:30, height:3},
{top:0, left:36, width:30, height:3}
]
};
manager.storeLevels(myLevel);
manager.init();
}
);
后记:
之前从来没接涉足过游戏开发领域,这次CU提供了这么好的机会,正好可以挑战一下自己。通过查阅游戏开发过程中会用到的一些术语、名词,并结合自己多年的“被游戏玩”的经验,耗时两个mornings,终于翻译完了。当然,作为门外汉,翻译的准确性用词的合理性方面在专业游戏大牛们看来或许有些绕口。如果有游戏方面的大牛路过俺家门口,还请大虾们不吝赐教,谢谢了咯。