2014-01-10 85 views
0

所以我有一個數組(現在的長度爲1)在Javascript中。它目前包含一個Image對象。基本上,我做了這個代碼工作完美的動畫:是否有爲JavaScript對象添加屬性的特定約定?

ants[0]._x = 5; 
ants[0]._y = 5; 

,然後在我的更新功能:

function animate() { 

    context.drawImage(ants[0], 0, 0, 158, 160, ants[0]._x, ants[0]._y, 158, 160); 
    ants[0]._x += 5; 
    ants[0]._y += 5; 

} 

的問題是,當我改變_x和_y x和y(像這樣:

ants[0].x = 5;  
ants[0].y = 5; 

,並在代碼其他地方) 動畫將無法工作。此外,即使我將它們初始化爲5,x和y也等於0。

所以我的問題是,是否因爲我的圖像是Images對象並要將新屬性添加到內置對象中,您必須添加下劃線?

+0

「螞蟻[0]」是什麼類型的對象? – jasonscript

+0

螞蟻[0]是一個圖像對象。 – user3180077

回答

1

圖像對象已具有它自己的只讀xy屬性。 這些對應於圖像的寬度和高度。編輯:實際上對應於頁面上的位置如果您試圖在圖像中設置任意值,則需要創建新變量。以前,你用下劃線(_x)這樣做,但你可以與其他人物也

例如做到這一點:

ants[0].myProperty = 'stackoverflow'; 
console.log(ants[0].myProperty);   // will print 'stackoverflow 

您可以查看包含在一個對象的所有屬性與

var ants = new Image; 
for (var p in ants) { 
    console.log(p); 
} 

MDN具有圖像元件上的更多信息

+0

這就是我的想法,但奇怪的是,我搜索了很多,我沒有看到任何x和y是Image屬性(例如http://www.devguru.com/technologies/javascript/10699)。是否有一個原因 ?或者所有對象都自動具有x和y屬性? – user3180077

+0

我的回答有點不對(請參閱更新)。塊元素(如圖像)將始終具有x和y屬性,因爲它將元素定位在頁面上 – jasonscript

+0

有關*** [MDN](https://developer.mozilla.org/en/docs/Web/API)上的更多信息/ HTMLImageElement)*** – jasonscript

0

在正常情況下(例如,如果您使用的是自制對象,而不是內置語言/瀏覽器對象),沒有任何東西阻止您分配xy。 當您開始使用受保護對象的保留屬性進行播放時,可能會發生各種奇怪的事情,從瀏覽器讓您完全分解頁面直到刷新,或者瀏覽器讓您嘗試幾個小時來更改window的定義。

這一切都歸結到你如何分配他們,你以後怎麼使用它們,無論你是交換對象出你的陣列的......

...這是一個圖片對象,所以你需要確保圖像實際上已加載,然後才能使用它。

沒什麼好說的,從做這樣的事情阻止你:

var my_character = { 
    x : 0, 
    y : 0, 
    width : 32, 
    height : 64, 
    sprite_sheet : loadedImage, 
    current_frame : 6, 
    update : function() { 
     my_character.current_frame += 1; 
     my_character.x += 3; 
     my_character.y -= 2; 
    } 
}; 


context.drawImage(
    my_character.sprite_sheet, 
    x - my_character.width/2, 
    y - my_character.height/2, 
    my_character.width, 
    my_character.height, 
    my_character.width * current_frame, 
    0, 
    my_character.width, 
    my_character.height 
); 

這不是做這件事的一個特別優雅的方式,但嚴重的是,如果你想然後添加一個my_character.$ = "35.99";,你可以。

它比「x」和「y」更重要。

如果你想使用類似my_character.° = 32.5;我相信你不得不使用my_character["°"] = 32.5;

0

是的,有一個約定,被稱爲自定義數據屬性。以data-開頭的屬性保留給應用程序,它們保證永遠不會影響瀏覽器中元素的語義。

ant[0].setAttribute("data-x", 5); 
ant[0].setAttribute("data-y", 5); 

看到官方W3C documentationblog post由John Resig的總結吧。

相關問題