2014-07-20 68 views
0

我有一個函數,它將RandomBlock對象添加到場景並將其向下移動到屏幕上。每秒鐘保持產卵物體

function enemyPaddleMovement() 
{ 
scene.add(RandomBlock); 
RandomBlock.translateX(-8); 
} 

RandomBlock由該代碼所做的:

var shapes = [LeftBlock, RightBlock, middleRightBlock, middleLeftBlock, middleBlock]; 
var shape = shapes[Math.floor(Math.random()*shapes.length)];` 

RandomBlock = new THREE.Object3D(); 
RandomBlock.add(shape); 

我想要做的就是保持產生一個新的RandomBlock對象每秒並將其向下移動屏幕。我試過使用setInterval,但它只替換相同的RandomBlock對象,而不是每次創建一個新對象。

任何幫助?

+0

你正在嘗試的代碼在哪裏? – charlietfl

+0

var block = function(){ \t RandomBlock = new THREE.Object3D(); \t RandomBlock.add(shape); \t \t} \t \t setInterval(block,1000); – TeaAnyOne

+0

試試這個'var block = function(){var RandomBlock = new THREE.Object3D(); RandomBlock.add(形狀);返回RandomBlock;} setInterval(block,1000); ' – charlietfl

回答

0

這個問題實際上並不涉及Three.js;只是你沒有製造任何新的物體,你多次重複使用同一個物體。嘗試這樣的事情,而不是:

// this line stays outside the function 
var shapes = [LeftBlock, RightBlock, middleRightBlock, middleLeftBlock, middleBlock]; 
function enemyPaddleMovement() 
{ 
    var shape = shapes[Math.floor(Math.random()*shapes.length)]; 
    var randomBlock = new THREE.Object3D(); 
    randomBlock.add(shape); 
    scene.add(randomBlock); 
    randomBlock.translateX(-8); 
} 

注意,這裏已不再是randomBlock任何提到的功能外。這是因爲它是的一個對象,即函數的一個調用並且對它是唯一的。

我假設你想爲每個新對象選擇不同的形狀。如果你不這樣做,那麼只需將var shape = ...移回該功能外。

+0

感謝您的回覆,我嘗試了您的解決方案,但沒有運氣。這讓我想起了我的代碼結構,但我認爲問題可能在那裏。 – TeaAnyOne

0

您還需要存儲這個新的對象。我認爲你覆蓋了爲什麼重新創建的舊對象。 而不是RandomBlock你可以有BlockContainer這將是一個列表。