0

目前我正在制作 HTML5 Canvas Spaceship 游戏。但我有一个大问题:我为我的宇宙飞船创建了一个类,我想用箭头键移动它。但由于某种原因,它不会移动。

Chrome Inspector 不会显示任何错误,但 Spaceship 仍然不会移动。

我不完全确定,但类中的对象可能存在问题吗?

您可以在我的 Git 上找到项目数据:https ://github.com/nemoxdelight/First_Game/

另外,对不起我的英语不好,我只是一个需要帮助的德国人;)

这也是我认为问题可能出在的部分:(在 main.js 中)

function o_move_paddle(p_event) {
    if(p_event.keyCode == KEY_RIGHT) {
        held1.rechtsTaste = true;
        p_event.preventDefault();
    }
    if(p_event.keyCode == KEY_LEFT) {
        held1.linksTaste = true;
        p_event.preventDefault();
    }
    if(p_event.keyCode == KEY_UP) {
        held1.hochTaste = true;
        p_event.preventDefault();
    }
    if(p_event.keyCode == KEY_DOWN) {
        held1.runterTaste = true;
        p_event.preventDefault();
    }
}

在我的 Heroclass 被创建的 hold.js 中,它应该移动对象:

Held.prototype.tasteCheck = function() {
    if(this.hochTaste) {
        this.held_y -= this.speed;
    }
    if(this.rechtsTaste) {
        this.held_x += this.speed;
    }
    if(this.linksTaste) {
        this.held_x -= this.speed;
    }
    if(this.runterTaste) {
        this.held_y += this.speed;
    }
};
4

1 回答 1

1

您的问题是您在游戏的主循环中(重新)创建了您的英雄。因此,每次您的游戏进入循环时,它都会在开始坐标处创建一个新英雄。因此显得一动不动。

这是针对您的问题的快速而肮脏的解决方案。在您的 main.js 中更改“循环”功能,就是这样

function loop(){
  clearCanvas();
  level();
  if(!held1)
    held1 = new Held();
  held1.draw();
  feinde_zeichnen();
  // snd.play();
}

你应该在循环开始之前在别处创建你的英雄,并且只创建一次,这样你就可以确定它始终是某个对象。

编辑:

在我忘记之前:您应该重置您在 'o_stop_paddle' 函数中持有的 rechtsTaste、linksTaste、hochTaste 和 runterTaste 变量,否则一旦您松开按键,它就会继续移动,一旦按下所有方向,它就会停止移动它会尝试向各个方向移动,这相当于根本没有移动。

于 2012-07-15T13:47:51.890 回答