说实话,在小编第一次接到这个需求的时候,有点子激动,哈哈。,策划给的需求是:
- 上方的妹子插画:侧躺的仙女,要仙女,可以暴露一点
主要玩法:
1.红包雨期间,不定时从指定区域内落下红包
2.玩家点击中红包随机获得奖品
3.点击中飘落的红包,打开红包;若点不中,则不会打开
4.点击红包时,红包切换颜色,并放大1.2倍,松开点击时红包恢复原样
实现方法:
由于要考虑到玩法贴近自然,所以设置了一些参数来控制红包:
/**
* 定时重复执行(基于帧率)。
* @param _num 每次掉落的红包数(最大4个)。
* @param xPoints x坐标轴坐标点集(1行4个)。
* @param yPoints y坐标轴坐标点集。
* @param delayTimes Y区延时下落时间集。
* @param _high 下落最远距离。
* @param _fallTime 下落时间(秒)。
* @param _time 间隔几秒(秒)。
*/
1.开启一个1s定时器进行驱动红包不断掉落
每1中掉落个数在给定区间内进行随机:文中给的是1-4个
随机红包个数 org.tools.MathHelper.randomRange(1, 4);
红包随机出生点 org.tools.MathHelper.randomArray(t.xPoints)
for(let i = 0; i < t._num; i++)
t.onFall(i);
2.为当前红包雨界面盒子注册舞台点击事件
3.进行红包点击检测:
1)遍历所有的红包,进行判定当前点击是否处于红包范围内,如果在内部则判定为点击改红包,进行响应。
红包进行响应:
红包下落过程中开启一个帧循环,进行边界检测,如果y左边>界面高度,则判定为离开可视范围,将红包进行回收,
/**获取掉落时间段时间,把一整段时间切分多个时间段,每个时间段内红包掉落速度有快有慢*/
v红包下落速度 = (屏幕高度/掉落时间)
y距离 = v红包下落速度*Laya.timer.delta
为了增加真实性,每个红包的角度、大小都进行一次随机,
let rotation = org.tools.MathHelper.randomRange(-25, 25);
let rs:number = org.tools.MathHelper.randomRange(80, 120) / 100;
至此,红包雨的大体功能完成了,看效果图: