I was wondering why there’s a difference between the setSize and setOffset methods of dynamic and static bodies.
I was using a dynamic body on a sprite and figure I could try a static body since my sprite will not be moving, just colliding/overlapping. An then I run into these differences, for example my sprite is a coin (sort of) my player would collect, Im reducing the size of the body because it feels better than leaving it at the default (taking the size of the gameobject). Everything works as expected if I use a dynamic body, the setSize() method will reduce the body size and set the body’s center to coincide with the gameobject center:
But when I make it a static body , and set the size of the body, it will not align with with the center of the gameobject even when leaving the offsetx and offsety parameter of the function to the default values. It will align to the top bottom of the gameobject’s frame.
I have to center the static body manually with something like:
// Within a Phaser.Physics.Arcade.Sprite
this.body.setSize(15, 15);
const dw = this.displayWidth / 2;
const dh = this.displayHeight / 2;
this.body.setOffset(dw - this.body.halfWidth, dh - this.body.halfHeight);
Any thoughts on why is this? Is it by design for some reason?
EDIT: I should add the setSize method has different signature in dynamic body than the static body.
// In Phaser.Physics.Arcade.StaticBody
setSize: function (width, height, offsetX, offsetY)// In Phaser.Physics.Arcade.Body
setSize: function (width, height, center)