2014-05-02 46 views
1

我發現了一些用於刪除屏幕外精靈的garbageCollector的代碼示例,但它只能在老版本的Phaser中工作。
如何重建此代碼從v1.1.5到v2.0.4?
錯誤代碼:Phaser,刪除outOfBounds sprite

上舊版本(V1.1.5)工作
 
Phaser v2.0.3 - WebGL - WebAudio  http://phaser.io ♥♥♥ phaser.min.js:8 
Uncaught TypeError: Cannot read property 'reset' of null (index):34 
    add_cloud (index):34 
    b.Timer.update phaser.min.js:12 
    b.Time.update phaser.min.js:12 
    b.Game.update phaser.min.js:8 
    b.RequestAnimationFrame.updateRAF phaser.min.js:11 
    window.requestAnimationFrame.forceSetTimeOut._onLoop phaser.min.js:11 

代碼:

<script> 
    var game = new Phaser.Game(800, 480, Phaser.AUTO, '', { preload: preload, create: create, update: update }); 
    var clouds; 
    var cloud_dummy; 

    function preload() { 
     game.load.image('mario_cloud', 'mario_cloud.png'); 
    } 

    function create() { 
     clouds = game.add.group(); 
     clouds.enableBody = true; 
     clouds.createMultiple(6, 'mario_cloud'); 

     timer_shit = game.time.events.loop(1500, add_cloud, this); 
    } 
    function update() { 

    } 
    function add_cloud() { 
     cloud_dummy = clouds.getFirstDead(); 
     cloud_dummy.reset(800, 100); 
     cloud_dummy.body.velocity.x -= 150; 
     cloud_dummy.body.immovable = true; 
     cloud_dummy.outOfBoundsKill = true; 
    } 
</script> 
+0

現場演示做這樣的事情:HTTP://koryato.yomu .ru/tests/ – Rincew1nd

+0

我找到了一個解決方案。 只需添加字符串cloud_dummy.checkWorldBounds = true; – Rincew1nd

回答

0

什麼錯誤代碼是告訴你,有組中無子「雲」與屬性「alive」= false。

這就是爲什麼在這一行。

cloud_dummy.reset(800, 100); 

你有一個'null'。

原因可能是,首先你的遊戲的性能比以前更差,所以這個例子中的雲都在同一時間在遊戲畫布內。

因爲這行是做

cloud_dummy.outOfBoundsKill = true; 

是,當物品離開遊戲的可見部分的財產「活着」設置爲false。

什麼,你可以嘗試做的僅僅是該組中添加更多的孩子的像這樣

clouds.createMultiple(50, 'mario_cloud'); 

但我還記得我曾在那裏我被迫開始設置屬性「活着」真有類似的問題。

檢查這個link如何改變一組的每一個孩子..

,你可以在您最初創建組

forEach(function(child){ 
child.alive = true; 
}, this, false) 
+0

我試着玩參數。這沒有幫助。 – Rincew1nd

+0

我編輯了我的答案..希望能幫到 – delueg

+1

哦。謝謝你的想法。我發現這個計劃的一部分。 當我創建組的子項時,我沒有將參數checkWorldBounds設置爲true。所以程序不會檢查屏幕上的精靈位置。 和更新中的函數類似的東西。如果(!cloud.inWorld)cloud.alive = false; //'殺死'精靈那個outOfBounds },這個,假的) – Rincew1nd