2012-07-15 65 views
0

當前正在製作HTML5 Canvas Spaceship遊戲。但我有一個巨大的問題: 我爲我的飛船創建了一個類,我想用箭頭鍵移動它。但由於某種原因,它不會移動。在畫布上移動對象

Chrome Inspector不會顯示任何錯誤,但飛船仍然不會移動。

我不完全確定,但是在類中的對象中可能存在問題嗎?

你可以找到我的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,它應該移動對象:

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

你的問題是你(重新)在遊戲的主循環內創建你的英雄。因此,每當遊戲進入循環時,它就會在開始座標處形成一個新的英雄。因此出現不動。

這是一個快速和骯髒的解決方案,以解決您的問題。 您main.js裏面改變「循環」功能,所以它是這個

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

你應該在其他地方創建你的英雄,在循環開始之前,只有一次,所以你可以確保它始終是一些物體。

編輯:

之前,我忘了:你應該重新在「o_stop_paddle」功能舉行的rechtsTaste,linksTaste,hochTaste和你的runterTaste變量或將繼續前進,一旦你放手的關鍵,以及一旦你按下所有方向,就停止移動,因爲它會嘗試向所有方向移動,這相當於根本沒有移動。

+0

謝謝@Pirokiko真的幫了我很多。但是我改變代碼後問題仍然存在。我可以用'held1.held_x + = 20;'通過控制檯移動我的飛船;'有什麼我失蹤?我也更新了我的Git。 – user1478242 2012-07-15 14:01:22

+0

你的控制檯還應該說一些關於無法找到Held類的內容 在constant.js裏面,你現在使用'Held()'它還不知道,所以在你的index.html中包含constant.js之前的held.js 同樣在'move_held'的main.js中,你移動了保持而不是將rechtsTaste設置爲'true' – Pirokiko 2012-07-15 14:20:53

+0

非常感謝,它終於爲我效勞了!我現在有一個值來檢查循環是否已經運行,如果是,它不會再繪製它。難道我更喜歡解決方案:) – user1478242 2012-07-15 14:27:05