я не могу запустить функцию из класса - PullRequest
0 голосов
/ 24 марта 2019

Я получаю эту ошибку каждый раз, когда пытаюсь переместить весло в правильном направлении !!

Uncaught TypeError: paddle.moveRight не является функцией в HTMLDocument.InputHandler.document.addEventListener.event

// index.html

<html>
<head>title>Brick Breaker</title
    ><meta charset="UTF-8" />
</head>

<body>  
    <canvas id="gameScreen" width="800" height="600"></canvas>
    <script type="module" src="src/index.js"></script>
</body>

</html>

// index.js

import Paddle from './paddle.js'
import InputHandler from './input.js'
let canvas = document.getElementById("gameScreen");
let ctx = canvas.getContext("2d");

let paddle = new Paddle();
new InputHandler(Paddle)

function gameLoop() {

  ctx.clearRect(0, 0, 800, 600);

  paddle.update();
  paddle.draw(ctx);

  requestAnimationFrame(gameLoop);
}
gameLoop()

// paddle.js

    export default class Paddle {
  constructor(){
    this.width=150;
    this.height=30;

    this.maxSpeed =10;
    this.speed=0;

    this.position={
        x:300,
        y:500 
    }
}
  moveRight() {
    this.speed = this.maxSpeed;
  }

  draw(ctx) {
    ctx.fillStyle = "#0ff";
    ctx.fillRect(this.position.x, this.position.y, this.width, this.height);
  }

  update() {
    this.position.x += this.speed;
  }
}

//input.js

export default class InputHandler {
  constructor(paddle) {

    document.addEventListener("keydown", event => {

        if(event.keyCode ==37)
        paddle.moveRight();
    });
  }
}

весло должно идти вправо, когда я нажимаю кнопку со стрелкой вправо

1 Ответ

1 голос
/ 24 марта 2019
let paddle = new Paddle();
new InputHandler(Paddle)

Вы передаете класс Paddle в конструктор InputHandler. Затем вы звоните moveLeft на этот класс.

Вы, вероятно, хотели передать экземпляр класса.

let paddle = new Paddle();
new InputHandler(paddle);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...