2017-04-26 58 views
1

我正在使用JavaScript生成和終止形狀的遊戲。因此,我需要完全控制這些正在產生的形狀。我想做以下事情,但我不知道如何去做:完全控制許多對象Javascript

  • 我想定義一個構造函數Shape
  • 然後,我想創建一個函數,當它被調用時,它適用於存在的所有Shape並且能夠改變每個屬性。 (例如,我將函數moveAll()和所有形狀的「this.y」增量加1)。
  • 我也希望能夠使用函數終止特定的Shape,或者使用函數添加Shape

我的主要問題是:

var x = new Shape(); 
var y = new Shape(); 
... 

我不想賺一百萬的變量。我需要一種能夠立即製作大量形狀的方法,並且仍然可以單獨控制每一種形狀。如果我創建了一個數組,我將如何單獨控制每件事?

任何事情都有幫助,我只需要理解構造函數概念的基礎。提前致謝!

+0

旁註:你可能想繼續閱讀我們的JavaScript的書/文章至少直到你到達陣列。如果你需要關於構造函數的更多信息 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects應該讓你體面的開始......(你可能正在尋找構建對象的列表相同的「類型」,但不是很確定) –

回答

1

你可以做形狀的數組:

let shapes = [] 

// this will create 6 shapes 
for(let i of [0,1,2,3,4,5]) { 
    shapes.push(new Shape()) 
} 

如果形狀有id你可以終止它:

// incrementing id counter 
let id = 0 

// x and y are optional starting positions 
function Shape(x, y) { 
    this.id = id++ 
    this.y = y || 0 
    this.x = x || 0 
} 

// remove the shape from the array 
function terminate(id) { 
    shapes = shapes.filter(shape => shape.id !== id) 
} 

// or add a shape 
function spawn() { 
    shapes.push(new Shape()) 
} 

現在,你有你的形狀。

將所有的形狀會是這樣簡單的方法:

function moveAll() { 
    shapes.forEach(shape => shape.y++) 
} 

運行系統,這將增加,因爲形狀增加的數量。

更新moveAll,每個請求

function moveAll() { 
    shapes.forEach(shape => { 
    if(shape.type === true) { 
     shape.y++ 
    } else { 
     shape.y-- 
    } 
    }) 
} 
+0

在moveAll()中,您需要將「形狀」更改爲「形狀」,否則名稱不一致 –

+0

@ AssafiCohen-Arazi不,我不這麼認爲。它遍歷「形狀」數組中的每個「形狀」。 –

+0

那麼它不應該被大寫? –