Retaliator Posted August 4, 2016 Share Posted August 4, 2016 Hey, I'm developing a Phaser game and been stuck for way too long in this error in my code. Basically I create the player object and everything else from classes to groups and add them to collision groups. Finally I make them collide with body.collides where the callback should happen. I've tried firing the callbacks with just the function name, this.function, function(this.meteors) but nothing seems to work so that the callback gets fired only on contact. Either it fires with every create or never. Here's the main game.js: BasicGame.Game = function (game) { // When a State is added to Phaser it automatically has the following properties set on it, even if they already exist: var playerSpawnX = 300; var playerSpawnY = 300; this.game = game; // a reference to the currently running game (Phaser.Game) this.player = new BasicGame.Player(this.game,playerSpawnX,playerSpawnY); this.gem = new BasicGame.Gem(this.game); this.meteor = new BasicGame.Meteor(this.game); this.hud = new BasicGame.Hud(this.game,this.player); }; BasicGame.Game.prototype = { create: function () { this.timer; this.timer2; this.total = 0; //this.score = 0; var highscore = localStorage.getItem("highscore"); this.game.physics.startSystem(Phaser.Physics.P2JS); this.game.physics.p2.setImpactEvents(true); this.ships = this.add.group(); this.ships.enableBody = true; this.ships.physicsBodyType = Phaser.Physics.P2JS; this.ground = this.game.add.tileSprite(0, 2205, 600, 220, 'layers', 'maa'); this.ship = this.ships.create(this.player.create()); this.game.physics.p2.enable(this.ship, false); this.game.world.setBounds(0, 0, 600, 2400); //this.physics.startSystem(Phaser.Physics.P2JS); //////////////////////////////GLOBAL PHYSICS////////////////////////////////// this.game.physics.p2.setBoundsToWorld(true, false, false, true, false); //GLOBAL PHYSICS GRAVITY this.physics.p2.gravity.y = 250; // Create our collision groups. this.shipCollisionGroup = this.game.physics.p2.createCollisionGroup(); this.meteorsCollisionGroup = this.game.physics.p2.createCollisionGroup(); this.gemsCollisionGroup = this.game.physics.p2.createCollisionGroup(); this.ship.body.setCollisionGroup(this.shipCollisionGroup); // This part is vital if you want the objects with their own collision groups to still collide with the world bounds // (which we do) - what this does is adjust the bounds to use its own collision group. this.shipCollisionGroup.collideWorldBounds = true; this.meteorsCollisionGroup.collideWorldBounds = false; //this.gemsCollisionGroup.collideWorldBounds = false; //to make ship hit the sides of screen this.game.physics.p2.updateBoundsCollisionGroup(); //gems group this.gems = this.game.add.group(); this.gems.enableBody = true; this.gems.physicsBodyType = Phaser.Physics.P2JS; //meteors group this.meteors = this.game.add.group(); this.meteors.enableBody = true; this.meteors.physicsBodyType = Phaser.Physics.P2JS; this.meteors.gravity = 0; this.timer = this.game.time.create(false); // Set a TimerEvent to occur for meteors and gems this.timer.loop(3000, updateScoreCounter, this); this.timer.loop(1000, spawnGems, this); this.timer.loop(7000, spawnaaMeteoriitteja, this); this.timer.loop(5000, spawnaaPaikallisiaMeteoriitteja, this); this.timer.start(); function updateScoreCounter() { this.total++; this.player.score = this.player.score + this.total * 10; console.log(this.player.score); } function spawnaaMeteoriitteja() { for (var i = 0; i < 1; i++) { var meteor = this.meteors.create(this.meteor.create()); this.game.physics.p2.enable(meteor); meteor.body.setCollisionGroup(this.meteorsCollisionGroup); meteor.body.collides([this.meteorsCollisionGroup,this.gemsCollisionGroup, this.shipCollisionGroup]); meteor.body.collideWorldBounds=false; } } function spawnaaPaikallisiaMeteoriitteja() { for (var i = 0; i < 1; i++) { var static = "true"; var meteor = this.meteors.create(this.meteor.create(this.game.world.randomX, this.game.world.randomY, static)); this.game.physics.p2.enable(meteor); meteor.body.setCollisionGroup(this.meteorsCollisionGroup); meteor.body.collides([this.meteorsCollisionGroup, this.gemsCollisionGroup, this.shipCollisionGroup]); meteor.body.collideWorldBounds=false; } } function spawnGems() { for (var i = 0; i < 2; i++) { var static = "false"; var gem = this.gems.create(this.gem.create(this.game.world.randomX, this.game.world.randomY, static)); this.game.physics.p2.enable(gem); gem.body.setCollisionGroup(this.gemsCollisionGroup); gem.body.collides([this.gemsCollisionGroup, this.shipCollisionGroup, this.meteorsCollisionGroup ]); gem.body.collideWorldBounds=false; } } this.hud.create(); this.ship.body.collides([this.shipCollisionGroup,this.meteorsCollisionGroup], hitMeteor, this); this.ship.body.collides([this.shipCollisionGroup,this.gemsCollisionGroup], hitGem, this); function hitMeteor(body1, body2) { //console.log(body1); console.log("hit meteor"); } function hitGem(body1, body2) { console.log("hit gem"); } }, update: function () { this.player.update(); }, render: function() { this.hud.render(); this.player.render(); }, quitGame: function (pointer) { } }; Link to comment Share on other sites More sharing options...
Recommended Posts