1

我找到了一些garbageCollector 的代码示例,用于删除屏幕外的精灵,但它仅适用于旧版本的Phaser。
如何将此代码从 v1.1.5 重建到 v2.0.4?
错误代码:

Phaser v2.0.3 - WebGL - WebAudio http://phaser.io ♥♥♥ phaser.min.js:8
未捕获的类型错误:无法读取 null(索引)的属性“重置”:34
    add_cloud(索引):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

适用于旧版本(v1.1.5)的代码:

<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>
4

1 回答 1

1

错误代码告诉您“云”组中没有属性“alive”= false 的子项。

这就是为什么在这一行。

cloud_dummy.reset(800, 100);

你有一个'空'。

可能的原因是首先你的游戏性能比以前更差,所以这个例子中的云同时都在游戏画布内。

因为这条线在做什么

cloud_dummy.outOfBoundsKill = true;

是当项目离开游戏的可见部分时属性“alive”设置为false。

您可以尝试做的就是像这样在组中添加更多孩子

clouds.createMultiple( 50, 'mario_cloud');

但我记得我有一个类似的问题,我最初被迫将属性“活着”设置为真。

检查此链接以了解如何更改组的每个孩子..

最初创建组后,您可以执行此类操作

forEach(function(child){
child.alive = true;
}, this, false)
于 2014-05-02T20:36:49.203 回答