Changed the button logic
Before, you could hold mouse left button, drag it unto the button and change the sprite to "pressed" and, when released, the sfx would play. Now, you actually have to press the button in order to change the sprite to "pressed" and play the sfx. It's a really minor change and maybe not welcomed, I only wanted better button logic on a program specifically made to show how to program button interaction.
This commit is contained in:
parent
d8ed3fb31e
commit
09e717f0f3
|
|
@ -1,102 +1,109 @@
|
||||||
/*******************************************************************************************
|
/*******************************************************************************************
|
||||||
*
|
*
|
||||||
* raylib [textures] example - sprite button
|
* raylib [textures] example - sprite button
|
||||||
*
|
*
|
||||||
* Example originally created with raylib 2.5, last time updated with raylib 2.5
|
* This example has been created using raylib 2.5 (www.raylib.com)
|
||||||
*
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
|
*
|
||||||
* BSD-like license that allows static linking with closed source software
|
* Copyright (c) 2019 Ramon Santamaria (@raysan5)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2019-2022 Ramon Santamaria (@raysan5)
|
********************************************************************************************/
|
||||||
*
|
|
||||||
********************************************************************************************/
|
#include "raylib.h"
|
||||||
|
|
||||||
#include "raylib.h"
|
#define NUM_FRAMES 3 // Number of frames (rectangles) for the button sprite texture
|
||||||
|
|
||||||
#define NUM_FRAMES 3 // Number of frames (rectangles) for the button sprite texture
|
int main(void)
|
||||||
|
{
|
||||||
//------------------------------------------------------------------------------------
|
// Initialization
|
||||||
// Program main entry point
|
//--------------------------------------------------------------------------------------
|
||||||
//------------------------------------------------------------------------------------
|
const int screenWidth = 800;
|
||||||
int main(void)
|
const int screenHeight = 450;
|
||||||
{
|
|
||||||
// Initialization
|
InitWindow(screenWidth, screenHeight, "raylib [textures] example - sprite button");
|
||||||
//--------------------------------------------------------------------------------------
|
|
||||||
const int screenWidth = 800;
|
InitAudioDevice(); // Initialize audio device
|
||||||
const int screenHeight = 450;
|
|
||||||
|
Sound fxButton = LoadSound("resources/buttonfx.wav"); // Load button sound
|
||||||
InitWindow(screenWidth, screenHeight, "raylib [textures] example - sprite button");
|
Texture2D button = LoadTexture("resources/button.png"); // Load button texture
|
||||||
|
|
||||||
InitAudioDevice(); // Initialize audio device
|
// Define frame rectangle for drawing
|
||||||
|
float frameHeight = (float)button.height/NUM_FRAMES;
|
||||||
Sound fxButton = LoadSound("resources/buttonfx.wav"); // Load button sound
|
Rectangle sourceRec = { 0, 0, (float)button.width, frameHeight };
|
||||||
Texture2D button = LoadTexture("resources/button.png"); // Load button texture
|
|
||||||
|
// Define button bounds on screen
|
||||||
// Define frame rectangle for drawing
|
Rectangle btnBounds = { screenWidth/2.0f - button.width/2.0f, screenHeight/2.0f - button.height/NUM_FRAMES/2.0f, (float)button.width, frameHeight };
|
||||||
float frameHeight = (float)button.height/NUM_FRAMES;
|
|
||||||
Rectangle sourceRec = { 0, 0, (float)button.width, frameHeight };
|
int btnState = 0; // Button state: 0-NORMAL, 1-MOUSE_HOVER, 2-PRESSED
|
||||||
|
bool btnAction = false; // Button action should be activated
|
||||||
// Define button bounds on screen
|
bool btnPressed = false; // Check if button has been actually pressed
|
||||||
Rectangle btnBounds = { screenWidth/2.0f - button.width/2.0f, screenHeight/2.0f - button.height/NUM_FRAMES/2.0f, (float)button.width, frameHeight };
|
|
||||||
|
Vector2 mousePoint = { 0.0f, 0.0f };
|
||||||
int btnState = 0; // Button state: 0-NORMAL, 1-MOUSE_HOVER, 2-PRESSED
|
|
||||||
bool btnAction = false; // Button action should be activated
|
SetTargetFPS(60);
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
Vector2 mousePoint = { 0.0f, 0.0f };
|
|
||||||
|
// Main game loop
|
||||||
SetTargetFPS(60);
|
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||||
//--------------------------------------------------------------------------------------
|
{
|
||||||
|
// Update
|
||||||
// Main game loop
|
//----------------------------------------------------------------------------------
|
||||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
mousePoint = GetMousePosition();
|
||||||
{
|
btnAction = false;
|
||||||
// Update
|
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && CheckCollisionPointRec(mousePoint, btnBounds)) btnPressed = true;
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
mousePoint = GetMousePosition();
|
// Check button state
|
||||||
btnAction = false;
|
if (CheckCollisionPointRec(mousePoint, btnBounds))
|
||||||
|
{
|
||||||
// Check button state
|
if (btnPressed && IsMouseButtonDown(MOUSE_BUTTON_LEFT)) btnState = 2;
|
||||||
if (CheckCollisionPointRec(mousePoint, btnBounds))
|
else btnState = 1;
|
||||||
{
|
|
||||||
if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) btnState = 2;
|
if (btnPressed && IsMouseButtonReleased(MOUSE_BUTTON_LEFT))
|
||||||
else btnState = 1;
|
{
|
||||||
|
btnAction = true;
|
||||||
if (IsMouseButtonReleased(MOUSE_BUTTON_LEFT)) btnAction = true;
|
btnPressed = false;
|
||||||
}
|
}
|
||||||
else btnState = 0;
|
}
|
||||||
|
else if (btnPressed)
|
||||||
if (btnAction)
|
{
|
||||||
{
|
btnAction = true;
|
||||||
PlaySound(fxButton);
|
btnState = 0;
|
||||||
|
btnPressed = false;
|
||||||
// TODO: Any desired action
|
}
|
||||||
}
|
else btnState = 0;
|
||||||
|
|
||||||
// Calculate button frame rectangle to draw depending on button state
|
if (btnAction)
|
||||||
sourceRec.y = btnState*frameHeight;
|
{
|
||||||
//----------------------------------------------------------------------------------
|
PlaySound(fxButton);
|
||||||
|
|
||||||
// Draw
|
// TODO: Any desired action
|
||||||
//----------------------------------------------------------------------------------
|
}
|
||||||
BeginDrawing();
|
|
||||||
|
// Calculate button frame rectangle to draw depending on button state
|
||||||
ClearBackground(RAYWHITE);
|
sourceRec.y = btnState*frameHeight;
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
DrawTextureRec(button, sourceRec, (Vector2){ btnBounds.x, btnBounds.y }, WHITE); // Draw button frame
|
|
||||||
|
// Draw
|
||||||
EndDrawing();
|
//----------------------------------------------------------------------------------
|
||||||
//----------------------------------------------------------------------------------
|
BeginDrawing();
|
||||||
}
|
|
||||||
|
ClearBackground(RAYWHITE);
|
||||||
// De-Initialization
|
|
||||||
//--------------------------------------------------------------------------------------
|
DrawTextureRec(button, sourceRec, (Vector2){ btnBounds.x, btnBounds.y }, WHITE); // Draw button frame
|
||||||
UnloadTexture(button); // Unload button texture
|
|
||||||
UnloadSound(fxButton); // Unload sound
|
EndDrawing();
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
CloseAudioDevice(); // Close audio device
|
}
|
||||||
|
|
||||||
CloseWindow(); // Close window and OpenGL context
|
// De-Initialization
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
UnloadTexture(button); // Unload button texture
|
||||||
return 0;
|
UnloadSound(fxButton); // Unload sound
|
||||||
|
|
||||||
|
CloseAudioDevice(); // Close audio device
|
||||||
|
|
||||||
|
CloseWindow(); // Close window and OpenGL context
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user