摇奖机的制作方法 |
| 作者:佚名 来源:闪吧 作者: 龙族酷少 更新:2007-1-13 20:48:44 错误报告 我要投稿 |
做了整整一上午,终于做好了,看看效果先: [全屏欣赏]
这些天看到有不少朋友问摇奖机是如果制作的,我最近也考虑了一下,觉得原理不难,关键是有耐心,如果看了这个方法之后,我个人认为还是比较好理解的
转入正题:
先说说原理:主要是随机数的运用,就是先制作一个小球影片,然后在场景中,复制小球到一定数目,同时给每个小球附给一定的数字作为标志,来确定下面滚出来的是不是这个小球,从而根据你设置的条件来判断是不是中奖,小球当然是在一定的圆形平面范围内进行随机运动,不能超出范围,否则就没有真实感了,限定范围可以根据圆形的公式,让半径做随机变化就OK了,然后再判断当小球运动到出口的时候,就复制一个并让它运动出来,判断小球先前附给的数字确定中奖与否,明白这些就可以了,简单吧,下面说一下具体步骤:
1、新建文件,创建一个影片,在其中画一个小圆球;

2、再创建一个影片剪辑,在其中画一个杆,将杆的中心定位在场景中心,在30桢处插入关键桢,选中第一桢,在属性面板中选动作、旋转选逆时针,数目为2。

3、回到主场景,将上两步创建的两个影片都拖到场景中,其中小球的影片命名为ball,另外你也可以在影片中画一些摇奖机的外框,至于怎么画就不说了,因为我绘画也是超级菜鸟一个,哈哈。

4、新建一层用于写AS,这是最关键的一步,因为都是自己一边调试一边写的,所以用了几个小时的时间的写这些,不过明白原理以后,应该很快就能写出来,下面就是主要的AS,已经做了比较详细的注释:

_root.onLoad = function(){ //当加载的时候执行以下动作 x0 = y0 = 200; i = 0; a = Array(); m = Array(); n = Array(); jiao = Array(); num = Array();//以上主要是初始化一些变量以及定义一些数组,这在2004中是必须的 } for(j = 0;j<30;j++){ duplicateMovieClip(ball,"ball"+j,10+j);//复制30个小球 _root["ball"+j].num[j] = j;//把复制的小球依次编号,为了以后的步骤验证是不是中奖 myColor = new Color(_root["ball"+j]);//定义一个颜色对象 myColor.setRGB(random(0xffffff));//设置复制的小球的颜色是随机的 } _root.onEnterFrame = function(){//逐桢执行动作 r = random(96);//定义一随机变量 if(i>360){i = 0;}//当旋转一周的时候又回到原始点 x = r*Math.cos(i*Math.PI/180)+x0; y = r*Math.sin(i*Math.PI/180)+y0;//根据圆的公式得到的,目的就是为了使小球在一个圆周平面内随机运动 i+=random(30);//角度随机自加 _root.ball._x = x; _root.ball._y = y;//将开始的小球的坐标附随机值 for(j = 0;j<30;j++){//以下是设置复制出来的小球的坐标值 jiao[j] = random(360); a[j] = random(96);//给以前定义的数组附随机值 m[j] = a[j]*Math.cos(jiao[j]*Math.PI/180)+x0; n[j] = a[j]*Math.sin(jiao[j]*Math.PI/180)+y0;//为了给复制的每个小球附随机值 _root["ball"+j]._x = m[j]; _root["ball"+j]._y = n[j];//分别给复制的小球附值 jiao[j]+=random(30);//每个小球的角度自加 if(_root["ball"+j]._x>=201&&_root["ball"+j]._x<=206&&_root["ball"+j]._y>=292&&_root["ball"+j]._y<=295){ duplicateMovieClip(_root["ball"+j],"mc"+j,100+j);//当小球运动到规定的范围内,将这个小球再复制一个 } _root["mc"+j]._y+=3;//让复制的这个小球,落下来 if(_root["mc"+j]._y>340){ _root["mc"+j]._y = 340; _root["mc"+j]._x+=3;//当这个小球落到低部的时候,向右滚出 if(_root["mc"+j]._x>400){ _root["mc"+j]._x = 400;//当规定位置,停止运动 if(_root["ball"+j].num[j]==0||_root["ball"+j].num[j]==10||_root["ball"+j].num[j]==20) {_root.wenben.text = "中奖!"} else{_root.wenben.text = "谢谢参与";}//上面两句是为了确定小球是不是中奖,条件自己确定,我这里是根据前面设置的小球的数字来确定的 _root["mc"+j].removeMovieClip();//确定中奖或者没中奖以后,删除这个小球,继续判断 } } } } //注意:上面的有些范围以及小球位置的判断是根据场景中实际小球位置情况来确定的,并不是绝对的,大家可以根据自己的情况加以修改
5、场景的定位,主要用到辅助线,和对齐对象的功能,这就根据自己的实际情况来进行,如果这些都不会,那我建议学学计算机基础先,哈哈 ,开玩笑……
6、大功告成,测试结果,看看自己能不能中奖,我运气不好,长这么大就没中过什么大奖,所以就不试了,希望大家都能中大奖 ^_^
另外,大家如果有什么好的建议或者想法,可以提出来,大家一起探讨,共同进步……
原文件:
点击浏览该文件
|
|
| 文章录入:skyuu 责任编辑:skyuu |
|
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |