| @ -0,0 +1,120 @@ | |||
| /******************************************************************************************* | |||
| * | |||
| * 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/explosion2.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; | |||
| } | |||