This post is in response to a Phaser Game Makers Group member’s question. The question arose from trying to convert a flash slot game into Phaser. Now most of us coming from flash remember that it is quite easy to make a button in flash with the IDE tool. By dragging images we were able to quickly define up, down and over states. Phaser also includes a way to define a button in this way.
game.add.button(x,y,imageKey,clickFunction,this,over_frame,normal_frame,down_frame)
In this case, what the programmer is trying to copy is a button that looks as if it is being pressed on its own, to try to draw the attention of the player into pressing it. So for this example, I will not be using a Phaser button, but instead a sprite. Now I want to stress at the start, that there are so many different ways to do this. This is simply the first one that came to mind.
I was sent two different images, but I have replaced them with my own, just for demonstration purposes, and combined them into 1 sprite sheet.
I will be using a function to make a copy of the buttons, so I can have 1 normal, and 1 animated button. You can see more about this technique in my Complex Objects Tutorial. I will also funnel all button events through 2 central functions. If this were a full game or app, I would simply make a switch statement inside the buttonPressed function.
var StateMain = { preload: function() { //load the sprite sheet game.load.spritesheet("buttons", "images/buttons.png", 144, 68, 2); }, create: function() { //just some debug text this.text1 = game.add.text(game.width / 2, 0, "0"); this.text1.anchor.set(0.5, 0); this.text1.fill = "#ffffff"; //create 2 buttons this.button1 = this.makeButton(game.width / 2, game.height * .25, 1); this.button2 = this.makeButton(game.width / 2, this.button1.y + this.button1.height * 1.1, 2); //add animation to the 2nd button //add more zeros to slow down the animation //use less zeros to speed up the animation this.button2.animations.add("auto", [0, 0, 0, 0, 0, 0, 1], 3, true); this.button2.animations.play("auto"); }, /** * Function to make a copy of the button template */ makeButton(xx, yy, index) { var button = game.add.sprite(xx, yy, "buttons"); button.index = index; button.anchor.set(0.5, 0.5); button.inputEnabled = true; button.events.onInputDown.add(this.buttonPressed, this); button.events.onInputUp.add(this.buttonReleased, this); return button; }, buttonPressed(target) { //show the down frame target.frame = 1; this.text1.text = target.index; }, buttonReleased(target) { //show the up frame target.frame = 0; this.text1.text = 0; }, update: function() {} }
And Here is the result