From ada76157ff06f044013c3fba033609c5988ecf5c Mon Sep 17 00:00:00 2001 From: Alok Date: Fri, 24 Apr 2026 21:23:09 +0530 Subject: [PATCH] Add moving circle example demonstrating basic animation --- examples/shapes/shapes_moving_circle.c | 70 +++++++++++++++++++++++ examples/shapes/shapes_moving_circle.png | Bin 0 -> 14687 bytes 2 files changed, 70 insertions(+) create mode 100644 examples/shapes/shapes_moving_circle.c create mode 100644 examples/shapes/shapes_moving_circle.png diff --git a/examples/shapes/shapes_moving_circle.c b/examples/shapes/shapes_moving_circle.c new file mode 100644 index 000000000..6dc75f9d1 --- /dev/null +++ b/examples/shapes/shapes_moving_circle.c @@ -0,0 +1,70 @@ +/******************************************************************************************* +* +* raylib [shapes] example - moving circle +* +* Example complexity rating: [★☆☆☆] 1/4 +* +* This example demonstrates basic animation by moving a circle horizontally. +* +********************************************************************************************/ + +#include "raylib.h" + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [shapes] example - moving circle"); + + float x = 100.0f; + float speed = 200.0f; + + SetTargetFPS(60); + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) + { + // Update + //---------------------------------------------------------------------------------- + // Move circle based on frame time (smooth movement) + x += speed * GetFrameTime(); + + if (x > screenWidth - 50 || x < 50) speed *= -1; + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + // Title + DrawText("Moving Circle Example", 10, 10, 20, DARKGRAY); + + // Subtitle + DrawText("Circle moves horizontally using frame time", 10, 40, 10, GRAY); + + // FPS (separate, non-overlapping) + DrawFPS(10, 70); + + // Circle (main visual focus) + DrawCircle((int)x, screenHeight/2, 50, BLUE); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + CloseWindow(); + //-------------------------------------------------------------------------------------- + + return 0; +} diff --git a/examples/shapes/shapes_moving_circle.png b/examples/shapes/shapes_moving_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..f169bdb1568222bed9115d6366d3decdce081612 GIT binary patch literal 14687 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