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

天津劳技

博主:刘瑞祥(来自天津市南开区实验学校)

 
 
 

日志

 
 

(原创教程)AS3教程——制作一个游戏的半成品  

2013-06-16 20:03:14|  分类: 教育技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

南开区实验学校 刘瑞祥

  之所以叫“半成品”,是因为这个程序没有任何关卡、得分,但包括了一些简单的交互。废话不多说,直接上代码。

  首先,仍然是我们熟悉的“星类”:

package com.blog.tjlaoji{
import flash.display.Sprite;
public class clsStar extends Sprite{
public function clsStar(r:int=2){
this.graphics.lineStyle(1,0);
this.graphics.beginFill(0);this.graphics.drawCircle(0,0,r);this.graphics.endFill();
}
}
}

  下面是一个命令类。这个类可以保存我们以前进行过的每一步操作,并且在必要的时候可以逐个的从后向前分离出操作。这样做的目的是可以实现“撤消”:

package com.blog.tjlaoji{
public class clsCmd{
private static var cmd:Array=new Array();
public static function funAdd(str:String){
cmd.push(str);
}
public static function funDel():String {
if (cmd.length ==0) return "";
return cmd.pop();
}
}
}

  这里声明并立即初始化了一个私有的静态数组cmd,以及两个静态方法:funAdd()和funDel()。所谓静态,是指这些方法和数组不依赖于类的实例,而属于类本身,使用的时候不是通过“实例名.方法名“访问,而是通过”类.方法名"来访问的。funAdd()用于保存执行过的命令,以要添加的命令作为参数,没有返回类型,funDel()用于删除并返回刚才的最后一个命令,没有参数只有返回类型。这两个方法都是用数组对象本身的方法实现的。这个类直接继承Object类,就无须extends关键字,而且内部除了用到数组和函数这两个内置的类以外,再没有用其它的类,也无须导入其它类。

  下面是文档类:

package{
import flash.display.Sprite ;
import flash.events.KeyboardEvent ;

import com.blog.tjlaoji.clsStar;
import com.blog.tjlaoji.clsCmd;

public class ex8 extends Sprite{
private var s:clsStar;
public function ex8(){
s=new clsStar();
s.x=50;s.y=50;stage.addChild(s);
graphics.lineStyle(1,0xcc9999);graphics.drawRect(20,20,510,360);
stage.addEventListener(KeyboardEvent.KEY_DOWN ,f_down);
}
private function f_down(e:KeyboardEvent ){
switch(e.keyCode){
case 37:
if(s.x>20) {s.x-=10;clsCmd.funAdd("LEFT");}
break;
case 38:
if(s.y>20) {s.y-=10;clsCmd.funAdd("UP");}
break;
case 39:
if(s.x<530){s.x+=10;clsCmd.funAdd("RIGHT");}
break;
case 40:
if(s.y<380){s.y+=10;clsCmd.funAdd("DOWN");}
break;
case 90:
if(e.ctrlKey){
switch(clsCmd.funDel()){
case "LEFT":s.x+=10;break;
case "UP":s.y+=10;break;
case "RIGHT":s.x-=10;break;
case "DOWN":s.y-=10;break;
}
}
}
}
}
}

  这里先是引用了所需要的各个类,然后声明一个“星”的实例,因为命令类的对象都是静态的,所以没有声明命令类的实例。然后绘制一个矩形方框作为星实例的移动空间,并监听键盘事件:当按下方向键(上下左右)时移动星的实例,当按下Ctrl+Z时按照所保存的最后一个命令一步步地撤消操作:刚才最后一步向左则这里向右,刚才最后一步向上则这里向下……如果继续按Ctrl+Z则继续撤消。

  上述方案并不是最佳的。首先,用方向的“全名”毫无意义,只要用"UDLR"四个字母或另外找四个数字就可以表示上下左右四个方向了。另外,在游戏实际运行当中,有大量的连续同方向移动,因此我们可以用二维数组来表示物体运动的历史,比如["L",8]表示连续左移8次,将上述代码稍微修改一下,就可以节约大量的记忆移动历史的空间。

  我们可以进一步完善这个游戏,比如在舞台上摆好若干个“豆子”,然后通过键盘控制一个对象的实例运动,逐个“吃掉”豆子(也就是从“豆子”上面经过的时候把豆子隐藏起来。我们要求玩家在一定时间内完成这样的操作,如果达不到要求就GAME OVER了。

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

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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