我找到了一些垃圾收集器的代码示例,用于删除屏幕外的 Sprite ,但它仅适用于旧版本的 Phaser。
如何将此代码从 v1.1.5 重建到 v2.0.4?
错误代码:
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
Code that work on older version (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>
最佳答案
错误代码告诉您“clouds”组中没有属性为“alive”= false 的子项。
这就是这一行的原因。
cloud_dummy.reset(800, 100);
你有一个“null”。
原因可能是首先你的游戏性能比以前更差了,所以这个例子中的云同时出现在游戏 Canvas 内。
因为这条线正在做什么
cloud_dummy.outOfBoundsKill = true;
当元素离开游戏的可见部分时,属性“alive”被设置为 false。
您可以尝试做的就是像这样在组中添加更多 child
clouds.createMultiple( 50, 'mario_cloud');
但我记得我有一个类似的问题,我被迫最初将属性“alive”设置为 true。
检查这个link了解如何更改组中的每个子项..
您可以在最初创建组后执行类似的操作
forEach(function(child){
child.alive = true;
}, this, false)
关于javascript - Phaser,删除越界 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23436124/