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:
Dinastía Harzu αγρ 2022-08-17 23:30:40 +02:00 committed by GitHub
parent d8ed3fb31e
commit 09e717f0f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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;
} }