因此,我正在寫一個愚蠢的小帆布遊戲,主要是小行星的副本。無論如何,我有我的按鈕,監聽器設置,以便當用戶按下空格鍵,玩家對象的fire()
函數被調用:對象原型不起作用在畫布遊戲
eGi.prototype.keyDownListener = function(event) {
switch(event.keyCode) {
case 32:
player.fire();
break;
在火功能,我的腳本檢查,如果該進程已經運行,如果不是,那麼它會創建一個新的「子彈」對象,將其存儲在一個臨時變量中,並將其添加到繪製堆棧中。
fire:(function() {
if (this.notFiring) {
var blankObject = new bullet(this.x,this.y,this.rot,"bullet");
objects.push(blankObject);
timer2 = setTimeout((function() {
objects.pop();
}),1000);
this.notFiring = false;
}}),
(順便說一下,當用戶釋放空格鍵,this.notFiring
設置回真。)
這是子彈對象構造和其所需的和原型方法,draw(context)
:
var bullet = function(x,y,rot,name) {
this.x = x;
this.y = y;
this.sx = 0;
this.sy = 0;
this.speed = 1;
this.maxSpeed = 10;
this.rot = rot;
this.life = 1;
this.sprite = b_sprite;
this.name = name;
}
bullet.prototype.draw = function(context) {
this.sx += this.speed * Math.sin(toRadians(this.rot));
this.sy += this.speed * Math.cos(toRadians(this.rot));
this.x += this.sx;
this.y -= this.sy;
var cSpeed = Math.sqrt((this.sx*this.sx) + (this.sy * this.sy));
if (cSpeed > this.maxSpeed) {
this.sx *= this.maxSpeed/cSpeed;
this.sy *= this.maxSpeed/cSpeed;
}
context.drawImage(this.sprite,this.x,this.y);
}
無論如何,當我跑我的遊戲,按空格鍵,Chrome開發者控制檯給了我一個錯誤,指出:
Uncaught TypeError: Object function (x,y,rot,name) {
this.x = x;
this.y = y;
this.sx = 0;
this.sy = 0;
this.speed = 1;
this.maxSpeed = 10;
this.rot = rot;
this.life = 1;
this.sprite = b_sprite;
this.name = name;
} has no method 'draw'
即使我原型。我究竟做錯了什麼?
編輯:
改變var bullet = function
到,改變bullet.prototype.draw
到bullet.draw
後,我仍然得到一個錯誤。這一次,它更神祕,說
Uncaught TypeError: type error
bullet.draw
(anonymous function)
eGi.drawObjs
eGi.cycle
完整的代碼是在我的網站上,here
ANOTHER編輯:
的鉻控制檯說,上線122發生這種類型的錯誤,這恰好是代碼片段:
context.drawImage(this.sprite,this.x,this.y);
不過,我不知道如何有可能是一個類型的錯誤,精靈是一個圖像,X和Y值不是未定義的,它們是數字。
你肯定'this.sprite'在你把它傳遞給'context.drawImage'時間定義之間的區別?嘗試添加'console.log(this.sprite)'來首先檢查。是否正確定義了「b_sprite」? – apsillers 2012-07-25 05:52:56
是的,它正在通過。我已經定義了所有我的精靈,格式爲 'var b_sprite = new Image(); b_sprite.src =「bullet.png」;' – Polyov 2012-07-25 12:47:44