Проблема с добавлением силы тяжести в 2d платформер - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь создать 2D платформерную игру, и мне не хватает существенной ее части, гравитации.

Я перепробовал все: от просмотра вопросов на этом веб-сайте до просмотра онлайн-уроков и видеороликов.

Мне очень нужна помощь в получении серьезности в этой игре, поскольку я вне идей.

Как я уже говорил, я уже пробовал смотреть несколько учебных пособий и видео, включая этот:

http://www.somethinghitme.com/2013/01/09/creating-a-canvas-platformer-tutorial-part-one/

, но в этом используются формы, созданные на холсте, а неimages.

Я уже знаю, что вы должны использовать как функцию скорости, так и переменную для гравитации.Затем вы должны поместить все это в функцию обработчика ключа, чтобы она могла быть выполнена.

            //spaceman variables
            var sx = canvasWidth / 2; // start the spaceman in the centre
            var sy = canvasHeight / 2;
            var sdx = 0; // set initial speed to 0
            var sdy = 0;
            var sspeed = 3; // create a variable for speed
            var gravity = 0.2;
            var svX = 0;
            var svY = (Math.random() * -10) - 5;

            //set variables to use for key presses
            //these are Boolean variables
            //they can only be true or false
            var rightPressed = false;
            var leftPressed = false;
            var upPressed = false;
            var downPressed = false;

            function keyDownHandler(e) {
                if (e.keyCode == 39) {
                    rightPressed = true;
                } else if (e.keyCode == 37) {
                    spaceman2Ready = true;
                    spacemanReady = false;
                    leftPressed = true;
                } else if (e.keyCode == 38) {
                    upPressed = true;
                } else if (e.keyCode == 40) {
                    downPressed = true;
                }
            }

            function keyUpHandler(e) {
                if (e.keyCode == 39) {
                    rightPressed = false;
                    sdx--;
                } else if (e.keyCode == 37) {
                    spaceman2Ready = false;
                    spacemanReady = true;
                    leftPressed = false;
                    sdx--;
                } else if (e.keyCode == 38) {
                    upPressed = false;
                    sdx--;
                } else if (e.keyCode == 40) {
                    downPressed = false;
                    sdx--;
                }
            }

            // add something to "listen" for an event
            //an event is keypress, mouse movement, mouse click etc.
            document.addEventListener("keydown", keyDownHandler, false);
            document.addEventListener("keyup", keyUpHandler, false);



            function draw() {

                ctx.clearRect(0, 0, canvas.width, canvas.height);


                if (rightPressed == true) {
                    sdx = sspeed;
                } else if (leftPressed == true) {
                    sdx = -sspeed;
                } else if (upPressed == true) {
                    sdy = -sspeed;
                } else if (downPressed == true) {
                    sdy = sspeed
                }

                if (rightPressed == false && leftPressed == false && upPressed == false && downPressed == false) {
                    sdx = 0;
                    sdy = 0;
                }

                sx = sx + sdx;
                sy = sy + sdy;

                }
                if (spacemanReady) {
                    ctx.drawImage(spacemanImage, sx, sy);

                if (spaceman2Ready) {
                    ctx.drawImage(spaceman2Image, sx, sy);
                }

                // basically the setTimeout part, but this time its requesting the function that we made at the top
                requestAnimationFrame(draw);

            }

            // this is to get the loop for the animation to start going
            window.addEventListener("load",
            function() {
                draw();
            });

            < /script>

            </body >

            </html>/

1 Ответ

0 голосов
/ 18 июня 2019

Вы должны использовать гравитацию, чтобы обновлять вашу позицию каждый кадр (в функции рисования). Это будет выглядеть так:

if(sy > 0){
    sdy += gravity
}

Я создал codepen для вашей игры с гравитацией. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...