提问人:Jleger91 提问时间:7/21/2023 更新时间:7/21/2023 访问量:39
为什么我的屏幕淡入淡出效果只发生一次?
Why does my screen fade effect only happen once?
问:
我写了一个屏幕淡入淡出效果,使屏幕开始变红,然后淡入黑色。当代码被调用时,它正常工作 - 只有一次;之后效果失败了,我不知道为什么。
export class FadeEffects {
constructor(game) {
this.game = game;
this.width = 640;
this.height = 480;
this.fadeFinished = false;
this.fade = 255;
}//constructor()
//this fade effect starts red transparent and fades to black
fadeRed() {
//now make the rectangle fade to black
let fadeOut = setInterval(() => {
console.log('in interval');
this.fade -= 1;
//when finished
if (this.fade === 0) {
this.fade = 255;
this.fadeFinished = true;
clearInterval(fadeOut);
}//fade check
}, 25);//fadeIn interval
return this.fadeFinished;
}//fadeRed()
draw(context) {
context.fillStyle = "rgba(" + this.fade + ", 0, 0, 0.5";
context.fillRect(0, 0, this.width, this.height);
}//draw()
}//class FadeEffects
然后,在调用函数中,FadeEffects 的对象被实例化,并且 toRemove 设置为 TRUE,fadeFinished 设置为 false。然后调用此代码:
if(!this.fadeFinished && toRemove === 'TRUE'){
this.fadeFinished = this.fadeEffect.fadeRed();
this.fadeEffect.draw(context);
}
然后,准备就绪后,fadeFinished 再次设置为 false。但出于某种原因,效果仅在第一次有效。
答:
0赞
phatfingers
7/21/2023
#1
函数应在每次迭代时调用函数。我会考虑将它传递给您的构造函数,并让内部引用它。fadeRed
draw
context
draw
这是一个有效的测试页面。
<html>
<head>
<style>
#canvas { width: 640; height: 480; }
</style>
<script>
class FadeEffects {
constructor(game, context) {
this.game = game;
this.width = 640;
this.height = 480;
this.fadeFinished = false;
this.fade = 255;
this.context = context;
}//constructor()
//this fade effect starts red transparent and fades to black
fadeRed() {
//now make the rectangle fade to black
let fadeOut = setInterval(() => {
console.log('in interval');
this.fade -= 1;
this.draw();
//when finished
if (this.fade === 0) {
this.fade = 255;
this.fadeFinished = true;
clearInterval(fadeOut);
}//fade check
}, 25);//fadeIn interval
return this.fadeFinished;
}//fadeRed()
draw() {
this.context.fillStyle = "rgba(" + this.fade + ", 0, 0, 0.5";
this.context.fillRect(0, 0, this.width, this.height);
}//draw()
}//class FadeEffects
</script>
</head>
<body>
<canvas id="canvas"></canvas>
<script>
const canvas=document.getElementById('canvas');
const context=canvas.getContext('2d');
const rect=new FadeEffects(null, context);
rect.fadeRed();
rect.fadeRed();
</script>
</body>
</html>
评论
0赞
Jleger91
7/21/2023
我实施了更改,但它仍然只产生一次效果。这很奇怪。
0赞
phatfingers
7/21/2023
我刚刚添加了一些工作测试代码。您应该能够使用它来定位任何材料差异
0赞
Jleger91
7/21/2023
奇怪的是,这也没有用。我遇到的问题似乎不是间隔,而是矩形在第一次完全淡入淡出后停止绘制,并且再也不会淡入淡出。
评论