是不是lerp有BUG呀?我这样写始终到不了目标颜色 255,255,255
227 227 227 调用了652次 一直没有上涨
断点发现进去数据变化了
第二次又复原了
如何弄呀?
Color取整了,这样呢?
@ccclass('MainScene')
export default class MainScene extends Component {
protected start(): void {
const startTime = Date.now();
this.changeColor(new Color(227, 227, 227), new Color(255, 255, 255), 2500).then(() => console.log(`Change color use ${Date.now() - startTime}ms`))
}
private changeColor(color: Color, to: Color, durationMs: number): Promise<void> {
const promise: Promise<void> = new Promise(resolve => {
const startTime = Date.now();
const update = (_dt: number): void => {
const updateTime = Date.now() - startTime;
const updateColor = color.lerp(to, updateTime / durationMs);
color.set(updateColor);
console.log(`{r: ${color.r}, g:${color.g}, b:${color.b}}`);
if (updateTime >= durationMs) {
this.unschedule(update);
resolve();
}
}
this.schedule(update, 0);
});
return promise;
}
}
用tween更好
用过tween,从0,0,0到255,255,255的变化不是递增的,看上去像是胡乱变化,明儿我试试
颜色值计算完就被取整了。可以用Vec4来替代计算。
像2dx颜色有Color4B和Color4F的区分,这种情况就可以用Color4F。
lerp 第二个参数是应该是一个 0-1 的值,dt 不合适吧
+10086
dt难道不是在0~1之间吗

但是 60 帧, dt 永远都是一个 1/60 左右的值,它到不了 1
要到1的话,就只能是dt的值为1了,其他小于1的值其实都是永远到不了吧

像楼主,应该每帧把 dt 相加,用相加后的值去做 lerp 的第二个参数,可能就是他想要的效果了
每帧dt相加,插值得出的值变化也大,但是好歹最后能够达到目标颜色,就你了!阿发!
你嫌变化值大,可以给 相加后的值再乘一个系数,比如 0.5 , 就可以慢一倍了
已经做处理了 