ajlitton Posted April 6, 2016 Share Posted April 6, 2016 I am having a problem with killing sprites using kill(). When I do I get the following error in the console on the next frame: phaser.js:12282 Uncaught TypeError: Cannot read property 'neighbors' of undefined IslandManager.split @ phaser.js:12282 World.internalStep @ phaser.js:13100 World.step @ phaser.js:12891 Phaser.Physics.P2.update @ phaser.js:85503 Phaser.Physics.update @ phaser.js:81556 Phaser.Game.updateLogic @ phaser.js:34768 Phaser.Game.update @ phaser.js:34703 Phaser.RequestAnimationFrame.updateRAF @ phaser.js:59420 _onLoop @ phaser.js:59404 I think this may be something to do with the fact that the sprite is connected to another sprite (a sensor) using createLockConstraint. I've tried killing the other sprite before and after - same problem. Killing either sprite and leaving the other - same problem. Both sprites are in groups. The kill() is done first thing in Update(). Both sprites are using P2 physics, and I'm using Phaser 2.4.6. Any thoughts, or any troubleshooting steps I can take? I've been banging my head off this for a while! Thanks! Link to comment Share on other sites More sharing options...
VitaZheltyakov Posted April 7, 2016 Share Posted April 7, 2016 Need all code Link to comment Share on other sites More sharing options...
ajlitton Posted April 7, 2016 Author Share Posted April 7, 2016 This isn't all the code, but it creates the bug. The problem is the lock constraint. Is there no way to kill a sprite that is locked to another sprite? var game = new Phaser.Game(1024, 768, Phaser.AUTO, 'game', { preload: preload, create: create, update: update }); var clearBalls = false; function preload() { game.load.image('redBall', 'assets/redBall.png'); } function create() { game.physics.startSystem(Phaser.Physics.P2JS); balls = game.add.group(); balls.enableBody = true; balls.physicsBodyType = Phaser.Physics.P2JS; sensors = game.add.group(); sensors.enableBody = true; sensors.physicsBodyType = Phaser.Physics.P2JS; addBall(); } function update() { if (clearBalls == true) { balls.forEach(function(ball) { ball.kill(); }); clearBalls = false; } } function addBall() { var newBall = game.make.sprite(game.world.centerX, game.world.centerY, 'redBall'); game.add.sprite(newBall); balls.add(newBall); newBall.body.clearShapes(); newBall.body.addCircle(32); newBall.inputEnabled = true; newBall.events.onInputDown.add(destroyBalls, this); var sensor = game.make.sprite(game.world.centerX, game.world.centerY); game.add.sprite(sensor); sensors.add(sensor); sensor.body.clearShapes(); sensor.body.addCircle(33); sensor.body.data.shapes[0].sensor = true; game.physics.p2.createLockConstraint(newBall, sensor, [0, 0], 0); } function destroyBalls(ball) { clearBalls = true; } Link to comment Share on other sites More sharing options...
ajlitton Posted April 7, 2016 Author Share Posted April 7, 2016 I have solved it by removing the constraint with removeConstraint before killing the sprites. Mildly annoying, another array of things to store, but there you go. Link to comment Share on other sites More sharing options...
MichaelD Posted April 7, 2016 Share Posted April 7, 2016 Do you have a property neighbors that you are trying to read after the delete perhaps? Link to comment Share on other sites More sharing options...
ajlitton Posted April 7, 2016 Author Share Posted April 7, 2016 No, the neighbors property is in the Phaser code, not in anything I wrote. Link to comment Share on other sites More sharing options...
Recommended Posts