I used this technique on my moving cloud platforms. In the map editor, I select the object and then add two custom properties: direction and distance.
Adding two custom properties in Tiled |
Once I saved my map, I could then use those properties when I set up my moving cloud platforms. In the create function, I make the platforms from the objects on the map. Look at the following code.
function create() { // ... other stuff ... platforms = this.add.group(); platforms.enableBody = true; map.createFromObjects('others', 6573, 'cloud-blue', 0, true, false, platforms); platforms.forEach(function(p) { this.physics.enable(p, Phaser.Physics.ARCADE); p.body.allowGravity = false; p.body.immovable = true; var t = this.add.tween(p.position); // use the distance and direction custom properties // to set up the Tween var dist = (p.distance ? Number(p.distance) : 128); if (p.direction == "left") { t.to( { x: p.position.x - dist }, 3000, Phaser.Easing.Linear.None, true, 0, -1, true); } else if (p.direction == "right") { t.to( { x: p.position.x + dist }, 3000, Phaser.Easing.Linear.None, true, 0, -1, true); } else if (p.direction == "up") { t.to( { y: p.position.y - dist }, 3000, Phaser.Easing.Linear.None, true, 0, -1, true); } else if (p.direction == "down") { t.to( { y: p.position.y + dist }, 3000, Phaser.Easing.Linear.None, true, 0, -1, true); } }, this); // ... other stuff ... }
As I iterate over them to perform their setup, I can read p.distance and p.direction in order to customize the movement Tween. I first check to see if distance is defined and use a default value if it is not. This way, the game doesn't fail if I forget to set the custom property. I then check the value of the direction field and set the Tween accordingly. If I forget to set direction on one of my objects, it just won't move because the to function will never be called on the Tween.
I like this method because it allows me to quickly and easily tweak the level in the map editor until I get the level design right. I don't have to go back to change any code when I want to move a platform's starting position, direction, or travel distance. I might add a third property set set the speed as well.
Remember, you can see the complete source code for the game on GitHub!
While you're here, why don't you take a few minutes and catch up on some comics that you may have missed - like today's! It deals with the first and best troubleshooting technique there is.
Amphibian.com comic for 5 February 2016 |
No comments:
Post a Comment