首页  韩国资源  酷站加油  我的展厅  设计名站  古典元素  推荐下载  设计欣赏  每周专访  招募精英  人才专区  网页教程  平面设计  编程开发  设计竞赛
当前位置:首页 > 网页教程 > Flash教程 > 正文
Google
FLASH推箱子游戏分析(as2.0)
来源:闪客居 作者:taoshaw 2008年04月29日 14:44 网友评论:0条 点击:

游戏演示图:

http://www.68design.net/download/20084/http://www.68design.net/download/20084/43835.swf


游戏说明:本游戏共设置六关,过完一关后,请点击继续进入下一关。按键盘上下左右功能键控制小人,使小人推动箱子。把箱子推到目的地即算成功。

部分技术难点:这里面,按钮控制人物前进以及地图铺设比较不容易。特别是地图铺设部分。需要考虑到二维数组。本游戏的部分源码及相关教程将在下一篇文章中罗列出来。

一、人物控制


首先,从人物控制着手。人物控制主要就是上、下、左、右。通过键盘的上、下、左、右按键,来控制场景中的人物。先来看演示:

http://www.68design.net/download/20084/20080428113418199.swf

这里,主要用到键盘监听,以及switch函数。代码如下:

/*------------------ www.taoshaw.com ---------------------*/
//创建空MC
this.createEmptyMovieClip("Per", this.getNextHighestDepth);
//将人物剪辑调出到场景中
this.attachMovie("person", "Per", this.getNextHighestDepth);
//初始化MC的位置
Per._x = 275;
Per._y = 260;
//设置人物每次移动的距离
var tepx:Number = 35;
//建立键盘侦听,接收键盘消息
var keyListener:Object = new Object();
//监听键盘按键信息,并获取按键码
keyListener.onKeyDown = function() {
  switch (Key.getCode()) {
  case Key.UP :
    dir = "上";
    break;
  case Key.DOWN :
    dir = "下";
    break;
  case Key.LEFT :
    dir = "左";
    break;
  case Key.RIGHT :
    dir = "右";
    break;
  }
  movePer();
};
Key.addListener(keyListener);
//设置人物移动函数
function movePer():Void {
  switch (dir) {
    //当按下"上"键时,人物往上移动前面设置的那么多个像素,下同
  case "上" :
    Per._y -= tepx;
    Per.gotoAndStop(4);
    break;
    case "下":
    Per._y+=tepx;
    Per.gotoAndStop(1);
    break;
    case "左":
    Per._x-=tepx;
    Per.gotoAndStop(2);
    break;
    case "右":
    Per._x+=tepx;
    Per.gotoAndStop(3);
    break;
  }
}
/*------------------ www.taoshaw.com ---------------------*/

对代码的解释,我个人认为还是很清楚的哈,有不明白的朋友请留言。

二、地图铺设

这节课,我们来分析推箱子游戏中稍微有点复杂的一关。地图铺设。关于地图的铺设,其实就是用到循环,先来一次横向循环,再来一次纵向循环。第二个知识点,就是根据先前设定的数组中返回的值。来确定显示场景中单元的对象。比如,我们设定单元格中含有三个帧,第一帧中显示图案A,第二帧中显示图案B,第三帧中显示图案C。当返回的值是1时,就显示图案A,后面原理一样。这个时候,就要用到switch语句。(由于AS3还不会哈,所以本篇及以前的知识点中,全部以AS2为核心);下面,我们进入正题,先来看看演示:

http://www.68design.net/download/20084/20080428113739335.swf

然后来看看代码:

/*------------- www.taoshaw.com ---------------*/
//设置场景的宽度,在这里可以动态的设定场景舞台的宽度也高度,根据此值以及后面的相关参数。来确定舞台中所需要摆设的单元的数量。
var my_chang_width:Number = 550;
//设置场景的高度
var my_chang_height:Number = 400;
//每个单元的长和宽,在这里,根据你先设计的单元的数值为标准。
var block_width:Number = 40;
var block_height:Number = 40;
//设置两个单元间的距离,比如你希望,场景中摆放的对象看上去不要那么拥护,可以在此设定数值。
var juli:Number = 10;
//计算场景中横向总需要需要多少个单元,根据小学生就会做的原理,最简单的除法。算出单元格的数量。
kuan = my_chang_width/(block_width+juli);
//计算场景中竖向总需要多少个单元
gao = my_chang_height/(block_height+juli);
//初始化地图为数组。
var ditu:Array = new Array();
//设定数组的内容。
ditu = [[1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1], [1, 1, 1, 0, 1, 1, 2, 1, 2, 1, 1], [1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 
[1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1], [1, 1, 4, 4,4, 4, 4, 4, 4, 1, 1], [1, 1, 1, 1, 1,4, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]];
//先来一次横向循环。
for (var i:Number = 0; i<gao; i++) {
//再来一次纵向循环。
  for (var j:Number = 0; j<kuan; j++) {
    var temp = getNextHighestDepth();
    attachMovie("mc", "mc"+temp, temp);
    var mc = _root["mc"+temp];
    //设置mc的位置。
    mc._x = j*block_width+j*juli+bgMap_mc._x;
    mc._y = i*block_height+i*juli+bgMap_mc._y;
    //根据值,设置mc显示第几帧中的对象
    switch (ditu[i][j]) {
      //如果获取值是1,则跳到第1帧
    case 1 :
      mc.gotoAndStop(1);
      break;
      //如果获取值是2,则跳到第2帧
    case 2 :
      mc.gotoAndStop(2);
      break;
      //如果获取值是3,则跳到第3帧
    case 3 :
      mc.gotoAndStop(3);
      break;
      //如果获取值是4,则跳到第4帧。(第4帧,即为空白对象---在此,也可以自己设定)
    case 4 :
      mc.gotoAndStop(4);
      break;
    }
  }
}
//这段是广告。
ad_btn.onRelease=function(){
  getURL("http://www.taoshaw.com/","_blank")
}
/*------------- www.taoshaw.com ---------------*/ 
附件:pu_map.rar
未完待续...
上一篇:云的做法(新手必看)   下一篇:简单的火焰效果及图示原理
收藏此页】【打印】【关闭
 相关文章  我要点评
·巧用Point类计算矢量
·动态文本框旋转后消失的解决方法
·关于建设flash全站所需要的最基本的知识点
·Flash打造铅笔png图标
·谨防“Flash蛀虫”病毒 已感染上万台电脑
·FLASH解决声音和矢量图的问题
·flash cs3生成网页的flash插入方法研究
·制作流动的曲线

免责声明:本站刊载此文不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。对本文有任何异议,请联络:68design#163.com
转载要求:作者及来源信息必需保留。转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印。



关于我们 | 在线反馈 | 广告报价 | 友情链接 | 联系我们 | 免责声明 | 在线投稿 | 网站地图
Copyright © 2003-2007 68design.net, All Rights Reserve 【找网页设计师,当然上网页设计师联盟】