使HTML5画布中的重力工作两次

Make gravity in HTML5 canvas work twice

本文关键字:两次 工作 HTML5 布中      更新时间:2023-09-26

这是我的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;
            }
        };

第一个问题是,当你不在地面上时,你可以跳。这是因为Onground功能。

替换为

return this.y <= ch - this.h;

With this:

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.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
    }
};

Were JumpCount是最大跳跃数,currentjump是当前完成的跳跃数

和一个设置为双跳的示例:

character.JumpCount = 2 // 2 Jumps

添加一个名为jumpCount的变量或每次字符跳跃时增加的变量如何?只有当jumpCount小于或等于你希望角色能够跳跃的次数时,才允许角色跳跃。然后在玩家触地时将jumpCount设置为0。这也摆脱了你的jumping变量,因为这将意味着与jumpCount === 0相同的事情。