浅谈游戏在Flash编程教学中的应用
详细内容
1 教学内容展示及游戏制作过程学习内容: 学习 Flash 的 ActionScript2.0 脚本在动画中的应用, ActionScript ( 以下简称 AS) 是 Flash 专用的一种交互式脚本编程语言, 在 Flash 中占有比较重要的地位, AS2.0( 注 : 现 在已 发 展到 AS3.0, 编 程模式已 发 生 了 大的 变 化) 的命令比较多, 语法对没有学过编程的中职学生来说, 一下子要掌握, 难度非常大, 为此, 通过编写游戏---切水果的简单版来学习。
( 1) 制 作水果 图 形元 件 : 包 括 完 整 的 水果 和 被 切 开 后 的水果, 这部分较简单。
( 2) 制 作水果 被 切 开 后 的 水果 汁飞溅 和 水果 切 开 后 的 影片剪辑元件。
( 3) 制 作 鼠 标特 效 及 运行 时 将 鼠 标换成 水果 刀 的 水果 刀元件, 为了增强画面效果, 运用了鼠标跟随效果。
( 4) 制 作 焰 火 效 果 ; 当 游 戏 达 到 所 设 最 高 分 数 段 后 , 作胜利画面。
在这部分为了增强焰火的燃放的逼真效果, 运用了 AS 脚本控制焰火燃放; 具体如下:
1) 首先制作单个焰火燃放的影片剪辑元件。
2) 然后制作多个焰火燃放元件: 将上面做的单个焰火放到舞台并命名为: F01, 在第二帧插入帧, 然后新建代码图层,并在第一、 二帧插入空白关键帧; 在第一帧输入脚本如下:
max=200;i=1;f01._visible=false;在第二帧输入代码如下:
while (i
( 5) 制作按钮: 制作“ 再玩一次” 按钮。
( 6) 给 影 片 剪 辑 加 链 接属 性 , 便 于在程序 中进行 调 用 ,这些元件分别是: 水果刀元件, 链接名为: mouse;每种水果的链接名, 为方便调用, 取名为: target1, target2,…。
( 7) 回到场景 1, 在场景中建两个图层: 一个图层用来制浅谈游戏在 Flash 编程教学中的应用作背景和放用作鼠标跟随效果的影片剪辑实例, 并取名为:
mc; 在图 层 1 第 三 帧 插 入关 键 帧 , 在 上 面 放 焰 火 实 例 和 再 玩一次按钮, 制作胜利画面; 在第四帧插入关键帧, 用来制作结束画面; 在第二个图层第一、 二、 四插入空白关键帧; 然后在上面分别添加如下脚本:
第一空白关键帧脚本:
Mouse.hide () ;this.attachMovie (" mouse" ," mouse" ,5000) ;mouse._x = mc._x;mouse._y = mc._y;var mouseStyle:Object = new Object () ;mouseStyle.onMouseMove = function () {mouse._x = _xmouse;mouse._y = _ymouse;updateAfterEvent () ;} ;mouseStyle.onMouseDown = function () {mouse.gotoAndPlay (2) ;} ;Mouse.addListener (mouseStyle) ;第二空白关键帧:
stop () ;var oldDate:Date = new Date () ;oldTime = oldDate.getTime () ;var score = 0, depth = 1;//屏幕底线max_y = 600;//游戏难度或水平级level = 0;//设置状态栏文本框属性Mouse.hide () ;var my_fmt:TextFormat = new TextFormat () ;my_fmt.bold = true;my_fmt.font = " Arial" ;my_fmt.size = 17;my_fmt.color = 0xFFFFFF;//建立文本框状态栏this.createTextField (" stats_txt" ,4000,300,0,300,32) ;stats_txt.setNewTextFormat (my_fmt) ;stats_txt.selectable = false;//刷新文本框字段updateStats () ;this.onEnterFrame = function () {var newDate:Date = new Date () ;myTime = Math.floor((newDate.getTime()-oldTime)/1000);updateStats () ;//随机决定是否创建新下落的水果if (randRange (0, 30-level*2) == 11) {//水果种类number = randRange (1, 4) ;var target:MovieClip = this.attachMovie (" target" +number, " mc" +depth, depth) ;//水果移动速度target.speed = randRange(3, Math.floor(level/2)+30);//设置水果大小属性with (target) {_x = randRange (50, 650) ;_y = -target._height;scale = randRange (30, 80) ;_xscale = scale;_yscale = scale;_rotation = randRange (0, 180) ;}
target.onEnterFrame = function () {target._y += this.speed;//离开底线判断是否减分if (this._y>max_y) {if (this._currentframe ! = 6 && level<10) {score -= 50;}
if (score<0) {score = 0;}
this.removeMovieClip () ;}
} ;//切开水果进行加分target.onPress = function () {score += 10;this.gotoAndStop (" hit") ;} ;//更新深度depth++;if (depth>100) {depth = 1;}
}
} ;//输出最小值到最大值之间的一个随机数function randRange (minNum:Number, maxNum:Number) :
Number {return ( Math.floor ( Math.random ( ) * ( maxNum -min-Num+1)) +minNum) ;}
//更新文本框状态栏数据显示function updateStats () {old_level = level;level = Math.floor (score/100) ;if (level == 10) {Mouse.show () ;gotoAndStop (3) ;}
if (level ! = old_level) {var shout:MovieClip = _root.attachMovie (" level" +(level-old_level) , " level" , 4500) ;shout._x = 350;shout._y = 350;}
//显示分数、 游戏水平、 时间stats_txt.text = " Score: " +score+" Level: " +level+"Time:" +myTime;}
第四帧脚本: stop () ;2 游戏教学说明( 1) 先 将 所 有命 令 代 码 发 给 学生 , 然后 教 师 演 示 , 将这些代码加到动画项目中, 学生自行调试; 在这个游戏中, 为了简单起见, 水果种类不要太多, 暂时去掉了炸弹。