您的位置:首页 > 其它

水果机游戏开发流程

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("动画运行完毕,接下来想做什么操作,就看你的了");
}
}


主要内容就这么多,具体实现效果在这个基础上加就好了,今天就到这里吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息