Jump to content

Box2D plugin: how can I attach sprite to existing body?


kleepklep
 Share

Recommended Posts

How can I attach a sprite to an existing body? I am loading in a world created using R.U.B.E., so I cannot simply create sprites and use game.physics.box2d.enable(sprite). I'm not seeing anything in any of the public or extra examples that come with the paid plugin. body.sprite = sprite doesn't work.

Link to comment
Share on other sites

Ha, I didn't think to try it the other way around! Thanks!

It turns out that you have to define both the body's sprite and the sprite's body to get this to work.

var bridgeSprite = game.add.sprite(0, 0, 'log');bridgeSprite.anchor.setTo(0.5, 0.5);bridgeBody.sprite = bridgeSprite;bridgeSprite.body = bridgeBody;
Note that if you do this and are using phaser-rube.js's removeBodyAndSprites function that the sprite would stick around. So you'd need to use body.sprite.destroy() to get rid of it.
Link to comment
Share on other sites

Here's the code I'm using to add images to my R.U.B.E scene in Phaser rather than in R.U.B.E, which worked better for my purposes. I right clicked in R.U.B.E.'s properties panel, added a new custom property called img (set to string) and I'm linking an image to a body if the property is defined. Alternately, you could use the body names as image names (they don't all have to be different) instead of a custom variable, but I was already using it for something else. If all of your images are defined outside of R.U.B.E. you won't need to call updateRubeSprites() in Phaser's update function. Hope someone finds this is helpful!

 

// add images to RUBE generated bodiesfunction addImages(){	for (var i = 0; i < levelScene.bodies.length; i++) {		var n = levelScene.bodies[i].name;		var b = levelScene.getBody(n); // levelScene.bodies[i] breaks		if (b.data.customProperties) {			var img = getProp(b, 'img');			if (img){				console.log(i, b.name, img);				var s = game.add.sprite(0, 0, img);				s.anchor.setTo(0.5, 0.5);				b.sprite = s;				s.body = b;			}		}	}}// get custom properties from RUBE generated bodiesfunction getProp(body, key) {	var arr = body.data.customProperties;	for (var i = 0; i < arr.length; i++) {		//console.log(arr[i]);		if (arr[i].name == key) {			//console.log(arr[i].int);			if (arr[i].int) {				return arr[i].int;			} else if (arr[i].string) {				return arr[i].string;			}		}	}}
Link to comment
Share on other sites

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...