水果机游戏开发流程
2016-11-30 16:36
211 查看
水果机游戏开发流程
在开发 [水果机][6],我们首先要想到是要做成一种什么样的效果,比如跑马灯才开始由慢到快直到快结束的时候由快到慢,比如跑马灯才开始一个框慢慢加速到3个到五个,再由五个变3个在变一个,最后要把音效配备上,我们的水果机想实现的效果就出来了。核心内容大致分2步
跑马灯对象的建立以及运行时间和音乐来配合跑马灯的运转
实现跑马灯对象的建立思路
下面我们看到的函数就是建立我们跑马灯的运行操作的函数,可以根据参数来显示,比如第一个参数[index][6],就是当前第一个图标是编号,(因为我们跑马灯图标都是不会每局变换一次) 我们跑马灯比如24个编号,每个编号对应一张图片,我们会根据[count][6] 来表示这个跑马灯有几个一起跑的,比如当前跑马灯5个对象,第一个对象的是编号1号位的,那他后面就是24 23 22 21,对于转换位置,我们这里有个函数[conversion24][6]根据编号转换了当前跑马灯所在的位置。private function notable(index:int , count:int, gap:Number):void { var p:Point = null; var conversion:int = 0; for(var i:int=0; i<bAnimArr.length; i++) { if(bAnimArr[i]==null) { bAnimArr[i] = new IconBorderCell(this); bAnimArr[i].Create(); bAnimArr[i].alpha = 1 - i*gap; } if(i>=count){ bAnimArr[i].Hide(); }else{ conversion = conversion24(index,i); p = CoreModule.bitmapPosition(conversion-1); bAnimArr[i].index = conversion-1; bAnimArr[i].x = p.x; bAnimArr[i].y =p.y; bAnimArr[i].Show(); } } } /** * 数字转换 从1开始到24 ,会从当前值 - 减去要减去的值 > 0 就不会转换 小于0 会倒叙排序 * @param index 当前值 * @param reduce 要减去的值 * @return * */ private function conversion24(index:int , reduce:int):int { if((index - reduce) > 0) { return index - reduce; }else{ if((index - reduce) == 0) return 24; else return 24 + (index - reduce); } return 0; }
我们初始化时候会给跑马灯对象初始化,比如我们跑马灯只要5个
bAnimArr = new Vector.<IconBorderCell>(5);
主要逻辑
下面就是最核心的代码,找了一个水果机开始运行的音乐,全程6200毫秒,首先我们水果机24个位置,打算让他每次跑5圈后才开始找这次中奖的位置,因为每次中奖的位置是随机,也可以后台每次设置,所以得到一个公式 :
总位置 X 圈数 + 随机位置(1-24)
就等于我们6200毫秒要跑多少个位置了,时间除以个数,等于每秒跑几个。第一次中奖的位置在那里停止,我们就要把这个位置记录下来,下局开始是从这个位置往前跑,而不是从起点开始,大致思路就是这样,具体想做出来什么效果,可以在原有基础上添加。
private var _lastPosition :int = 1; //这个是记录是那个位置开始的,以及包括下一局开始位置 private var _endCount:int = 0; //这个是计算一共运行多少个位置 private var toIndex:int = 0; //它就是用来全局累加的,到24后在变成0,一直循环下去 private var speed_1_num:int = 5; //第一环节开始先运行五个 private var speed_1_time:int = 500; //五个运行总时间500毫秒 private var speed_1_index:int = 0;//第一次累加,累加5个就开始进入第二个环节 private var speed_2_num:int = 20; //第二环节运行20个 private var speed_2_time:int = 1200;//20个运行总时间1200毫秒 private var speed_2_index:int = 0;//第二个环节的累加20个 进入到第三个环节 private var fordelay_num:int = 0; //第三个环节是需要计算, b4a8 他是运行过程中最多的一个, private var fordelay_time:int = 0; //第三个环节运行所需要的时间 private var fordelay_index:int = 0;//第三个环节的累加 private var fordelay:int = 0; //每个运行的时间 private var speed_3_num:int = 5;//第四环节运行5个,这个有开始减慢速度 private var speed_3_time:int = 500;//五个运行总时间500毫秒 private var speed_3_index:int = 0;//第四环节累加,累加5个就开始进入最后一个环节 private var speed_4_num:int = 5;//第五环节运行5个,开始大范围减速 private var speed_4_time:int = 1500;//五个运行总时间1500毫秒 private var speed_4_index:int = 0;//第五个环节的累加 public function start():void { _endCount = 0; _startIndex = _lastPosition; _lastLoop = false; _endCount = (select-_startIndex)+(_startIndex>select?24:0)+96; fordelay_num = _endCount - speed_1_num - speed_2_num - speed_3_num - speed_4_num; fordelay_time = 6200 - speed_1_time - speed_2_time - speed_3_time - speed_4_time; fordelay= fordelay_time / fordelay_num; _startTime = getTimer(); this.addEventListener(Event.ENTER_FRAME, enterHandler); _lastPosition = select; } private function enterHandler(e:Event):void { toIndex = _startIndex % 24; toIndex+=1; var delay:int =0; var nowTime:int = getTimer()-_startTime; var currentTime:int = nowTime/100; if(currentTime>0 && speed_1_index<speed_1_num){ if(currentTime!=speed_1_index) { _startIndex+=currentTime-speed_1_index; _endCount-=currentTime-speed_1_index; speed_1_index = currentTime; notable( toIndex,1,0.3); } }else if(speed_2_index<speed_2_num){ currentTime = (nowTime - speed_1_time) / 60; if(currentTime>0){ if(currentTime!=speed_2_index) { _startIndex+=currentTime-speed_2_index; _endCount-=currentTime-speed_2_index; speed_2_index = currentTime; notable( toIndex,3,0.3); } } }else if(fordelay_index<fordelay_num){ currentTime = (nowTime - speed_1_time - speed_2_time) / fordelay; if(currentTime>0){ if(currentTime!=fordelay_index) { _startIndex+=currentTime-fordelay_index; _endCount-=currentTime-fordelay_index; fordelay_index = currentTime; notable( toIndex,5,0.2); } } }else if(speed_3_index<speed_3_num){ currentTime = (nowTime - speed_1_time - speed_2_time - fordelay_time) / 100; if(currentTime>0){ if(currentTime!=speed_3_index) { _startIndex+=currentTime-speed_3_index; _endCount-=currentTime-speed_3_index; speed_3_index = currentTime; notable( toIndex,1,0.3); } } }else if(speed_4_index<speed_4_num){ currentTime = (nowTime - speed_1_time - speed_2_time - fordelay_time - speed_3_time) / 300; if(currentTime>0){ if(currentTime!=speed_4_index) { _startIndex+=currentTime-speed_4_index; _endCount-=currentTime-speed_4_index; speed_4_index = currentTime; notable( toIndex,1,0.3); } } } if(_endCount==0) { trace("动画运行完毕,接下来想做什么操作,就看你的了"); } }
主要内容就这么多,具体实现效果在这个基础上加就好了,今天就到这里吧!
相关文章推荐
- 3D游戏开发流程
- J2ME手机游戏开发流程
- 【Canvas】HTML5游戏开发的基本流程+P2.js物理引擎实战开发
- 网络游戏开发流程管理
- 十四 手游开发神器 cocos2d-x editor 之串联游戏流程
- 网络游戏开发流程管理
- 网络游戏开发管理流程规范与方法技巧
- 游戏开发流程和引擎
- 游戏开发流程的猜想
- 游戏工作室开发项目的流程及方法
- 教你如何开发VR游戏系列教程二:VR SDK介绍及开发流程介绍
- 游戏开发的主要流程
- 游戏系统开发笔记(二)——开发流程和项目管理
- 游戏开发流程(2)
- 国内外3D游戏开发流程和职位分类
- 游戏开发流程与思想学习笔记(持续更新)
- 游戏开发流程和部分分工
- 游戏开发流程
- 网络游戏开发过程(流程)上
- Go游戏服务器开发的一些思考(二十八):登录流程(一)