Abdullah Al Rifat Posted December 24, 2016 Share Posted December 24, 2016 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> Link to comment Share on other sites More sharing options...
Recommended Posts