Chinaunix首页 | 论坛 | 博客
  • 博客访问: 45636
  • 博文数量: 11
  • 博客积分: 203
  • 博客等级: 入伍新兵
  • 技术积分: 201
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-05 22:34
文章分类
文章存档

2014年(1)

2013年(3)

2012年(7)

我的朋友

分类: 系统运维

2012-12-08 08:30:53

创建你的第一个游戏

以下教程将手把手教你创建游戏的过程。

·        

·        

·        

·        

·        

·        

·        

·        

·        

·        

·        

·        

准备

请阅读,搞清楚如何创建游戏,这一步做完之后game.js将如下所示:

点击(此处)折叠或打开

  1. require(['gma/base', 'gma/manager'],

  2.  

  3.     function(gma) {

  4.         // 本函数将完成对游戏的设置

  5.         var manager = gma.manager();

  6.         manager.storeLevels({});

  7.         manager.init();

  8.     }

  9. );

require函数

关于game.js首先值得注意的是通过调用require方法,我们得以“引入”Gamma库中所需要的部分。require方法的参数是Gamma库中的一组包名称 (gma/base gma/manager) 以及一个在所有包被解析之后可以执行的函数。

点击(此处)折叠或打开

  1. /*全局require函数 */

  2. require(['gma/base', 'gma/manager'],

  3.  

  4.     function(gma) {

  5.         // 本函数将完成对游戏的设置

  6.         ...

  7.     }

  8. );

函数的唯一参数是包。

创建画布

接下来你可能会注意到这条语句var manager = gma.manager(),缺省情况下将在某一分区中创建一个以"gamma"id的画布。(也可在创建管理器时通过设置 属性来改变默认状态,更多内容请参考:)

画布的高度和宽度可在创建管理器时通过设置属性进行指定。下面的例子创建了一个高度为600像素、宽度为500像素的画布:

点击(此处)折叠或打开

  1. /*全局require函数 */

  2. require(['gma/base', 'gma/manager'],

  3.  

  4.     function(gma) {

  5.         var manager = gma.manager({

  6.             width : 600,

  7.             height : 500

  8.         });

  9.     }

  10. );

设置游戏循环

为使游戏运行起来,我们必须设置。为此我们需要在管理器中存储一个图层并调用其init方法。本例中我们将存储一个空图层:

点击(此处)折叠或打开

  1. manager.storeLevels({});

  2. manager.init();

添加平台

接下来我们创建一个仅包含几个平台的简单图层。将平台添加到游戏中是通过将其添加到图层中实现的。

平台本身是一种entity,因此对平台的设置其实就是设置图层中的entity数组,例如:

点击(此处)折叠或打开

  1. var myLevel = {

  2.     entities : [

  3.         {type: 'platform', top:0, left:0, width:30, height:3},

  4.         {type: 'platform', top:0, left:36, width:30, height:3}

  5.     ]

  6. };

由于平台是缺省的entity,因此可直接写作:

点击(此处)折叠或打开

  1. var myLevel = {

  2.     entities : [

  3.         {top:0, left:0, width:30, height:3},

  4.         {top:0, left:36, width:30, height:3}

  5.     ]

  6. };

最后,我们要使用将图层添加到管理器中:

点击(此处)折叠或打开

  1. manager.storeLevels(myLevel);

最终结果

点击(此处)折叠或打开

  1. require(['gma/base', 'gma/manager'],

  2.  

  3.     function(gma) {

  4.         var manager = gma.manager({

  5.             width : 600,

  6.             height : 500

  7.         });

  8.         var myLevel = {

  9.             entities : [

  10.                 {top:0, left:0, width:30, height:3},

  11.                 {top:0, left:36, width:30, height:3}

  12.             ]

  13.         };

  14.         manager.storeLevels(myLevel);

  15.         manager.init();

  16.     }

  17. );

注意

其他设置平台的方法请参考

添加角色

为添加角色,我们需要实例化 类的一个对象,并将其赋给 。下面的例子创建了一个指定了位置和层次的角色:

点击(此处)折叠或打开

  1. manager.character = gma.character({

  2.     left : 0,

  3.     bottom : 0,

  4.     width : 3,

  5.     height : 6,

  6.     depth : 3

  7. });

我们还需要将gma/entities/character包添加到require函数的参数列表里。

设置角色的初始位置

角色的初始位置就是其刚一出场的所在位置。初始位置是与图层对象中的一个标签关联在一起的。当图层被加载时,角色的初始位置将由标签main后面的参数指定。

Gamma库使用角色左下角的xy坐标来标识其位置。下面的例子将一个角色的初始位置用main标签设置在x=15y=24

点击(此处)折叠或打开

  1. var mylevel = {

  2.     spawn : {

  3.         main : [15, 24]

  4.     }

  5. }

注意

如果一个图层没有使用main标签指定角色的初始位置,那么将默认指定角色初始位于坐标[0, 0]点处。

最终结果

点击(此处)折叠或打开

  1. require([

  2.     'gma/base',

  3.     'gma/manager',

  4.     'gma/entities/character',

  5.     'gma/events'

  6. ],

  7.     function(gma) {

  8.         var manager = gma.manager({

  9.             width : 600,

  10.             height : 500

  11.         });

  12.         manager.character = gma.character({

  13.             left : 0,

  14.             bottom : 0,

  15.             width : 3,

  16.             height : 6,

  17.             depth : 3

  18.         });

  19.         var myLevel = {

  20.             spawn : {

  21.                 main : [15, 24]

  22.             },

  23.             entities : [

  24.                 {top:0, left:0, width:30, height:3},

  25.                 {top:0, left:36, width:30, height:3}

  26.             ]

  27.         };

  28.         manager.storeLevels(myLevel);

  29.         manager.init();

  30.     }

  31. );

ps:算起来是第二次参加活动了,事实上翻译本身不是目的,将内容理解消化才是根本。翻译的过程中最大的挑战莫过于专业词汇,因为不是搞Web开发,对很多专业词汇不知道拿捏得是否准确,例如画布(canvas)、图层(level)、管理器(manager)等等,还请有经验的读者不吝赐教。顺便期待第三期更加精彩!
阅读(845) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~