使HTML5 canvas中的重力翻倍

5
这是我的JSFiddle:http://jsfiddle.net/Au6br/13/ 问题在于,当我连续按下keydown.up时,玩家会多次跳跃。我想定义一个名为JumpCount的变量,当角色跳跃时,如果该变量大于此值,则停止跳跃。
  Character.prototype.Jump = function () { // Jumping
            character.MaxJump += gravity;
            character.y += character.MaxJump;

            if (keydown.up) {
                if (!character.jumping) {
                    character.jumping = true;
                    character.Pos = 4;
                    character.Row = 2;
                    character.h = 23;
                    character.MaxJump = -character.sp * 2.5;
                }
            }
            if (character.y >= ch - character.h) { // if the character is under the bottom
                character.y = ch - character.h;
                character.jumping = false;
            }

        };
3个回答

1
第一个问题是当你不在地面上时,你仍然可以跳跃。这是由于Onground函数引起的。
请将此替换为:
return this.y <= ch - this.h;

使用此代码:
return this.y >= ch - this.h;

你还应该在Jump函数中使用此功能以避免重复代码:

if (character.Onground()) { // if the character is under the bottom
    character.y = ch - character.h;
    character.jumping = false;
}

计算跳跃次数(我假设您想要进行双重跳跃)不能使用测试“if(keydown.up)”的方法。当您按下UP键时,这个值将在多个帧中为真(取决于玩家按下它的持续时间),因此您永远无法正确计算跳跃次数。您必须将跳跃绑定到“onkeydown”事件上,该事件仅调用一次。之后,将很容易使用整数替换character.jumping。

1
我会这样做:

Character.prototype.Jump = function () {
    character.MaxJump += gravity;
    character.y += character.MaxJump;

    if (keydown.up) {
        if (character.CurrentJumps < character.JumpCount) {
            character.CurrentJumps++
            character.Pos = 4;
            character.Row = 2;
            character.h = 23;
            character.MaxJump = -character.sp * 2.5;
        }
    }
    if (character.y >= ch - character.h) {
        character.y = ch - character.h;
        character.CurrentJumps = 0
    }
};

当JumpCount为最大跳跃次数,CurrentJumps为当前已完成的跳跃次数。

以下是设置双重跳跃的示例:

character.JumpCount = 2 // 2 Jumps

-1
你可以添加一个名为jumpCount的变量,每次角色跳跃时增加它的值。只有当jumpCount小于或等于你想让角色能够跳跃的次数时,才允许角色跳跃。当玩家触地时,将jumpCount设置为零。这也可以消除你的jumping变量,因为这意味着与jumpCount === 0相同的事情。

除此之外,我认为与某些对象相撞应该触发一个事件。每当您与这些对象相撞时,角色应该重置跳跃计数。 - Parris
我实际上尝试过那个,但对我没有起作用。正如您所看到的,我在我的代码中声明了一个名为jumpcount的变量,请更新我的jsfiddle。 - Sora
@Sora Murplyx的答案基本上与我所提出的相同。你试过他的代码吗?结合sebcap26的地面建议,这将是一个很好的开始。 - Ethan Lynn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接