打印

[编程] [原创]周云的FLASH小游戏开发教室_基础篇(全11节[完])

赶上直播了,楼主强!

好 顶~~~~~~~~~~~~

好好学习 天天向上~~~~~~~
LESSON 10 范例接宝游戏中游戏控制类的CLASS讲解

终于讲到这节了,累死,也饿死,为了明年年初要拍婚纱,我每天中午就吃个苹果减肥,然后靠苹果的能量再给鸟鸟们写教程……
今天算是暴走式的更新速度了,从第7节写到了第10节,胃软导致了手软,手软导致了脚软,较软导致了XX也软……
版主看到,体恤下吧,加点分,我好早日升中级会员……(咳咳)

本节讲的是最后一个类:游戏控制类
我自己每个游戏都会在舞台上有这个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)被调用时,后面一连串的进程就都自动展开了……

今天一下子讲的太多了,能消化掉吗?
游戏主体也就这样了。剩下点小东西,比如声音控制,下节课讲。

[ 本帖最后由 cloudy1982 于 2007-10-17 16:48 编辑 ]
【我的博客】http://www.cloudy8.com
LESSON 11 声音控制&我对FLASH创作游戏的看法

【响应正版号召,再次宣传】

本文作者:周云(老鸟可以直接叫小弟我小周,粉丝必须称呼周哥,讨教的嫩鸟就叫声周老师吧,满足下我的欲望,啊哈哈哈~)
联系方式:danyun1982@163.com
首发于蓝色经典论坛

欢迎转载呀~(不欢迎又咋样……要转照样转……)
转载必须保留我的作者名称和联系方法,不然转载者生个儿子+String(a)
c=["gu","yan"]
b=["长不高","没P"+c[random(c.length)],"是女孩"]
a=b[random(b.length)]+"呀~!"

我喝了半瓶子水~幻想自己刚吃了个鸡腿~死撑着把这最后节不缩水的写完~
让我们来看看声音控制部分吧~

声音控制,我个人不习惯用类来控制。
我一直是在游戏第一帧先用Sound类把库里的声音关联起来
然后做个Object,在里面定义function来控制声音的
当然你也可以写个类来控制,这随你的,用痰盂还是马桶,我们谁也不能强求谁,对吧?

把第一帧的声音控制代码拿出来~~~
复制内容到剪贴板
代码:
/////////---声音控制---/////////////
music_bg1 = new Sound();
music_bg1.attachSound("bg1");
music_bg2 = new Sound();
music_bg2.attachSound("bg2");
music_bg_jin = new Sound();
music_bg_jin.attachSound("bg_jin");
music_bg_bao = new Sound();
music_bg_bao.attachSound("bg_bao");
//库里的声音文件都关联起来~
music_control = new Object();
music_control.bg = function(n) {
    for (i=1; i<=2; i++) {
        _root["music_bg"+i].stop();
    }
    _root["music_bg"+n].start(0, 999);
};
music_control.snd = function(n) {
    _root["music_bg_"+n].start(0, 1);
};
//music_control这个Ob里定义了bg()和snd两个方法,bg用来放长段背景音乐,snd用来放音效
_root.music_control.bg(1)
//看,就是这么用的
现在前面几节那些CLASS里写到的声音调用语句知道是怎么回事了吧?

----------------------饥肠辘辘的分割线------------------------

游戏开发基础的课程,至此已经全部写完了。
范例游戏有很多地方可以扩充,比如加点掉宝种类,再加几个人物和技能,玩到一半掉下只猪……等等等等
我只是抛砖引玉下而已~
要玩我做的游戏?等我找找……随便先找个
http://www.mhhf.net/games_786.html
如果喜欢,我可以再开贴教这类STG射击型的,或者动作闯关型的,或者FMS联机型的,或者XX型的,或者YY型的都可以……

关于做游戏,事实上正规的团队应该有三种人:
1.策划
2.美工
3.程序员
但实际上,FLASH这种东西,相比其它,真的属于不赚钱的。所以搞的专业人士不多。
大多数情况下,都是闪客单干。
所以很多时候开发都不正规,比如代码不注释~在一个FLA里,帧里,隐蔽的很多MC的小边小角里,敲了很多代码,如果有人接手,必然会分析到晕倒……
这种不正规,在长时间单干下,是不会被意识到并且改正的。但如果参加过团队制作,就会立即意识到这个问题。

一个好程序员,或者懂的很多的牛人,并不会必定是个好的游戏开发者
我自己见过好几个自己认为技术很牛的人,他们并不做游戏,或者游戏做出来并不受欢迎
他们自己分析原因是没好美工,导致画面粗糙,不吸引人
而我则认为更主要的原因是缺少好的游戏策划
在我心里,游戏受欢迎程度取决的因素:策划>程序>美工
就比如细节方面,好的策划知道怎么样的设定更体贴玩家,知道什么元素能抓牢玩家,什么能激起玩家欲望,什么能让玩家HIGH
老实说,这比懂CLASS重要得多了

如果你跟我一样是一名独立创作FLASH游戏的制作者,那你先要成为一名很好的游戏玩家。
要能从玩家的角度来设计制作游戏。
当然,策划游戏,是需要天赋的。

我们不能要求每个人样样都完美,毕竟每个人都有自己擅长的和不擅长的。
继续努力吧。

最后一句,如果以后来上海想请我吃饭我一定会带上老婆给你DOUBLE面子的……

[ 本帖最后由 cloudy1982 于 2007-10-15 16:27 编辑 ]
【我的博客】http://www.cloudy8.com

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!

怎么把.as整合在一起呢 ~

一直比较头疼~ 不知道方法~
那位知道也不妨高所我下~谢谢了~~~

TOP

我试着破解了一下 出来了很多文件夹 是怎么合到里面的~

知道的告诉我吧
不然很感觉很乱~~

TOP

回复 #36 ningmengfeixue 的帖子

请仔细看贴~我有讲到
而且也有朋友说到
【我的博客】http://www.cloudy8.com

TOP

楼主讲得比较详细通俗易懂了..至少通过这篇文章.让我这个对类比较感兴趣但又害怕人已经可以熟练使用类了..非常的感谢.呵呵....

然后..楼主得回我的短消息啊..我PM你了..

[ 本帖最后由 zijiguang 于 2007-10-15 16:05 编辑 ]
我们拥有共同的梦想,在此刻我们相信永恒,我们相处的短暂时光,都将成为我们美好难忘的回忆.我相信,我们的誓言会成为永恒......
~FOREVER HOT~
http://myhot.0033.cn/ ----紫*极光

TOP

不知道是否调用了这个类后就自动封装了~

以前还傻的都把那些.as文件都和。swf放到一起~
明白了 谢谢~~~~

TOP

回复 #39 ningmengfeixue 的帖子

MC和.AS关联起来后,就就可以看作是被实例化的封装了……
【我的博客】http://www.cloudy8.com

TOP

 老大你太强了``鄙视下``什么是后答应教我下``哈哈``还是自己先努力学下把免的你说我依赖性成度上升 :D :D

TOP

这个帖子一定要顶~

TOP

谢谢周老师!比我们学校老师讲得好多了.
一顿猛敲了几个月,看来要开始用class了.

TOP

回复 #43 avitor 的帖子

我一直认为在校的老师永远不是最新技术的掌握者
好的技术人员都是奋斗在最前沿开发做项目的人……
【我的博客】http://www.cloudy8.com

TOP

这帖子强。。留名 学习!
uping~

TOP

好强   我顶!!  
学习中

TOP

楼主老大我是刚才进入这个论团的,新人,是个爱好FLASH和编程的爱好者,也是正在学编程的一个学生您的教程真牛啊!我拜您为师好吗?

TOP

源代码能打包一起发出来吗 谢谢了

TOP

其实我只想看看换动作的方法
后来看到了 this.gotoAndStop("move")
唉,我就是用的这种方法,不过as3里不行了
我现在不知道该用什么方法了....

TOP

回复 #48 321321321 的帖子

请仔细看教程,内附源码下载地址
【我的博客】http://www.cloudy8.com

TOP

顶一下~~~~~~~~~~~

TOP

求教

周老师去帮我解决下我的问提把``我把源文件打包了``
我菜固我在,不想菜!

TOP

楼主教程条理分明,思路清晰,简明易懂,受用良多。

指出一个小小小的BUG。LESSON 10中:
引用:
if(_root.item[i].alpha<0) {
                _root.item[i].removeMovieClip()
                delete onEnterFrame
            }
应该是

if(_root.item[i]._alpha<0) {
                _root.item[i].removeMovieClip()
                delete onEnterFrame
            }

[ 本帖最后由 其实我没有想法 于 2007-10-17 15:47 编辑 ]
没有想法,没有话说。

TOP

多谢楼上。
【我的博客】http://www.cloudy8.com

TOP

xuexi

向周老师学习,最近买了陈冰的《FLASH第一步》,准备好好学一把!不知道什么时候达到老师这样的水平啊。

TOP

..

我是菜菜鸟哦!

TOP

NND,怎么阿狗阿猫阿哥阿弟都出书了……
【我的博客】http://www.cloudy8.com

TOP

楼主不当老师真是太浪费了~~~人才呀!!!!
过好大学最后的时光!

TOP

占位
楼主的FLASH闪功历害
学习
疯狂学Javascript,请多指教

TOP

受益良多~~~~
平生非特别经典不顶~~
现在我顶了~

TOP