2012-09-07 59 views
0

我對JavaScript很陌生(剛開始在學校使用它),我一直在環顧四周,爲課程完成這個程序。出於某種原因,我只是無法讓它正常工作(與我目前正在工作的任何東西)我試圖用一組Missle對象填充一個Player對象...在將我的代碼切換到這個對象的使用之前,我是能夠顯示「missles」,但現在我卡住了。在JavaScript中使用數組和對象需要幫助

,我只是把我需要的代碼:

function Player(){ 
    this.x = c.width/2; 
    this.y = c.height-20; 
    this.w = 50; 
    this.h = 10; 
    this.dx = 30; 
    this.score = 0; 
    this.missles = new Array();} 

function Missle(x, y){ 
    this.x = x; 
    this.y = y; 
    this.dy = 10; 
    this.w = 8; 
    this.h = 8; 
    this.visible = "false";} 


function init1P(){ 
if (playing == "true"){ 
    player = new Player(); 
    animate1P(); 
}} 

function animate1P(){ 
cntxt.clearRect(0, 0, c.width, c.height); 

cntxt.fillStyle="#000000"; 
cntxt.fillRect(0,0,c.width,c.height); 

cntxt.fillStyle="#ffffff"; 
cntxt.font="34px Verdana"; 
cntxt.fillText(player.score, 10, c.height-10); 

cntxt.fillStyle="#ffffff"; 

cntxt.fillRect(player.x,player.y,player.w,player.h); 

//cntxt.fillRect(comp.x,comp.y,comp.w,comp.h); 

if (player.missles.visible == "true") { 
    cntxt.fillStyle = "#FF0000"; 
    cntxt.fillRect(player.missles.x, player.missles.y, player.missles.w, player.missles.h); 
    //isHit(); 
    if (hit == "false") { 
     player.missles.y -= player.missles.dy; 
     if (player.missles.y <= 0) { 
      player.missles.visible = "false"; 
     } 
    } 
} 

// request new frame 
if (playing == "true") { 
    requestFrame(function() { animate1P(); }); 
} 

//moveComp(); 
checkBoundaries(player); 
//checkBoundaries(comp); 
//isHit(player); 
//isHit(comp); } 

function shoot() { 
player.missles.push(new Missle(player.x + player.w/2, player.y + 10)); 
player.missles.visible = "true"; 
hit = "false";} 
+0

你希望每個玩家擁有多個飛彈?目前,你有一個陣列和「推」導彈,但同時你的行爲就好像只有一個導彈一樣, 'missles.visible'。 – pimvdb

+0

嗯,只會有一個玩家......我正在嘗試爲班級創建一個太空入侵者遊戲......所以這個玩家應該有導彈,我希望有超過1個導彈出現在屏幕一次...感謝您的快速響應! – D34thSt4lker

+0

@steveax請注意,[作業標籤現在正在逐步淘汰](http://meta.stackexchange.com/questions/147100/trogdor-ate-my-homework-tag)。 D34thSt4lker:如果你有新的問題,請單獨提問。 – Gilles

回答

1

你的球員應該有幾個飛彈,您可以通過使用一個數組表示:

this.missles = new Array(); 

當使用數組,你有循環(使用例如for)將某些內容應用於每個元素。所以,做player.missles.visible = "false"真的只是在數組本身而不是每個元素上設置一個屬性。你必須做的事:

for(var i = 0; i < player.missles.length; i++) { 
    player.missles[i].visible = "false"; // player.missles[i] is one item on each iteration 
} 

這同樣適用於繪圖:獲取和環型導彈各更新數據:

for(var i = 0; i < player.missles.length; i++) { 
    if (player.missles[i].visible == "true") { 
    // ... 
} 

另外,還要注意有在JavaScript布爾值。你可以只使用true/false,然後就可以直接使用if這樣的:

if(player.missles[i].visible) { 
    // ... 
+0

非常感謝!偉大的作品! – D34thSt4lker

+0

@ D34thSt4lker:請點擊左邊的勾號,謝謝:) – pimvdb

+0

嘿@pimvdb還不確定這個論壇是如何工作的,但我編輯了我最初的問題(還有1個問題),也許你可以再幫我一次......謝謝!非常感謝 – D34thSt4lker