现在的位置: 首页 >> 多媒体 >> Flash >> Flash ActionScript2.0面向对象游戏开发
添加时间:2005-9-17 来源:网页教学网 作者: 虬髯客
Flash ActionScript2.0面向对象游戏开发

概述:

Flash ActionScript2.0是一种面向对向的编程语言,利用它可以开发出功能强大的应用程序.以早期的ActionScript 1.0相比,它在结构化编程上具有明显的优势,可以使程序具有更强的可移植性,可重性,和伸缩性.

本文通过一个推箱子游戏的开发过程来逐步讲述如何利用ActionScript2.0 进行开发.

结构分析:

在进行一个项目的开发前,项目规化是必不可少的.我们先来思考一下推箱子游戏包含哪些必要的元素呢?

  • 一个玩家(Player)
  • 至少一个箱子(Box)
  • 和箱子数目一样的目标地(Target)
  • 数目不定的砖块(Brick)
  • 砖块连在一下组成了墙壁(Wall)
  • 一个游戏管理者(Manager)
  • 一些显示游戏信息的控件

我们都需要将这些元素抽象化为对象(Object),各个对象包含有各自特有的属性和方法.比如,玩家具有位置属性(currentPos),它表示玩家当全的位置,玩家还有move方法,它使玩家移到下一个位置.等腰三角形这些问题搞清楚了,我们就要进行具体的实现.

实现过程:

  1. 打开Flash,新建"动作脚本文件",依次建立如下.as文件,注意要把它们放在同一个目录下.源文件如下:
  2. //*********Pos.as*********
    //用来表示游戏中物体位置的类
    //游戏中所有对象的位置都为此类的实例
    //用col,row 两个量确定物体的位置
    class Pos {
    var col:Number;// 列值
    var row:Number;// 行值

    //构造函数
    function Pos(c, r) {
    col = c;
    row = r;
    }

    //判断两个位置是否重合
    function equals(t):Boolean {
    return (col == t.col && row == t.row);
    }

    //根据方向值,取得此位置的下一个位置
    function getNextPos(d):Pos{
    var nextPos:Pos;
    nextPos=new Pos(col,row);
    switch (d) {
    case 0 :
    nextPos.col++;

    break;
    case 1 :
    nextPos.row++;
    break;
    case 2 :
    nextPos.col--;
    break;
    case 3 :
    nextPos.row--;
    break;
    }
    return nextPos;
    }
    }
  3. //************Wall.as************
    //用来构建游戏中的墙壁
    class Wall extends MovieClip {
    var brickMatrix:Array;//表示墙壁形状的数组
    var left:Number;//左偏移量
    var top:Number;//上偏移量
    var bricks:Array;//用来存放砖块电影剪辑的数组
    var _stepSize:Number;//每块砖的偏移量

    //构造函数
    function Wall() {
    left = 0;
    top = 0;
    _stepSize = 40;


    }


    //设置墙壁形状数组
    function setMatrix(b) {

    bricks = new Array();
    brickMatrix = b;
    }

    //按照墙壁形状数组修墙
    function build():Void {
    var index = 0;
    for (var i = 0; i<brickMatrix.length; i++) {
    for (var j = 0; j<brickMatrix[0].length; j++) {
    if (brickMatrix[i][j] == 1) { //数组值为1,画一块砖
    bricks[index] = attachMovie("Brick", "bricks"+index, this.getNextHighestDepth());
    bricks[index]._x = left+j*_stepSize;
    bricks[index]._y = top+i*_stepSize;
    index++;
    }
    }
    }
    }
    }
  4. //*************Target.as*****************
    class Target extends MovieClip{
    var pos:Pos;
    var finished:Boolean;
    var left:Number;
    var top:Number;
    var _stepSize:Number;
    function Target(){
    finished=false;
    left=0;
    top=0;
    _stepSize=40;

    }
    function setPos(p){
    pos=p;
    this._x=left+pos.col*_stepSize;
    this._y=top+pos.row*_stepSize;
    }
    }
  5. //*************Player.as**************
    //游戏中的player
    class Player extends MovieClip {

    var _stepSize:Number;//步长
    var _wall:MovieClip;//墙壁电影剪彩辑
    var startPos:Pos;//初始置
    var currentPos:Pos;//当前位置
    var left:Number;//左边距
    var top:Number;//上边距
    var dir:Number;//移动方向
    var boxes:Array;
    var player_path_stack:Array;//玩家移动的路线
    var boxes_path_stack:Array;//箱子移动的路线

    //构造函数,初始化
    function Player() {
    _stepSize = 40;
    currentPos = null;
    left = 0;
    top = 0;
    dir = 0;
    player_path_stack=new Array();
    boxes_path_stack=new Array();

    boxes = new Array();
    }


    //设置玩家的起始位置
    function setStartPos(p) {
    startPos = new Pos(p.col, p.row);
    currentPos = startPos;
    this._x = currentPos.col*_stepSize+left;
    this._y = currentPos.row*_stepSize+top;

    }

    //为玩家指定一个wall实例
    function setWall(w) {
    _wall = w;
    }

    //为玩家指定一个boxes数组,存有所有的箱子实例
    function setBoxes(b) {
    boxes = b;
    }


    //通过按键控制玩家
    function setKeyHandle() {
    this.onKeyDown = function() {

    if (Key.isDown(Key.LEFT)) {
    dir = 2;//左键

    } else if (Key.isDown(Key.RIGHT)) {
    dir = 0;//右键

    } else if (Key.isDown(Key.UP)) {
    dir = 3;//上键

    } else if (Key.isDown(Key.DOWN)) {
    dir = 1;//下键

    }
    var nextObject = this.getNextObject(); //取得玩家下一个位置上的物体

    if (nextObject == "BOX") { //玩家下一个位置上是个箱子
    var box_pushed = getPushedBox();//取得此位置上的这个箱子

    //被推到的箱子存在
    if (box_pushed) {


    if (box_pushed.getNextObject() == "NOTHING") {//被推箱子的下个位置没有障碍

    boxes_path_stack.push({box:box_pushed,pos:new Pos(box_pushed.pos.col,box_pushed.pos.row)});
    box_pushed.move();//被推箱子移一步
    this.move();//玩家移一步

    }

    }

    } else if (nextObject == "NOTHING") {//玩家的下个位置玩障碍
    this.move();
    boxes_path_stack.push(null);
    }

    };
    Key.addListener(this); //监听按键输入
    }

    //取得被推到的箱子
    function getPushedBox() {
    var nextPos:Pos;
    nextPos =currentPos.getNextPos(dir);


    for (var i = 0; i<boxes.length; i++) {
    if (boxes[i].pos.equals(nextPos)) {
    return boxes[i];
    break;
    //trace(box_pushed);
    }
    }
    return null;
    }


    //取得玩家下个位置上的物块类型( 墙壁, 箱子, 无障碍)
    function getNextObject():String {
    //var obj:String;
    var nextPos:Pos;
    nextPos = currentPos.getNextPos(dir);

    if (_wall.brickMatrix[nextPos.row][nextPos.col] == 1) {
    return "WALL";
    }
    for (var i = 0; i<boxes.length; i++) {
    if (boxes[i].pos.equals(nextPos)) {
    return "BOX";
    }
    }
    return "NOTHING";
    }

    //移到下个位置
    function move() {
    player_path_stack.push(currentPos);

    var c=currentPos.getNextPos(dir);
    currentPos=c;
    this._x = left+this.currentPos.col*_stepSize;
    this._y = top+this.currentPos.row*_stepSize;

    }

    //返回上一步
    function reback(){
    if(player_path_stack.length>0){
    var pre=player_path_stack.pop();
    currentPos=pre;
    this._x = left+this.currentPos.col*_stepSize;
    this._y = top+this.currentPos.row*_stepSize;
    }
    if(boxes_path_stack.length>0 ){
    var obj=boxes_path_stack.pop();
    if(obj!=null){
    var box=obj.box;
    var pos=obj.pos;
    box.pos=pos;
    box._x=box.left+box.pos.col*box._stepSize;
    box._y=box.top+box.pos.row*box._stepSize;
    }
    }
    }
    }



    [1] [2] [3]  下一页


上一篇:ActionScript之基础教程:可拖动的小球 下一篇:Flash Lite 1.1 FSCommand2 用法列表
大部分文章摘自网上,如有侵犯您的权益请与我们联系,我们会第一时间进行处理,谢谢! [ 打印文章 ] [ 关闭窗口 ]
推荐文章
·FlashMX 视频教程(18)-缩放工具
·Flash MX 2004 ActionScript图文
·使用Flash MX的3个小技巧
·用Flash AS实现画图的详细讲解
·自己动手制作手机Flash主题动画
·Flash绘画教程:漫画中光影的简
·钢笔字的简单制作
·实例详解鼠标右键菜单
·Flash视频教程:东风破
·Flash MX 2004视频宝典教程(6)美
相关文章
·Flash ActionScript 基本语法小
·Flash ActionScript学习:初识条
·Flash ActionScript学习:让动画
·Flash ActionScript学习:深入研
·Flash Actionscript做图片马赛克
·Flash ActionScript制作的一种特
·Flash ActionScript学习:把AS写
·FLASH ActionScript语言详解
·FLASH ActionScript学习:判断奇
·Flash ActionScript 3 新特性与
最新文章
·Flash Player 8 新特性效果演示
·FlashMX 视频教程(50)-影片发布
·FlashMX 视频教程(49)-MTV的制作
·FlashMX 视频教程(48)-小苗的生
·FlashMX 视频教程(47)-影片跳转
·FlashMX 视频教程(46)-控制动画
·FlashMX 视频教程(45)-变形动画
·FlashMX 视频教程(44)-滚动的小
·FlashMX 视频教程(43)-颜色变化
·FlashMX 视频教程(42)-制作按钮
Google