P4nch0 Posted August 10, 2016 Share Posted August 10, 2016 Hi, I have next problem with collision.. I have a player: this.player = this.game.add.sprite(parseInt(playerx), parseInt(playery), 'player',5); this.game.physics.arcade.enable(this.player ); this.player.anchor.set(.5); this.player.scale.x=70/100; this.player.scale.y=65/100; this.player.body.setSize(25, 60, 0, 5); I have a group of animals: this.animal = this.game.add.physicsGroup(Phaser.Physics.ARCADE); this.animal.setAll('body.immovable', true); this.animal.setAll('body.bounce.x', 1); this.animal.setAll('body.bounce.y', 1); then i am creating animals: if (zwierzenazwa == "cow"){ this.cow =this.animal.create(zwierzex, zwierzey, 'cow'); this.cow.frame = zwierzefrlos; this.cow.id = iidzwierze; this.cow.name = zwierzenazwa; this.cow.datadodaniaanim = datadodaniaanim; this.cow.frameleft =5; this.cow.frameright = 13; this.cow.frameup =1; this.cow.framedown =9; this.cow.body.velocity.x = 0; this.cow.body.velocity.y = 0; //this.cow.body.immovable = true; //this.cow.anchor.set(0.45, 0.4); if(zwierzefrlos == 5 ){ this.cow.body.setSize(80, 38,20, 50); } else if(zwierzefrlos == 13) { this.cow.body.setSize(80, 38,30, 50); } else{ this.cow.body.setSize(38, 70,50, 40); } // this.cow.body.width = 48; //this.cow.body.height = 64; //this.game.debug.body(this.cow); this.cow.animations.add('cowleft',[7,6,5,4]); this.cow.animations.add('cowright', [12, 13, 14, 15]); this.cow.animations.add('cowdown', [8, 9, 10, 11]); this.cow.animations.add('cowup', [0, 1, 2, 3]); this.cow.animations.add('coweatleft', [20,20,20,20,20,20,20,20,21,22,22,23,22,22,23,22,22,23,22,22,23,22,21]); this.cow.animations.add('coweatdown', [24,24,24,24,24,24,24,24, 25, 26,26, 27,26,26,27,26,26,27,26,26,27,26,25,24]); this.cow.animations.add('coweatright', [28,28,28,28,28,28,28, 29, 30, 31,30,30,31,30,30,31,30,30,31,30,30,31,30,30,31,30,30,29,28]); this.cow.animations.add('coweatup', [16,16,16,16,16,16,16, 17, 18, 19,18,18,19,18,18,19,18,18,19,18,18,19,18,18,19,18,17]); //this.cow.scale.x=32; //this.cow.scale.y=32; this.animal.add(this.cow); //console.log(this.cow.id); } Then collision: this.game.physics.arcade.collide(this.player, this.animal, this.stopanimplayer, null, this); this.game.physics.arcade.collide(this.animal, this.animal, this.stopanimzwierz, null, this); And i have a problem because i must set immovable true to all animals to collide with player, but then there dont collide with each other in group.. Anyone can help to set it work? Link to comment Share on other sites More sharing options...
tips4design Posted August 10, 2016 Share Posted August 10, 2016 Quote i must set immovable true to all animals to collide with player Why? Link to comment Share on other sites More sharing options...
P4nch0 Posted August 10, 2016 Author Share Posted August 10, 2016 Sorry, i wrote it wrong. I must set immovable true to all animals to stop moving them when there are colliding with player. Link to comment Share on other sites More sharing options...
tips4design Posted August 11, 2016 Share Posted August 11, 2016 Well, you could set immovable to true before contact and set it back to false after contact. Or set immovable to false and set the velocities of animals to 0 after contact. P4nch0 1 Link to comment Share on other sites More sharing options...
P4nch0 Posted August 11, 2016 Author Share Posted August 11, 2016 Yeah, i done it, but i was thinking is maybe easier solutions, but thanks Link to comment Share on other sites More sharing options...
VitaZheltyakov Posted August 11, 2016 Share Posted August 11, 2016 player.body.mass = 1; animal.body.mass = 999; Link to comment Share on other sites More sharing options...
P4nch0 Posted August 12, 2016 Author Share Posted August 12, 2016 Ooo, it's a nice think. Then animal will be stronger than player yeah? I'll try it and back with feedback Link to comment Share on other sites More sharing options...
P4nch0 Posted August 12, 2016 Author Share Posted August 12, 2016 This method doeasnt work, player is still moving animal... only when i pass to true and false it working good. Link to comment Share on other sites More sharing options...
danneu Posted August 12, 2016 Share Posted August 12, 2016 I don't use Phaser, so I don't know if this is possible, but one hack idea is to try the 1 vs. 999 mass thing again (from above), but hook into some post-collision callback that always updates the animal velocity to what is was before the velocity exchange (which seem to happen in Phaser's separateX and separateY methods). For example, if you have a pre-collision callback opportunity, you can save `animal._prevVelocity` that is used after the animal velocity mutation to reset the animal velocity if it collides with a player. Yet animal↔animal collisions will still work. Also, anyone trying to make their moving platforms collide will each other will encounter this issue, so maybe "moving platform" search terms can help you find other people dealing with this. Link to comment Share on other sites More sharing options...
Recommended Posts