AS3"抽奖"之细节分析(上)

作者:网络 来源:佚名 更新时间:2010-11-25 21:29:53 点击:

AS3“抽奖”之细节分析(上)

同志们好,今天咱们来谈谈某FLASH抽奖程序中的细节问题。首先声明一下,本文不是一篇真正意义上的教程,我只是想讨论下咱们在制作应用程序时,应该要关注的细节问题,以带给用户更好的体验。

好的,进入正题。现在我们有一个需求,制作一个转盘抽奖的应用,这有点类似咱们小时候玩过的转糖——现在在瓷器口也有——来看看设计图:

怎么样,很像吧?还记得小时候转糖,总是难以转到龙啊凤啊之类的大奖,所以难免怀疑老板做了什么手脚,现在想想那也是合理的,不然大家总是转到大奖,那老板早亏本不干了。我们这个程序也一样,抽到大奖是有一定几率的,当然这个几率是由后台来控制,FLASH本身只是把结果体现出来。俗话说无图无真相,让我们来瞧瞧具体的流程是怎么回事:

可以看出,页面在flash和后台之间充当了一个中转站的作用,当然这不是本文要讨论的重点。现在让我们回到前端,回到FLASH上面来,看看由FLASH自己来决定抽奖结果和让后台决定抽奖结果之间有什么区别。

先来看看前者,由FLASH制造一个完全公平的随机结果(很可惜Party不会让我这么干的)。我们现在有几个奖项,分别是OO、XX、OOX以及XXO等等,当我们在点击开始抽奖按钮的时候,我们给指针指定一个初始速度,让指针开始旋转并做减速运动,当指针的速度减为0,指针停止旋转,看看它指向的是哪个奖项,然后把结果在FLASH中展示并发送给后台。由于初始速度是在每次点击后我们通过随机函数模拟出来的一个随机值,所以每次转动的初速度都是不同的,指针停下来的位置也就变成不确定的了,这样就实现了随机获奖的效果。现在注意一个细节,因为在这个设计中,用户对指针的控制只有一个点击按钮的操作,而无法控制旋转的力度(这倒是一个不错的想法,如果这是一个小游戏的话),所以我们可以让指针尽量旋转多一点,不要出现用户点击之后由于初速度太小而导致指针只发生少量偏移(或者初速度太大指针旋转很久才停下来)的情况。那么我们需要给随机函数指定一个范围,以限制初始速度使其不要太大也不要太小。这个函数总是在许多地方很管用(同样你可以用来设置指针做减速运动时的加速度),我们把它写出来:
 

 //该函数返回一个介于minNum和maxNum之间的整数,比如randRange (1 ,10)就是取1-10(包括1和10)之间的所有整数。
function randRange(minNum:Number,maxNum:Number):Number
{
 return Math.round(Math.random( ) * (maxNum-minNum) + minNum);
}

我们来个小demo瞧瞧:

我为这个demo写了两个开始按钮,前面那个点击之后,指针开始旋转,此时还可以继续点击按钮,这样会导致一次抽奖还未结束的时候又开始第二次抽奖,带来混乱,于是后面那个按钮我做了点处理,让指针在旋转的时候按钮变得不可点击,这也算是一个小细节吧。 至此,如果我们无视掉一些诸如让指针旋转啊、提交结果给后台啊之类的代码的话,由FLASH自己来决定结果这样一种方式的抽奖动画就制作完成了(众人:……)。

附录:让用户自己控制旋转力度来进行抽奖的demo

本期的讨论到此结束,咱们下一期继续讨论由后台提供结果这种方式的不同点以及应该注意的细节问题。(未完待续……)