/******************************************************************************************* * * raylib [textures] example - sprite explosion * * 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) * * Copyright (c) 2019 Anata and Ramon Santamaria (@raysan5) * ********************************************************************************************/ #include "raylib.h" #define NUM_FRAMES 8 #define NUM_LINES 6 int main() { // Initialization //-------------------------------------------------------------------------------------- const int screenWidth = 800; const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [textures] example - sprite explosion"); InitAudioDevice(); // Load explosion sound Sound fxBoom = LoadSound("resources/boom.wav"); // Load explosion texture Texture2D explosion = LoadTexture("resources/explosion.png"); // Init variables for animation int frameWidth = explosion.width/NUM_FRAMES; // Sprite one frame rectangle width int frameHeight = explosion.height/NUM_LINES; // Sprite one frame rectangle height int currentFrame = 0; int currentLine = 0; Rectangle frameRec = { 0, 0, frameWidth, frameHeight }; Vector2 position = { 0, 0 }; bool active = false; int framesCounter = 0; SetTargetFPS(120); //-------------------------------------------------------------------------------------- // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- // Check for mouse button pressed and activate explosion (if not active) if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) && !active) { position = GetMousePosition(); active = true; position.x -= frameWidth/2; position.y -= frameHeight/2; PlaySound(fxBoom); } // Compute explosion animation frames if (active) { framesCounter++; if (framesCounter > 2) { currentFrame++; if (currentFrame >= NUM_FRAMES) { currentFrame = 0; currentLine++; if (currentLine >= NUM_LINES) { currentLine = 0; active = false; } } framesCounter = 0; } } frameRec.x = frameWidth*currentFrame; frameRec.y = frameHeight*currentLine; //---------------------------------------------------------------------------------- // Draw //---------------------------------------------------------------------------------- BeginDrawing(); ClearBackground(RAYWHITE); // Draw explosion required frame rectangle if (active) DrawTextureRec(explosion, frameRec, position, WHITE); EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- UnloadTexture(explosion); // Unload texture UnloadSound(fxBoom); // Unload sound CloseAudioDevice(); CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; }