Bengalaa Posted September 13, 2015 Share Posted September 13, 2015 Hi there. Not sure if this is an issue, but, just checked on the documentation, and it does not say anything about this behaviour... I have this code, a simple code that collides two sprites: var mainState = ( function () { var preload = function () { game.load.spritesheet('cota-cola', 'assets/cota-cola.png', 16, 33); game.load.spritesheet('carousel', 'assets/baggage-carousel.png', 50, 100); } var create = function () { var block; cotacola = game.add.sprite(150,0, 'cota-cola'); game.physics.arcade.enable(cotacola); carousel = game.add.group(); for (var i=0; i<5; i++) { block = game.add.sprite(100 + i*50, 100, 'carousel'); game.physics.arcade.enable(block); block.body.immovable = true; carousel.add(block); } cotacola.body.acceleration.y = 400; } var update = function () { console.log(cotacola.body.touching.down); game.physics.arcade.collide(cotacola, carousel); }; return { preload : preload, create : create, update : update };})();var game = new Phaser.Game(500, 300, Phaser.AUTO, 'game');game.state.add('main', mainState);game.state.start('main'); if i call any member of touching before the collide function, it will always be false... var update = function () { console.log(cotacola.body.touching.down); // will always print false game.physics.arcade.collide(cotacola, carousel); };but if I call it after the collide function, it will be accurate... var update = function () { game.physics.arcade.collide(cotacola, carousel); console.log(cotacola.body.touching.down); // this works fine };In the documentation http://phaser.io/docs/2.4.3/Phaser.Physics.Arcade.Body.html#touching it does not say anything about this behaviour. But I think that if this isn't an issue, a warning about this should be documented. Should I post this as a github issue? == EDIT == I just discovered that the behaviour I want, is actually the .wasTouchingvar update = function () { game.physics.arcade.collide(cotacola, carousel); console.log(cotacola.body.wasTouching.down); // this works fine};This works even if I put it before the collidevar update = function () { console.log(cotacola.body.wasTouching.down); // this also works fine game.physics.arcade.collide(cotacola, carousel);};It is kind of confusing, though... because, in a bigger context, i might want to see whether a sprite 'a' is touching something or not, from the update of another sprite 'b'... and if the collide function is coded on the sprite 'a', and the check is realized from the sprite 'b', then this behavior would be very confusing if you don't know which update function gets executed first. Link to comment Share on other sites More sharing options...
drhayes Posted September 13, 2015 Share Posted September 13, 2015 This doesn't sound like a bug to me, but maybe it's because of how my brain works. Until you ran the collision you didn't know if it was touching or not. And if you want a specific behavior upon collision you can set a collisionCallback in the collide method..? Would that work? Link to comment Share on other sites More sharing options...
Bengalaa Posted September 14, 2015 Author Share Posted September 14, 2015 i am not really sure if it would work now... back on time, it didn't work... what I was trying to do, was a little conveyor belt, that caused one thing 'A' to move into one direction when standing in it. 'A' can have several items inside it, so I need those items to move towards the conveyor belt as well, even if they are "floating" inside the thing 'A', so I needed to check whether or not the 'A' thing was touching the conveyor belt or not, inside the update function of the items, and the collide function of the thing 'A' was inside 'A's update function... That's why I need the touching method, because, i have tried to achieve something like this with a collision callback before, but it didn't work, because the collision only worked when the two objects where strongly colliding, and not when the two objects were only touching each other. The 'wasTouching' function was really useful, as I said at the end of the post... and then, I replaced this behavior for a "copy the velocity of the 'A' thing i am contained into' in the update function of the items, but as I still felt that the touching method wasn't responding accurately, I posted here the problem... Maybe there is a scenario where the touching function of some thing might be called from the update function of another thing... as we don't know (do we?) in which order the update functions get executed, this behavior would be kind of weird... why are wasTouching and touching different? shouldn't they be fused? or probably it should be documented as "returns false until the collide function is executed. If The collision caused it to touch something, it then returns true"... but i am not really sure about this... i just found it very confusing Link to comment Share on other sites More sharing options...
drhayes Posted September 14, 2015 Share Posted September 14, 2015 Is the "riding the conveyor belt" part working for piece "A"? Here's an example of that working pretty simply: http://jsfiddle.net/lewster32/4yh8ee1f/ Maybe you should add those things as children of "A" (using addChild) when they are contained inside it? That will make them move with "A" automatically. Link to comment Share on other sites More sharing options...
Bengalaa Posted September 14, 2015 Author Share Posted September 14, 2015 I can't add them as a children of 'A', because i need to apply one mask to 'A', and another different to the items... the item is not intended to be a dumb child of 'A' :S i already figured out how to make this conveyor belt i did it by adding it a velocity on the x axis whenever it is touching down the , i can't make it as platforms moving, because the conveyor belt is supposed to be static... but thanks for the fiddle! XD there: http://jsfiddle.net/6018w2an/ I added to it some conveyor belts to the platforms... I guess it is not a bug then... == EDIT ==the link was not pointing to the modified version o.O sorry, just learning to use the fiddle... Link to comment Share on other sites More sharing options...
Recommended Posts