Pau Posted March 14, 2018 Share Posted March 14, 2018 Hello! How do you check if an object is out of the world bound using Phaser3? I am looking for this Phaser3 equivalent code: block.checkWorldBounds = true; block.events.onOutOfBounds.add(lose, this); block is an image: block = this.physics.add.image(dropPos, 100, 'c'+aleatorio).setInteractive(); block.setVelocity(0, 200); Thanks! Link to comment Share on other sites More sharing options...
samme Posted March 14, 2018 Share Posted March 14, 2018 Link to comment Share on other sites More sharing options...
Pau Posted March 16, 2018 Author Share Posted March 16, 2018 Thanks for you help, but i still doing something wrong I am creating multiple blocks each certain amount of time. That is the difference with your code. I have tryied to create a group of elements too, and still doesen't work. The alert message appears at the beggining of the game or after a time, but never at the right moment. Can please help me? Thanks var timedEvent=0; var group; var config = { type: Phaser.AUTO, width: 800, height: 600, scene: { preload: preload, create: create }, physics: { default: 'arcade', arcade: { debug: true, gravity: { y: 200 } } } }; var game = new Phaser.Game(config); var juego; function preload(){ // this.load.crossOrigin = "anonymous"; // this.load.setBaseURL("https://pablomonteserin.com/apuntes/web/js/canvas/phaser/ex/fall-down-game/"); this.load.image('sky', 'img/background.png'); this.load.image('c0', 'img/c0.png'); this.load.image('c1', 'img/c1.png'); this.load.image('c2', 'img/c2.png'); this.load.image('c3', 'img/c3.png'); } function create(){ this.add.sprite(0, 0, 'sky'); this.physics.world.setBoundsCollision(true, true, true, false); timedEvent = this.time.delayedCall(0, onEvent, [], this); this.physics.world.on("worldbounds", function (body) { alert("great") console.log("worldbounds", body); }); } function onEvent(){ candyTimer = 0; var aleatorio = Math.floor(Math.random()*3); var dropPos = Math.floor(Math.random()*590); var block = this.physics.add.image(dropPos, 100, 'c'+aleatorio).setInteractive(); block.setVelocity(0, 200); block.on('pointerdown', clickCandy); block.setCollideWorldBounds(true); block.body.onWorldBounds = true; block.setBounce(0.1, 0.1); timedEvent = this.time.delayedCall(1000, onEvent, [], this); } function clickCandy(){ this.destroy(); } envio.zip Link to comment Share on other sites More sharing options...
misfit Posted March 16, 2018 Share Posted March 16, 2018 Hi, I had some trouble with checkworldbounds as well. I would suggest that you just create a new gameObject collider outside the camera bounds ( or group of them if you need to check all bounds) and check collision with it. Hope it will help. this.bottom_collider = new Phaser.Physics.Arcade.Sprite(this,0,this.cameras.main.height,).setOrigin(0, 0); //no idea if it is necessary this.bottom_collider.width = this.cameras.main.width; //add to scene this.add.existing(this.bottom_collider); //add to physics this.physics.add.existing(this.bottom_collider,true); //set the physics body width/height to accommodate your desired size this.bottom_collider.body.width = this.cameras.main.width; //after that just add overlap this.physics.add.overlap(elementToCheck, this.bottom_collider, callbackFunction,null); Link to comment Share on other sites More sharing options...
Pau Posted March 17, 2018 Author Share Posted March 17, 2018 Ah! I found it! I change this line: this.physics.world.setBoundsCollision(true, true, true, false); for this: this.physics.world.setBoundsCollision(true, true, true, true); Link to comment Share on other sites More sharing options...
Recommended Posts