in this game i need physics for multiple objects for a group its fine to enable p2 bt whenever i tried to enable p2 for player with this line
game.physics.p2.enable(player, false);
my screen goes black
why is this happening ???
var game = new Phaser.Game(window.innerWidth * window.devicePixelRatio, window.innerHeight * window.devicePixelRatio, Phaser.AUTO, '', { preload: preload, create: create, update: update});
var player;
var world;
var blink;
var rocketangel;
var rocketdirection;
var rocketSpeedDelta;
var rocketradius;
var platforms;
var scoreText;
var playerangle;
var scaleRatio;
var score;
var asteroid;
scaleRatio = window.devicePixelRatio / 2;
//load images or files before game starts
function preload()
{
game.load.image('background', 'assets/game/background.png');
game.load.image('world', 'assets/game/world.png');
game.load.image('player', 'assets/game/player.png');
game.load.image('blink', 'assets/game/blink.png');
game.load.image('asteroid', 'assets/game/asteroid.png');
}
//create all the images ans things on the screen
function create()
{
score=0;
rocketangel = 0;
rocketdirection = 1;
rocketSpeedDelta = 0.002;
rocketradius = 170;
playerangle=60;
// A simple background for our game
game.add.sprite(0, 0, 'background');
// We're going to be using physics, so enable the Arcade Physics system
game.physics.startSystem(Phaser.Physics.P2JS);
// Turn on impact events for the world, without this we get no collision callbacks
game.physics.p2.setImpactEvents(true);
game.physics.p2.restitution = 0.8;
// Create our collision groups. One for the player, one for the pandas
var playerCollisionGroup = game.physics.p2.createCollisionGroup();
var asteroidCollisionGroup = game.physics.p2.createCollisionGroup();
world=game.add.sprite(game.world.centerX-10, game.world.centerY-20, 'world');
world.anchor.setTo(0.5, 0.5);
world.scale.setTo(scaleRatio, scaleRatio);
platforms = game.add.group();
platforms .enableBody = true;
platforms.physicsBodyType = Phaser.Physics.P2JS;
for (var i = 0; i < 10; i++) {
asteroid = platforms.create(game.world.height , game.world.width , 'asteroid');
asteroid.anchor.setTo(0.5, 0.5);
asteroid.scale.setTo(scaleRatio, scaleRatio);
game.physics.p2.enable(asteroid, false);
asteroid.body.setRectangle(40, 40);
// Tell the panda to use the pandaCollisionGroup
asteroid.body.setCollisionGroup(asteroidCollisionGroup);
// Pandas will collide against themselves and the player
// If you don't set this they'll not collide with anything.
// The first parameter is either an array or a single collision group.
asteroid.body.collides([asteroidCollisionGroup, playerCollisionGroup]);
}
//adding player
player = game.add.sprite(game.world.centerX, game.world.centerY, 'player');
player.anchor.setTo(0.5, 0.5);
player.scale.setTo(scaleRatio, scaleRatio);
//game.physics.p2.enable(player, false);
//player.body.setCircle(28);
// Set the ships collision group
//player.body.setCollisionGroup(playerCollisionGroup);
// The ship will collide with the pandas, and when it strikes one the hitPanda callback will fire, causing it to alpha out a bit
// When pandas collide with each other, nothing happens to them.
//player.body.collides( asteroidCollisionGroup, hitPanda, this);
// The platforms group contains the ground and the 2 ledges we can jump on
//asteroid.body.collideWorldBounds = true;
// The score
scoreText = game.add.text(16, 16, 'score: 0', { fontSize: '32px', fill: '#FFF' });
scoreText.scale.setTo(scaleRatio, scaleRatio);
cursors = game.input.keyboard.createCursorKeys();
}
function hitPanda(body1, body2) {
// body1 is the space ship (as it's the body that owns the callback)
// body2 is the body it impacted with, in this case our panda
// As body2 is a Phaser.Physics.P2.Body object, you access its own (the sprite) via the sprite property:
body2.sprite.alpha -= 0.1;
}
function update()
{
var playerangelchange;
platforms.forEachAlive(moveBullets,this);
platforms.forEach(function(asteroid) {
game.physics.arcade.collide(player,asteroid,deathHandler, null, this);
}, this);
//keypress
if (game.input.keyboard.isDown(Phaser.Keyboard.SPACEBAR))
{
//it will speed up the rocket
}
else if (game.input.keyboard.isDown(Phaser.Keyboard.ENTER))
{
//it will cause the blink
blink= game.add.sprite(player.x, player.y, 'blink');
blink.anchor.setTo(0.5, 0.5);
blink.scale.setTo(scaleRatio, scaleRatio);
game.add.tween(blink).to( { alpha: 0 }, 20, Phaser.Easing.Linear.None, true);
//blink.destroy(true);
}
else if (game.input.keyboard.isDown(Phaser.Keyboard.LEFT))
{
rocketdirection=-1; //change the direction
}
else if (game.input.keyboard.isDown(Phaser.Keyboard.RIGHT))
{
rocketdirection=1; //change the direction
}
//speed of current rocket movement
if (rocketdirection == 1)
{
rocketSpeedDelta = 1.14;
playerangelchange=1.1;
}
else if (rocketdirection == -1)
{
rocketSpeedDelta = -1.14;
playerangelchange=-1.1;
}
//for moving on a circular path
scoreText.text = 'Score: ' + score;
rocketangel += this.time.physicsElapsed * rocketSpeedDelta ;
player.x = game.world.centerX+ Math.cos(rocketangel) * rocketradius ;
player.y = game.world.centerY+Math.sin(rocketangel) * rocketradius ;
playerangle+=playerangelchange;
player.angle=playerangle;
}
function moveBullets (asteroid) {
setTimeout(accelerateToObject(asteroid,world,30),50000); //start accelerateToObject on every bullet
}
function accelerateToObject(obj1, obj2, speed) {
if (typeof speed === 'undefined') { speed = 60; }
var angle = Math.atan2(obj2.y - obj1.y, obj2.x - obj1.x);
//obj1.body.rotation = angle + game.math.degToRad(90); // correct angle of angry bullets (depends on the sprite used)
obj1.body.force.x = Math.cos(angle) * speed; // accelerateToObject
obj1.body.force.y = Math.sin(angle) * speed;
}
function deathHandler() {
this.game.state.start("gameover");
};
</script>
</body>
</html>