签到

06月17日
尚未签到

共有回帖数 0

    荷塘月色

    等级:
    啥也不说了,先贴效果图








    第二步、代码编写
    因为我曾发过一个教程贴,所以之前讲过的代码就不再重复解释了。
    1.McButton类,指示用户输入方向。
    //首先点选文件新建Action Script文档,之后在里面输入代码
    //以下代码是对McButton类的定义
    package classes
    {
    import flash.display.MovieClip;
    public class McButton extends MovieClip
    {
    var buttonState:int;
    //记录元件的状态,静止为0,运动为1
    var ox:int;
    var oy:int;
    //ox,oy用来记录元件运动的目标位置
    var buttonDirection:int;
    //用来记录箭头的指向
    public function McButton()
    {
    this.visible=false;
    }
    public function Reset(rx:int,ry:int):void
    {
    //重置函数
    buttonDirection=Math.random()*4+1;
    //随机选取1~4的整数,分别指代四个方向
    this.mc_JianTou.rotationZ=(buttonDirection-1)*90;
    //根据数值改变箭头指向
    buttonState=0;
    //状态设置为静止
    ox=rx;
    oy=ry;
    this.x=rx;
    this.y=ry;
    //设置目标位置和当前位置一致
    this.visible=true;
    }
    public function SetAim(ax:int,ay:int):void
    {
    //设置目标点的函数
    ox=ax;
    oy=ay;
    buttonState=1;
    }
    public function GoTo():void{
    if(this.visible==false||buttonState==0)
    return;
    //如果元件不可见且运动状态为静止的话,则返回
    if(Math.sqrt(Math.pow(ox-this.x,2)+Math.pow(oy-this.y,2))5){
    this.x+=(ox-this.x)/2;
    this.y+=(oy-this.y)/2;
    }
    //如果与目标点距离大于5像素,则每次靠近距离的一半
    else
    {
    this.x=ox;
    this.y=oy;
    buttonState=0;
    }
    //如果距离小于5像素,则直接令元件坐标等于目标坐标
    }
    }
    }
    //在游戏FLA的源文件目录下建立classes文件夹,再将上述Action Script文档以“McButton.as”命名保存在classes下
    2.文档类,MyStage,控制游戏进行和各种动作的实现
    //首先点选文件新建Action Script文档,之后在里面输入代码
    //以下代码是对MyStage类的定义
    package classes{
    import flash.display.MovieClip;
    import flash.events.KeyboardEvent;
    import flash.events.TimerEvent;
    import flash.utils.Timer;
    import flash.events.Event;
    import flash.media.Sound;
    import flash.net.URLRequest;
    public class MyStage extends MovieClip {
    var Pat:Sound;
    var Erro:Sound;
    //创建声音
    var arr_Button:Array;
    var bool_In:Boolean;
    //决定用户是否能输入方向
    var win:int;
    var lose:int;
    //记录成绩的变量
    public function MyStage() {
    Pat=new Sound(new URLRequest("sound/敲击.mp3"));
    Erro=new Sound(new URLRequest("sound/错误.mp3"));
    //导入音效
    arr_Button=new Array();
    win=0;
    lose=0;
    bool_In=true;
    var i:int;
    for (i=0; i15; i++) {
    var b:McButton=new McButton();
    addChild(b);
    arr_Button.push(b);
    }
    //添加15个按钮
    Start();
    this.stage.addEventListener(KeyboardEvent.KEY_DOWN,OnKeyboardDown);
    this.stage.addEventListener(KeyboardEvent.KEY_DOWN,OnKeyboardUp);
    createTimer();
    }
    public function Start():void {
    //初始化函数,创建10个按钮并将重置
    var i:int;
    for (i=0; i10; i++) {

    arr_Button.Reset(i*50+25,250);
    }
    }
    public function OnKeyboardDown(e:KeyboardEvent):void {
    for each (var button in arr_Button) {
    if (button.visible==true&&button.buttonState==0) {
    //当场景里存在可见对象为静止的时候,即等待的元件都到位之后,再执行判断键值的操作
    switch (e.keyCode) {
    case 38 :
    CheckKey(1);
    break;
    case 39 :
    CheckKey(2);
    break;
    case 40 :
    CheckKey(3);
    break;
    case 37 :
    CheckKey(4);
    break;
    }
    break;
    }

    }
    }
    public function OnKeyboardUp(e:KeyboardEvent):void {
    bool_In=true;
    }
    //令按键释放时可再次输入
    public function createTimer():void {
    var MyTimer:Timer=new Timer(50,0);
    MyTimer.addEventListener("timer",timerHandler);
    MyTimer.start();
    }
    public function timerHandler(e:TimerEvent):void {
    //此函数用于判断和文本框处发生碰撞的按钮,并更新成绩
    for each (var button in arr_Button) {
    if (button.visible==false) {
    continue;
    }
    button.GoTo();
    if (button.hitTestPoint(t_Lose.x+100,t_Lose.y+20,true)) {
    button.visible=false;
    lose++;
    t_Lose.text="失败"+String(lose)+"次!";
    }
    if (button.hitTestPoint(t_Win.x+100,t_Win.y+20,true)) {
    button.visible=false;
    win++;
    t_Win.text="成功"+String(win)+"次!";
    }
    }
    }
    public function CheckKey(k:int) {
    if (bool_In==false) {
    return;
    }
    bool_In=false;
    for each (var button in arr_Button) {
    //筛选与方框中心碰撞的元件,即当前选定的元件,并用它的方向和用户输入的方向相比,相同则将其目标点设置为成功文本附近,不通则设置为失败文本附近,并播放相应声音
    if (button.hitTestPoint(mc_ZhunXing.x,mc_ZhunXing.y,true)) {
    if (button.buttonDirection==k) {
    button.SetAim(t_Win.x+100,t_Win.y+20);
    AddButton(25,250);
    Pat.play();
    } else {
    button.SetAim(t_Lose.x+100,t_Lose.y+20);
    AddButton(25,250);
    Erro.play();
    }
    }
    }
    }
    public function AddButton(ox:int,oy:int) {
    //用于游戏开始后添加新按钮
    for each (var button in arr_Button) {
    //挑选未使用的按钮,并在最左侧将其添加
    if (button.visible==true) {
    continue;
    }
    button.Reset(ox-50,oy);
    break;
    }
    for each (var button2 in arr_Button) {
    //将本元件引导至屏幕上按钮队列的最左边位置
    if (button2.visible==true&&button2.buttonState==0) {
    button2.SetAim(button2.x+50,button2.y);
    }
    }
    }
    }
    }


    第三步,在舞台属性的“类”中填入“classe.MyStage”,右键mc_Button,“为Action Script导出”在“类”填入“classes.McButton”.
    导出文件,修改错误。
    至此,游戏完成。

    楼主 2016-06-25 12:12 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知