Browse Source

new example: textures_sprite_explosion

Ray 6 years ago
parent
commit
0c53360a3a

BIN
examples/textures/resources/boom.wav


BIN
examples/textures/resources/explosion.png


+ 120 - 0
examples/textures/textures_sprite_explosion.c

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