当前位置:软件学习 > Flash >>

flash as 3.0键盘控制代码

flash as 3.0键盘控制代码

package sxl{//包路径,也就是建一个sxl文件夹,里面放此MainMap.as文件
import flash.display.Sprite;//显示对象容器
import flash.display.MovieClip;//方块需要附加坐标等属性,所以选它
import flash.display.DisplayObject;//不一一加注释了,自己看吧
import flash.text.TextField;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.display.StageScaleMode;
public class MainMap extends MovieClip {
  /* | container 路与障碍方块容器  | man 游戏主角  |  GoldCoin  GoldPos_array GoldXY 金币 金币可待放置坐标 金币产生顺序
     | Score_txt 得分 | row col 方块列数 方块行数 | W_H 正方形边长及水平与垂直每步行走幅度
     | stageW stageH 场景的宽与高  | list_array 存贮所有地面方块(可通行绿色方块和障碍方块)
  */
  private var container:Sprite=new Sprite;
  private var man:MovieClip;
  private var GoldCoin:MovieClip;
  private var GoldPos_array:Array;
  private var GoldXY:uint=0;
  private var Score_txt:TextField;
  private var row:uint=28;
  private var col:uint=20;
  private var W_H:uint=20;
  private var stageW:uint=560;
  private var stageH:uint=420;
  private var list_array:Array;
  public function MainMap() {
   stage.scaleMode=StageScaleMode.NO_SCALE;
   //  大背景
   var Bg:MovieClip=new MovieClip;
   createRect(Bg,stageW,stageH,0x808080,0xDCF76F);
   addChild(Bg);
   addChild(container);
   initList_array();
   // 创建主角
   man=new MovieClip  ;
   createRect(man,W_H,W_H,0xFFFF00,0xFF0000);
   man.x=0;
   man.y=W_H;
   man.X=0;
   man.Y=0;
   addChild(man);
   // 创建上方背景
   setTopBg();
   // 创设地面
   initMap();
  }
  //..... 创建上方背景区  ...................................................................
  private function setTopBg() {
  var topBg:MovieClip=new MovieClip;
   createRect(topBg,560,W_H,0x000000,0xEEEEEE);
   topBg.y=-1;
   var title_txt:TextField=new TextField;
   title_txt.text="by  老苏  QQ: 285510591                   地      图      设      置                      得分:";
   title_txt.width=400;
   title_txt.height=18;
   title_txt.x=10;
   topBg.addChild(title_txt);
   Score_txt=new TextField();
   Score_txt.width=60;
   Score_txt.height =18;
   Score_txt.x=400;
   topBg.addChild(Score_txt);
   addChild(topBg);
  var textBg:MovieClip=new MovieClip;
   createRect(textBg,55,16,0xEEEEEE,0xEEEEEE);
   textBg.x=500;
   var txt:TextField=new TextField;
   txt.text=" 魔法地图";
   txt.height=18;
   txt.width=55;
   textBg.addChild(txt);
   textBg.mouseChildren=false;
   textBg.addEventListener(MouseEvent.CLICK,onReSet);
   addChild(textBg);
  }
  //..... 重新设置主角和地面区   .....................................................................
  private function onReSet(event:MouseEvent) {
   if (GoldXY>0) {
    GoldXY--;
    var score:uint =GoldXY*50;
    Score_txt.text=String(score);
   } else {
    Score_txt.text="魔法用完";
    event.target.removeEventListener(MouseEvent.CLICK,onReSet);
   }
   // 创建主角
   man=new MovieClip  ;
   createRect(man,W_H,W_H,0xFFFF00,0xFF0000);
   man.x=0;
   man.y=W_H;
   man.X=0;
   man.Y=0;
   addChild(man);
   //  重新设置地图
   reSetMap();
  }
  //..... 重新设置地面区    .........................................................................
  private function reSetMap() {
   // 清除container容器中的子元素(即所有地面方块:绿色方块和障碍方块)
   var long:int=container.numChildren - 1;
   for (var i:int=long; i >= 0; i--) {
    container.removeChildAt(i);
   }
  stage.removeEventListener(KeyboardEvent.KEY_DOWN,onKeyDowns);
   //清除list_array数组中元素,并初始化它为二维数组
   initList_array();
   //铺设地面方块
   initMap();
  }
  // 初始化 list_array 为二维数组
  private function initList_array() {
   list_array=[];
   for (var i:uint=0; i < row; i++) {
    list_array=new Array(col);
   }
  }
  //........  铺设地面方块区   .....................................................
  private function initMap() {
   //清空金币与其可待放置坐标值
   GoldPos_array=[];
   //n rand 控制深色墙的创建 |  m no 控制黄色块的创建
   var n:uint=0;
   var m:uint=Math.random() * (row - 1) * (col - 1) + 2;
   var no:uint=1;
   for (var i:uint=0; i < row; i++) {
    for (var j:uint=0; j < col; j++) {
     no++;
     var cell:MovieClip=new MovieClip;
     // rand 随机数决定障碍方块的数量,也就是地面可通行的复杂程度
     var rand:uint=Math.random() * 2 + 1;
     cell.x=i * W_H;
     cell.y=W_H + j * W_H;
     cell.X=i;
     cell.Y=j;
     if (rand == 2) {
      n++;
     }
     if (n % 3 == 0 && no != m) {
      if (cell.x == man.x && cell.y == man.y) {
       //创建可通行绿色方块, 属性K=0表示可通行
       createRect(cell,W_H,W_H,0x808080,0xDCF76F);
       cell.K=0;
       //金币与其可待放置坐标
       GoldPos_array.push(cell);
      } else {
       //创建不可通行的障碍深色墙,属性K=1表示不可通行
       createRect(cell,W_H,W_H,0x808080,0xCEBB0F);
       cell.K=1;
      }
     } else if (no != m) {
      //创建可通行绿色方块, 属性K=0表示可通行
      createRect(cell,W_H,W_H,0x808080,0xDCF76F);
      cell.K=0;
      //金币与其可待放置坐标
      GoldPos_array.push(cell);
     } else {
      //创建可通行绿色方块, 属性K=0表示可通行
      //createRect(cell,W_H,W_H,0x808080,0xDCF76F);
      cell.K=0;
      //金币与其可待放置坐标
      GoldPos_array.push(cell);
      GoldCoin=new MovieClip  ;
      createRect(GoldCoin,W_H,W_H,0x808080,0x2BBFFF);
      GoldCoin.name="GoldCoin";
      //if (goldBoolean) {
      GoldCoin.x=cell.x;
      GoldCoin.y=cell.y;
      container.addChild(GoldCoin);
     }
     // 方块存贮到数组中
     list_array[j]=cell;
     // 方块加入到容器中
     container.addChild(cell);
    }
   }
   addChild(container);
   // 主角在container容器上面,实现总是处于可见状态
   this.swapChildren(man,container);
   // 金币与其可待放置坐标数组乱序
   randomArray(GoldPos_array);
   // 创建地面后,加入键盘侦听实现移动主角的功能
   stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDowns);
  }
  //.....  键盘侦听区  ........................................................................................................................................
  private function onKeyDowns(event:KeyboardEvent) {
   // 取得主角X Y值,用于判断它是否可移动(根据此X Y值由list_array数组确定上下左右四方向的地面方块,取上下左右四方向的地面方块的K值是否为0,为0可移动,为1不可移动)
   var X:uint=man.X;
   var Y:uint=man.Y;
   switch (event.keyCode) {
    case Keyboard.UP :
     if (Y == 0) {
      // 如果超出上边界时,设置主角坐标到最下方,同时重新设置地面方块,表示进入一个新的地面
      man.Y=col - 1;
      man.y=stageH - W_H;
      reSetMap();
     } else if (list_array[X][Y - 1].K == 0) {
      // 紧临的上方方块的K如果为0,表示是可通行的绿色方块
      // 主角上移一格,同时,主角的Y值减1
      man.y-= W_H;
      man.Y--;
     }
     break;
    case Keyboard.DOWN :
     if (Y == col - 1) {
      // 如果超出下边界时,设置主角坐标到最上方,同时重新设置地面方块,表示进入一个新的地面
      man.Y=0;
      man.y=W_H;
      reSetMap();
     } else if (list_array[X][Y + 1].K == 0) {
      // 紧临的下方方块的K如果为0,表示是可通行的绿色方块
      // 主角下移一格,同时,主角的Y值加1
      man.y+= W_H;
      man.Y++;
     }
     break;
    case Keyboard.LEFT :
     if (X == 0) {
      // 如果超出左边界时,设置主角坐标到最右边,同时重新设置地面方块,表示进入一个新的地面
      man.X=row - 1;
      man.x=stageW - W_H;
      reSetMap();
     } else if (list_array[X - 1][Y].K == 0) {
      // 紧临的左方方块的K如果为0,表示是可通行的绿色方块
      // 主角左移一格,同时,主角的X值减1
      man.x-= W_H;
      man.X--;
     }
     break;
    case Keyboard.RIGHT :
     if (X == row - 1) {
      // 如果超出右边界时,设置主角坐标到最左方,同时重新设置地面方块,表示进入一个新的地面
      man.x=0;
      man.X=0;
      reSetMap();
     } else if (list_array[X + 1][Y].K == 0) {
      // 紧临的右方方块的K如果为0,表示是可通行的绿色方块
      // 主角右移一格,同时,主角的X值加1
      man.x+= W_H;
      man.X++;
     }
     break;
    default :
     break;
   }
   var objisplayObject=container.getChildByName("GoldCoin");
   if (man.x == obj.x && man.y == obj.y) {
    container.removeChild(obj);
    //创建GoldCoin
    //金币产生顺序值
    if (GoldXY<GoldPos_array.length) {
     GoldXY++;
     var score:uint =GoldXY*50;
     Score_txt.text=String(score);
    } else {
     // game over
     Score_txt.text="you vin!";
    }
    GoldCoin=new MovieClip  ;
    createRect(GoldCoin,W_H,W_H,0x808080,0x2BBFFF);
    GoldCoin.name="GoldCoin";
    GoldCoin.x=GoldPos_array[GoldXY].x;
    GoldCoin.y=GoldPos_array[GoldXY].y;
    container.addChild(GoldCoin);
   }
  }
  //.....   创建长方形区  ...........................................................................
  private function createRect(sprite:MovieClip,w:uint,h:uint,lineCor:uint,fillCor:uint) {
   sprite.graphics.lineStyle(1,lineCor);
   sprite.graphics.beginFill(fillCor);
   sprite.graphics.drawRect(0,0,w,h);
   sprite.graphics.endFill();
  }
  //-----  数组乱序区 -------------------------------------------------------------
  private function randomArray(Target_array:Array){
   Target_array.sort(function () {
   return Math.round(Math.random()) ? 1 : -1;
   });
  }
}
}

补充:flash教程,动画技术
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,