Mike Posted October 11, 2013 Share Posted October 11, 2013 If I do this: function paddleUpdate() { if(isPaddleNerfed) { paddle.frameName = "paddle_small.png"; //48px width } else { paddle.frameName = "paddle_big.png"; //32px width } //Do I have to set the size manually like this paddle.body.setSize(paddle._cache.width, paddle._cache.height); } I ask because with: game.debug.renderSpriteBounds(paddle); I see the pink border and it's changing size (but only visually): collisions and also sprite.body.width still returns the old bigger size rather than the smaller/nerfed one... Also visually it's all ok... and also sprite._cache.width returns correct values. Is my aproach right or is there a better, shorter way ... i clearly understand that it can't and shouldn't be automatic because changing sprite/frames should change thecollision body region... but maybe it can be added as option ... or maybe shouldn't I'll be glad to here more opinions about this. EDIT: I just saw that there is: game.debug.renderSpriteBody(paddle); so the only question that leave is this the proper way of doing it since the sprite.body isn't updating on sprite size/frame change Link to comment Share on other sites More sharing options...
InsaneHero Posted October 11, 2013 Share Posted October 11, 2013 I believe you should never need to access the _cache contents (they'd be private if js supported it). This crosses over with a question I wanted to ask - is it possible to find the dimensions of a resource game.load.image('fred', 'grfx/fredPic.png') without creating an instance of it?If the answer to my question is yes, then the same approach would work for you to get the width of your paddle without accessing the _cache. To the other part of your question, I think your general idea - change the image, then reset the size... seems right to me. With 1.07 the built-in physics is becoming more optional so adding another parameter option or a new function call is probably going the wrong way. Link to comment Share on other sites More sharing options...
InsaneHero Posted October 11, 2013 Share Posted October 11, 2013 Well I found my answer...var fredImg = game.cache.getImage('fred');then I can access fredImg.width and fredImg.height You could use the same approach for your bat and avoid using _cache access. Link to comment Share on other sites More sharing options...
rich Posted October 12, 2013 Share Posted October 12, 2013 I purposely don't adjust the Sprite body size on a frame update. The reason is that you're supposed to set a body that fits the frames of an animation really, and if you want to totally change the body then you ought to update the body size at the same time. For example if a sprite was stood next to a wall and I adjusted the body because the animation frame changed, it could potentially penetrate the wall and would need to separate again, which just feels really messy to me. Better to set a body that will fit most common cases and adjust it manually if you drastically modify the sprite. Link to comment Share on other sites More sharing options...
JTronLabs Posted September 7, 2016 Share Posted September 7, 2016 If you want to set body size to an absolute value, you can follow the comment here Link to comment Share on other sites More sharing options...
Recommended Posts