kleepklep Posted December 4, 2015 Share Posted December 4, 2015 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 More sharing options...
Jazz Posted December 6, 2015 Share Posted December 6, 2015 cant you do it the otherway around? sprite.body = body kleepklep 1 Link to comment Share on other sites More sharing options...
kleepklep Posted December 7, 2015 Author Share Posted December 7, 2015 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 More sharing options...
kleepklep Posted December 7, 2015 Author Share Posted December 7, 2015 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 More sharing options...
Recommended Posts