作者:周云 来源:闪吧   酷勤网收集 2008-04-15

摘要
  本节讲的是最后一个类:游戏控制类。我自己每个游戏都会在舞台上有这个MC帮我看场子,指挥调度手下的兄弟,提供各类凶器,把握整个进程……这个游戏的游戏控制类:Game_control.as 先点开FLA里的MC,看看它的构造。
终于讲到这节了,累死,也饿死,为了明年年初要拍婚纱,我每天中午就吃个苹果减肥,然后靠苹果的能量再给鸟鸟们写教程……今天算是暴走式的更新速度了,从第7节写到了第10节,胃软导致了手软,手软导致了脚软……版主看到,体恤下吧,加点分,我好早日升中级会员……(咳咳)

本节讲的是最后一个类:游戏控制类

我自己每个游戏都会在舞台上有这个MC帮我看场子,指挥调度手下的兄弟,提供各类凶器,把握整个进程……这个游戏的游戏控制类:Game_control.as

先点开FLA里的MC,看看它的构造。有两个框,一个是选择人物的,一个是显示最高得分的。我用它们两的visible属性控制它们可见和不可见。Game_control.as把握着整个游戏的进程,提供了一些方法。

先看它怎么控制游戏的:
1.先初始化游戏参数,然后让选人框可见,让玩家选人。
2.玩家选好人,它就把人物attach到舞台上,同时通知‘时间控制类’这个小弟你可以30秒倒计时了,又同时开始在天上撒金币和宝物。
3.‘时间控制类’小弟一看时间到0了,马上又来通知大哥,时间到0了
4.大哥收到风声后,停止撒金币,让画面上已有的金币宝物全部消失,同时一番比较后显示出你的历史最高分,同时提供你个重新游戏的按钮
5.按重新游戏,大哥就回到第1步……(好像所有小弟里,只有分数显示自管自工作,没有被大哥叫到)

它包含了一些方法,供小弟和自己用:
1.初始化数据:init()
2.根据玩家选择,在舞台上attach人物:chose(n:Number)
3.天上播撒金币和宝物:onGame()
4.屏幕上宝物消失:jin_disappear()
5.结束游戏,比较得分和最高分,让显示框显示最高分:endGame()

对照着我们来看下代码:
class game.Game_control extends MovieClip {
    private var t:Number = 1;    
    private var game_begin:MovieClip
    private var game_end:MovieClip    
    private var depth:Number
    private var topScore:Number=0
    public var time:Number;
    //构造函数
    function Game_control() {        
        init();
    }
    //隐式设置方法
    public function set _time(ttt:Number):Void {
    }
    //公-私有方法
    public function init() {        
        time=35
        _root.score = 0;
        _root.createEmptyMovieClip("pl", 3);        
        _root.createEmptyMovieClip("item", 2);
        _root.createEmptyMovieClip("xs", 1);
        //初始化里建立空MC,同时也就是把以前的MC删除覆盖
        game_begin._visible=true
        game_end._visible=false
        _root.music_control.bg(1)
    }    
    public function chose(n:Number) {
        game_begin._visible=false        
        _root.pl.attachMovie("ren"+n, "player", 1);
        _root.time_c.Go()//时间控制小弟~号开始倒计时啦~
        _root.music_control.bg(2)
        onEnterFrame = onGame;
    }
    private function onGame() {        
        t++;
        if (t%time == 0) {
            depth=_root.item.getNextHighestDepth()
            if (random(8) == 0) {
                var a:MovieClip=_root.item.attachMovie("bao"+(1+random(2)), "bao"+depth, depth++);                
            }
            else if (random(5) == 0) {
                var a:MovieClip=_root.item.attachMovie("jin2", "jin"+depth, depth++);
                a.score=50                
            } else {
                _root.item.attachMovie("jin1", "jin"+depth, depth++);
            }
            time = 20+random(30);
        }//这段自己仔细看下,就明白怎么随机时间间隔里播撒出随即类型的宝物了
    }
    private function jin_disappear() {
        for(var i:String in _root.item){
            _root.item[i]._speed=0
            _root.item[i]._bspeed()//这个方法Jin.as里写过的,还记得吗?哈哈
            _root.item[i]._alpha-=5
            _root.item[i]._xscale+=2
            _root.item[i]._yscale+=2
            if(_root.item[i].alpha<0) {
                _root.item[i].removeMovieClip()
                delete onEnterFrame
            }
        }//大小和alpha同时变化直到宝物消失~
    }
    public function endGame(){
        onEnterFrame=jin_disappear
        game_end._visible=true
        if(_root.score>topScore) {
            topScore=_root.score
            game_end.sc=topScore
        }//判断和记录历时最高分,同时显示最高分框显示~
    }
}

事实上在人物选择框,两个人物是按钮,用来调用‘游戏控制’类里的chose(n:Number)方法。当chose(n:Number)被调用时,后面一连串的进程就都自动展开了……今天一下子讲的太多了,能消化掉吗?游戏主体也就这样了。剩下点小东西,比如声音控制,下节课讲。

来自:http://www2.flash8.net/teach/6500_9.htm

分类: 游戏开发



关于酷勤 | 联系方式 | 免责声明 | 友情链接