在画布上移动对象

时间:2012-07-15 13:24:58

标签: javascript html5-canvas javascript-objects keyevent

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

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创建的held.js中,它应该移动Object:

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

1 个答案:

答案 0 :(得分:1)

你的问题是你(重新)在游戏的主循环中创建你的英雄。 因此,每当你的游戏进入循环时,它就会在开始坐标处形成一个新的英雄。因此出现不动。

这是解决问题的快速而肮脏的方法。 在你的main.js里面改变'loop'函数,所以就是这个

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

你应该在启动循环之前的其他地方创建你的英雄,只有一次,这样你才能确定它总是某个对象。

编辑:

在我忘记之前:你应该重置你在'o_stop_paddle'功能中保存的rechtsTaste,linksTaste,hochTaste和runterTaste变量,否则一旦你松开键它就会继续移动,并且一旦你按下它就会停止一起移动所有方向,因为它会试图向各个方向移动,这相当于没有任何移动。