论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash AS编程教程
Tag:2.0,3.0菜鸟,游戏,,cs,技巧,源码,,文本,文字,函数,音乐,随机,拖拽,asp,access,xml,mc,视频教程

FLASH推箱子游戏分析(三)推动箱子

文章类别:Flash AS编程 | 发表日期:2008-10-6 17:35:54


有了前面两节的基础,对于地图的铺设。以及人物的控制。我想,大家都不会再陌生了吧。这节中关于地图的铺设以及人物的控制方面,就不再缀述了。另外,关于地图的铺设部分,我故意多加了一些无用的数据,所以,请大家要注意一下。呵呵。
关于推动箱子的部分中,重点就是关于箱子以及人物的控制。在一般情况一下,当接收键盘信息为上(假设)的时候,人物或者箱子(我们操纵的对象)就向上移动。
而这里面,我们移动的时候,假设人物的上面是树,或者其他障碍物的时候。就不能移动了。
而当,上面第二个位置不是障碍物的时候。人物跟箱子才同时向上移动。这样,才能形成推动的效果。
同理,向右,向左,向下亦如此。
我们这里在表示的时候,用到了二维数组,所以代码会有些繁杂。大家将就着看吧。 [lol] [lol] [lol]
演示:


AS层中代码如下;

/*------------- www.taoshaw.com ---------------*/
//背景图的列数和行数,此处根据您先前所绘制的地图数据来确定...
var col = 16;
var row = 15;
//定义每个单元的长与宽
var block_width = 40;
var block_height = 40;
//初始化所有数组
var ditu_array = new Array();
var box_array = new Array();
var mubiao_array = new Array();
//
//地图数据
var ditu = new Array();
//定义地图的数据内容,此处数据有部分是故意多加的,大家要注意哦,可以自己写一下。呵呵。按照前面一章节的自己重写一下吧。
ditu[0] = new Array( 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 4, 2, 4, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 4, 6, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
var tree:Number = 1;
var back_ground:Number = 2;
var kongbai:Number = 3;
var BOX:Number = 4;
var level_num:Number = 0;
var col_num:Number;
var row_num:Number;
//自定义一个复制地图的函数
function drawMap(level_num) {
  for (var i = 0; i < row; i++) {
    //初始化二维数组
    ditu_array[i] = new Array();
    box_array[i] = new Array();
    //进行循环复制,这个前面的章节中有详细介绍,在此不再缀述
    for (var j = 0; j < col; j++) {
      var num = ditu[level_num][i * col + j];
      //根据地图数据进行mc的复制及摆放
      if (num == 0) {
        //如果是空白位置,就直接跳过  
        continue;
      } else {
        //如果是非零位置,就先复制出背景,并根据行列号进行其他操作
        //根据getNextHighestDepth()方法先定义一个短点的变量
        var temp = getNextHighestDepth();
        //复制库中的元件,并动态添加到新元件
        attachMovie("source", "source" + temp, temp);
        var mc = _root["source" + temp];
        //设置复制元件的座标位置
        mc._x = j * block_width + bgMap_mc._x;
        mc._y = i * block_height + bgMap_mc._y;
        //给mc增加一个 类别属性zhenghaoma
        mc.zhenghaoma = num;
        ditu_array[i][j] = mc;
        switch (num) {
          //根据num的值显示不同的内容.
        case tree :
          mc.gotoAndStop(tree);
          break;
        case back_ground :
          mc.gotoAndStop(back_ground);
          break;
        case kongbai :
          mc.gotoAndStop(kongbai);
          mubiao_array.push([i, j]);
          break;
        case 4 :
          mc.gotoAndStop(back_ground);
          //
          var temp = getNextHighestDepth();
          attachMovie("box", "box" + temp, temp);
          var box = _root["box" + temp];
          box._x = j * block_width + bgMap_mc._x;
          box._y = i * block_height + bgMap_mc._y;
          box_array[i][j] = box;
          break;
        case 5 :
          mc.gotoAndStop(kongbai);
          mubiao_array.push([i, j]);
          //
          var temp = getNextHighestDepth();
          attachMovie("box", "box" + temp, temp);
          var box = _root["box" + temp];
          box._x = j * block_width + bgMap_mc._x;
          box._y = i * block_height + bgMap_mc._y;
          box_array[i][j] = box;
          break;
        case 6 :
          mc.gotoAndStop(back_ground);
          //
          my_person._x = j * block_width + bgMap_mc._x;
          my_person._y = i * block_height + bgMap_mc._y;
          row_num = i;
          col_num = j;
          break;
        }
      }
    }
  }
  //让箱子永远在目标层的上面
  for (i in _root) {
    var s:String = _root[i]._name;
    if (s.substring(0, 3) == "box") {
      _root[i].swapDepths(getNextHighestDepth());
    }
  }
  my_person.swapDepths(getNextHighestDepth());
}
//运行刚定义的函数
drawMap(level_num);
//建立键盘侦听,接收键盘消息
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;
  }  
  movePerson();  
};
//添加监听
Key.addListener(keyListener);
//
//根据键盘消息进行位置移动
function movePerson() {
  //根据按键信息,确定人物的位置方向
  my_person.gotoAndStop(dir);
  switch (dir) {
  case "上" :
    if (ditu_array[row_num - 1][col_num].zhenghaoma != tree) {
      if (box_array[row_num - 1][col_num] == undefined) {
        //如果这个位置上没有箱子,人向上移动一格
        my_person._y = ditu_array[row_num - 1][col_num]._y;
        row_num--;
      } else {
        //这里摆放有一个箱子
        if (ditu_array[row_num - 2][col_num].zhenghaoma != tree && box_array[row_num - 2][col_num] == undefined) {
          //下面第二个位置上不是树,也不是箱子,人物和箱子一起向上移动
          box_array[row_num - 1][col_num]._y = ditu_array[row_num - 2][col_num]._y;
          box_array[row_num - 2][col_num] = box_array[row_num - 1][col_num];
          box_array[row_num - 1][col_num] = undefined;
          my_person._y = ditu_array[row_num - 1][col_num]._y;
          row_num--;
        }
      }
    }
    break;
  case "右" :
    if (ditu_array[row_num][col_num + 1].zhenghaoma != tree) {
      if (box_array[row_num][col_num + 1] == undefined) {
        //如果这个位置上没有箱子,人物向上移动
        my_person._x = ditu_array[row_num][col_num + 1]._x;
        col_num++;
      } else {
        //这里摆放有一个箱子
        if (ditu_array[row_num][col_num + 2].zhenghaoma != tree && box_array[row_num][col_num + 2] == undefined) {
          //下下个位置上不是树,也不是箱子,人物和箱子可以一起向上移动
          box_array[row_num][col_num + 1]._x = ditu_array[row_num][col_num + 2]._x;
          box_array[row_num][col_num + 2] = box_array[row_num][col_num + 1];
          box_array[row_num][col_num + 1] = undefined;
          my_person._x = ditu_array[row_num][col_num + 1]._x;
          col_num++;
        }
      }
    }
    break;
  case "下" :
    if (ditu_array[row_num + 1][col_num].zhenghaoma != tree) {
      if (box_array[row_num + 1][col_num] == undefined) {
        //如果这个位置上没有箱子,人物可以向下移动
        my_person._y = ditu_array[row_num + 1][col_num]._y;
        row_num++;
      } else {
        //这里摆放有一个箱子
        if (ditu_array[row_num + 2][col_num].zhenghaoma != tree && box_array[row_num + 2][col_num] == undefined) {
          //下下个位置上不是墙,也不是箱子,人物和箱子可以一起向下移动
          box_array[row_num + 1][col_num]._y = ditu_array[row_num + 2][col_num]._y;
          box_array[row_num + 2][col_num] = box_array[row_num + 1][col_num];
          box_array[row_num + 1][col_num] = undefined;
          my_person._y = ditu_array[row_num + 1][col_num]._y;
          row_num++;
        }
      }
    }
    break;
  case "左" :
    if (ditu_array[row_num][col_num - 1].zhenghaoma != tree) {
      if (box_array[row_num][col_num - 1] == undefined) {
        //如果这个位置上没有箱子,人物可以向上移动
        my_person._x = ditu_array[row_num][col_num - 1]._x;
        col_num--;
      } else {
        //这里摆放有一个箱子
        if (ditu_array[row_num][col_num - 2].zhenghaoma != tree && box_array[row_num][col_num - 2] == undefined) {
          //下下个位置上不是墙,也不是箱子,人物和箱子一起向上移动
          box_array[row_num][col_num - 1]._x = ditu_array[row_num][col_num - 2]._x;
          box_array[row_num][col_num - 2] = box_array[row_num][col_num - 1];
          box_array[row_num][col_num - 1] = undefined;
          my_person._x = ditu_array[row_num][col_num - 1]._x;
          col_num--;
        }
      }
    }
    break;
  }
}

/*------------- www.taoshaw.com ---------------*/

点此下载源码>>>
上一篇:{应用}缓冲模糊效果 人气:2596
下一篇:{应用}Class结构教程 人气:2746
视频教程列表
文章教程搜索
 
Flash AS推荐教程
Flash AS热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058