注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

学无止境

一点积累,与大家分享

 
 
 

日志

 
 

[教程] 从零开始学AS3游戏开发【一】 响应键盘移  

2011-06-13 15:51:50|  分类: flex技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

第一篇 响应键盘事件的方块

准备工作:FLASH CS3/4/5,FlashDevelop(http://www.flashdevelop.org/community/viewforum.php?f=11
开发目标:实现一个受键盘控制的方块
相关API:Sprite,KeyboradEvent

我们即将开始构建一个游戏世界……
任何属于这个世界的物体,我们都叫它游戏对象(gameObject)。 它是游戏的基本元素,所有的一切都是从它衍生而来。有的游戏对象可以被我们操作,因此,我们需要分配给它一个控制器(controller),并通过这个 装置来控制它。我们一次不可能看遍全部世界,所以,我们必须有一个舞台(gameScene),让我们想看到的游戏对象来到这个舞台上表演。所有的一切。 都通过这个舞台开始……

首先,做一下准备工作:

首先打开FlashDevelop,新建一个项目。


选择FLASH IDE项目,选择一个保存目录,并选择一个你喜欢的名字。


在项目名上点右键,选择Add -> New Class,输入文件名Main,选择base Class后面的Browse按钮,输入Sprite


这样,我们就建立了一个继承自Sprite类的对象Main。Sprite是FLASH的一个基本显示元素,它没有时间轴的概念。

打开FLASH CS3,新建一个ActionScript 3.0文件,并把它保存到刚才建立的项目的目录中。在属性栏里,把帧频改成30,文档类输入Main。


这样,我们就建立了一个可以由Main.as控制的FLASH文件。把刚才生成的Main.as改成像下面这样:

  1. package  
  2. {
  3.         import flash.display.Sprite;
  4.  
  5.         public class Main extends Sprite
  6.         {
  7.                
  8.                 public function Main()
  9.                 {
  10.                         trace('我运行咯!');
  11.                 }
  12.                
  13.         }
  14.  
  15. }
复制代码

回到FLASH CS里,按下ctrl+enter进行测试:



看到输出框里出现的输出,说明程序已经可以运行了。trace是FLASH中的消息输出命令,我们在今后的开发过程中会经常使用的。至此,准备工作完成。开始我们的创建之旅吧。

首先来建立游戏时间里的“亚当”——gameObject。在我们的项目里新建文件夹D5Power(起个自己喜欢的名字),并在D5Power下面再建 一个文件夹Objects,最后,在Ojbects里Add一个New Class,输入文件名gameObject,同样,base class选择Sprite。建立完成后,我们的项目看起来应该像这样了:



在FlashDevelop给我们生成的代码中,我们看到了package D5Power.Objects 这样的字眼。package即是包,我们的源代码可以存放在不同的包中,这样可以保持代码的结构清晰。包的名字实际上就是对应目录的名字。如 package D5Power.Objects 这样,我们就可以知道gameObject文件是保存在D5Power/Objects/这个目录下面,如果package后面没有任何内容(比如我们刚 才建立的Main),那么这个文件就是在项目的默认包(源代码的顶级目录)中。不同层级的包之间的访问,必须通过improt进行包含,而同级,以及访问 默认包内的文件,是不需要的。这个我们以后会再继续详细的说明

回来考虑一下我们的“亚当”——gameObject,它是最基础的元素,所以,我们只给他定义最简单的可以做的事情,首先,他可以做一些事(至于做什么,我们先不考虑),另外,他会死亡。既然他可以产生在这个游戏世界里,那么他就必须可以从这个世界里消失的无影无踪:

  1. package D5Power.Objects
  2. {
  3.         import flash.display.Sprite;
  4.        
  5.         /**
  6.          * 基础游戏对象
  7.          * @author D5Power
  8.          */
  9.         public class gameObject extends Sprite
  10.         {
  11.                
  12.                 public function gameObject()
  13.                 {
  14.                        
  15.                 }
  16.                 /**
  17.                  * 做些什么
  18.                  */
  19.                 public function Do():void { }
  20.                 /**
  21.                  * 死亡
  22.                  */
  23.                 public function die():void{}
  24.                
  25.         }
  26.  
  27. }
复制代码

我们定义了一个空的die函数,它什么也没做,我们将在以后慢慢的去补足它。现在,gameObject除了活着,就是死了。这显然不能满足我们的要求。 所以我们必须让他繁衍下一代,并产生进化。在Objects里再新建一个类,命名为actionObject,把它的base class输入gameObject。现在,我们获得了一个“亚当的儿子”。他继承了亚当的全部特性(可以死亡),并可以有自己独特的事情可以做。

我们决定教他如何行走:

  1. package D5Power.Objects
  2. {
  3.         /**
  4.          * 可活动的游戏对象
  5.          * @author D5Power
  6.          */
  7.         public class ActionObject extends gameObject
  8.         {
  9.                 /**
  10.                  * 移动速度
  11.                  */
  12.                 protected var speed:Number = 1.2;
  13.                 /**
  14.                  * 移动方向
  15.                  */
  16.                 protected var walkDirection:uint=0
  17.                
  18.                 public static const UP:uint = 1;
  19.                 public static const DOWN:uint = 2;
  20.                 public static const LEFT:uint = 3;
  21.                 public static const RIGHT:uint = 4;
  22.                
  23.                 public function ActionObject()
  24.                 {
  25.                        
  26.                 }
  27.                 /**
  28.                  * 修改移动方向
  29.                  */
  30.                 public function set direction(dir:uint):void
  31.                 {
  32.                         walkDirection = dir;
  33.                 }
  34.                 /**
  35.                  * 移动
  36.                  */
  37.                 protected function move():void
  38.                 {
  39.                         // 根据不同的方向进行移动
  40.                         switch(walkDirection)
  41.                         {
  42.                                 case UP:
  43.                                         y -= speed;
  44.                                         break;
  45.                                 case DOWN:
  46.                                         y += speed;
  47.                                         break;
  48.                                 case LEFT:
  49.                                         x -= speed;
  50.                                         break;
  51.                                 case RIGHT:
  52.                                         x += speed;
  53.                                         break;
  54.                                 default:break;
  55.                         }
  56.                 }
  57.                
  58.                 /**
  59.                  * 覆盖父类的Do方法
  60.                  */
  61.                 override public function Do():void
  62.                 {
  63.                         if (walkDirection != 0) move();
  64.                         super.Do();
  65.                 }
  66.         }
  67. }
复制代码

在这段代码中,我们第一次接触到了一些关键字,下面对他们进行说明
var FLASH中定义变量用的前缀,比如var num:int = 5;定义一个整型变量num,默认值为5
function FLASH中定义函数的前缀,比如 function test():void{} 定义一个名为test的函数,没有返回值
public 这个关键字之后的定义是公有的,可以被外部的类访问。比如,大家都知道你的名字,所以你的名字是public的。
private 这个关键字之后的定义是完全私有的,只能被类自己访问。比如,你银行的密码只有你自己知道,所以他是private的。
protected 这个关键字之后的定义,是私有的,但家族成员可以访问。比如,你儿子知道你屁股上有一颗痣,其他人不知道。。。笑,所以这个痣是protected的
override 覆盖父级类的定义
set 在上例代码中,可以通过某actionObject.direction这样来访问这个函数,而不是.direction(),和它类似的还有get关键字。你可以用他们来生成一个只读或只写的“变量”

现在,“亚当的儿子”可以行走了。但是,我们不知道怎样才能通知他走,怎样走。我们必须有一个控制他的方法,让他来听从我们的指挥。因为,我们必须创建一个控制器来控制它。在这之前,我们要学习一些操作这个世界的方法和技巧(上帝也需要学习么,呵呵)

  评论这张
 
阅读(1468)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018