Javascript 我需要更改什么才能在JS中调用我的函数?

Javascript 我需要更改什么才能在JS中调用我的函数?,javascript,function,Javascript,Function,我正在做一个flappy bird游戏,我正在尝试以精确的间隔改变鸟的速度,但是我的函数似乎不会被调用,我不明白为什么,因为我使用了与其他函数相同的语法。speedChange函数不起作用,updateDx根据我选择的级别更快地移动管道。事先非常感谢 const canvas=document.getElementById(“bird”); const ctx=canvas.getContext(“2d”); 设帧=0; 常数度=Math.PI/180//以度为单位变换弧度 const spr

我正在做一个flappy bird游戏,我正在尝试以精确的间隔改变鸟的速度,但是我的函数似乎不会被调用,我不明白为什么,因为我使用了与其他函数相同的语法。speedChange函数不起作用,updateDx根据我选择的级别更快地移动管道。事先非常感谢

const canvas=document.getElementById(“bird”);
const ctx=canvas.getContext(“2d”);
设帧=0;
常数度=Math.PI/180//以度为单位变换弧度
const sprite=新图像();
sprite.src=“img/sprite.png”;
//听起来
const SCORE_S=新音频();
SCORE_S.src=“audio/sfx_point.wav”;
const FLAP=新音频();
FLAP.src=“audio/sfx_FLAP.wav”;
const HIT=新音频();
HIT.src=“audio/sfx_HIT.wav”;
const SWOOSH=新音频();
SWOOSH.src=“audio/sfx\u swooshing.wav”;
const DIE=新音频();
DIE.src=“audio/sfx_DIE.wav”;
//游戏状态
恒定状态=
{
电流:0,
准备就绪:0,
游戏:1,
超过:2
}
//开始按钮
恒速起动=
{
x:120,
y:263,
w:83,
h:29
}
canvas.addEventListener(“单击”,函数(evt)
{
开关(状态、电流){
case state.getReady:
state.current=state.game;
SWOOSH.play();
打破
case state.game:
鸟。瓣();
FLAP.play();
打破
案例状态。结束:
设rect=canvas.getBoundingClientRect();
单击x=evt.clientX-rect.left;
让clickY=evt.clientY-rect.top;
//检查我们是否单击开始按钮
如果(clickX>=start.x&&clickX=start.y&&clickY=canvas.height front.h)
{
this.y=canvas.height-front.h-this.h/2;
如果(state.current==state.game)
{
state.current=state.over;
死。玩();
}
}
//如果速度大于跳跃,则表示鸟正在坠落
if(this.speed>=this.jump)
{
这个。旋转=90度;
this.frame=1;//如果鸟倒下了,它必须停止拍打
}
否则{
旋转=-25*度;
}
}
},
speedReset:函数()
{
这个。速度=0;
}
}
常数准备就绪=
{
sX:0,
sY:228,
w:173,
h:152,
x:canvas.width/2-173/2,
y:80,
绘图:函数()
{
if(state.current==state.getReady)
{
drawImage(sprite,this.sX,this.sY,this.w,this.h,this.x,this.y,this.w,this.h)
}
}
}
康斯特加莫弗=
{
sX:175,
sY:228,
w:225,
h:202,
x:canvas.width/2-225/2,
y:90,
绘图:函数()
{
if(state.current==state.over)
{
drawImage(sprite,this.sX,this.sY,this.w,this.h,this.x,this.y,this.w,this.h)
}
}
}
恒流管=
{
职位:[],
顶部:
{
sX:553,
sY:0
},
底部:
{
sX:502,
sY:0
},
w:53,
h:400,
差距:90,
maxYPos:-180,
dx:2,
updateDx:函数updateDx(值)
{
console.log(this);
这个.dx=值;
},
speedChange:功能speedChange(vall){
//控制台日志(“Am intrat”);
设定间隔(
函数()
{this.dx+=vall;},3000);
},
绘图:函数()
{

对于(设i=0;i您似乎缺少两个右大括号,我猜在这一行之后:

{this.dx+=vall;},3000);

编辑:

在setInterval回调中未定义。您需要将其作为局部变量存储在外部,然后使用:

speedChange: function speedChange(vall)
{
   var localthis = this;

   setInterval(
       function()
       {
           localthis.dx += vall;
       }, 3000);
}

dx将
未定义
在speedChange()的间隔内函数,因为在setInterval回调中,这不是对管道的引用。您可以使用
pipes.dx
而不是访问
this.dx

对不起,我没有发布整个代码,因为它有很多行。我有一个右括号。这个函数不是管道常量中的最后一个函数。我修复了括号。我想我的speedChange函数有问题。好吧,可能是你使用了
这个
,尽管在没有看到完整代码的情况下很难知道如何修复它。在setInterval回调中的“这个”将是未定义的。我将用一个可能的修复来编辑答案。它不起作用。我正在发布整个代码。我希望这会有帮助。在哪里this.state是否来自this.state=state.game;我发布了整个代码,该函数Chspeed(buttonTitle)调用的来源是哪里?我尝试将this.dx更改为pipes.dx,但仍然不起作用。游戏一直以相同的速度运行。