应游戏朋友要求做了个抽奖程序,还是拿C#做的,$MS大法好 :)
游戏可以设定抽奖类型和跑马灯效果,做这个跑马灯效果的时候,还是很有趣的。
一般抽奖中,会用到类似于转盘的效果,最后停在某个地方,因为转盘是原型的,我们可以根据角度来判断精确到哪个区域,所以我采取了步进carry的方式,来处理方块类似于圆盘区域的显示。下面是跑马灯的状态:
跑马灯静止 -> 加速 -> 匀速 -> 递减 -> 静止
其实区别就在于,减速的过程中表面看起来像是在减速一样,其实方向还是向前的。跑马灯的Tick代码如下:
if (_speed == 0) _speed = startSpeed;
//进入加速
if (_speedStatus == "acceler")
{
//当速度小于一个阶段的时候,加速
if (_speed < stopAccelerSpeed)
_speed += accelerationStep;
else
_speedStatus = "avg";
}
//进入匀速
if (_speedStatus == "avg")
{
if (_avgSpeedTime < avgSpeedTime)
_avgSpeedTime += changeInterval;
else
_speedStatus = "deacceler";
}
//进入递减
if (_speedStatus == "deacceler")
{
runTimer.Interval += changeInterval / 2;
//即刻速度最低不能小于开始速度
if (_speed < startSpeed)
_speed = startSpeed;
else
_speed -= deaccelerationStep;
}
_distance += _speed;
_acturePB = (int)Math.Ceiling(Convert.ToDouble(_distance / perPBWidth));
curPB = _acturePB % globalBPCount;
//做一些逻辑处理
if (_speed == startSpeed)
{
//停止并显示抽奖结果
}
代码中我设计了3个状态:acceler、avg、deacceler分别代表了加速、匀速、递减加速状态。而逻辑过程如下:
1、假设一个BOX的长度是64,初始速度16 Tick开始,设置初始速度,进入加速状态2、当加速,速度达到设定的最大值,然后进入匀速模式
3、匀速模式下加速的时间,可以随机生成不建议太大(用户等太久)、也不建议太小(跑马灯效果不明显)
4、匀速时间到,进入减速状态,此时我用了增加Interval+小幅减速来处理的,让跑马灯看起来更流畅,否则会出现生硬的骤然停止
5、速度减小到小于初始速度,则停止,显示抽奖结果