Browse Source

Create Example_-_PlayerJumping.c

Rudy Boudewijn van Etten 5 năm trước cách đây
mục cha
commit
f5c369fcb7
1 tập tin đã thay đổi với 88 bổ sung0 xóa
  1. 88 0
      Example_-_PlayerJumping.c

+ 88 - 0
Example_-_PlayerJumping.c

@@ -0,0 +1,88 @@
+#include "raylib.h"
+#include "math.h"
+
+
+// our player struct
+typedef struct player{
+    Vector2 position;
+    int width;
+    int height;
+    float jumpforce;
+    bool canjump;
+}player;
+
+int main(void)
+{
+    // Initialization
+    //--------------------------------------------------------------------------------------
+    const int screenWidth = 800;
+    const int screenHeight = 450;
+
+    InitWindow(screenWidth, screenHeight, "raylib example.");
+
+    const float ground = 200.0f;
+ 
+    player myplayer = {0};
+    myplayer.position = (Vector2){400,200};
+    myplayer.canjump = true;
+    myplayer.width = 32;
+    myplayer.height = 48;
+    myplayer.jumpforce = 0.0f;
+ 
+    SetTargetFPS(60);               // Set our game to run at 60 frames-per-second
+    //--------------------------------------------------------------------------------------
+
+    // Main game loop
+    while (!WindowShouldClose())    // Detect window close button or ESC key
+    {
+        // Update
+        //----------------------------------------------------------------------------------
+        
+        // If we are currently not jumping and if the player presses space.
+        if(IsKeyDown(KEY_SPACE) && myplayer.canjump){
+            myplayer.canjump = false; // We are now jumping.
+            myplayer.jumpforce = -4.0f; // How high we jump.
+        }
+        // If we are currently in a jump.
+        if(myplayer.canjump==false){
+            // Here we update the player y position.
+            // We want to move 1 pixel at a time. This for collision detection(Not going through tiles.)
+            for(int i=0;i<abs((int)myplayer.jumpforce);i++){
+                // If we are still jumping then update the position.
+                if(myplayer.canjump==false)myplayer.position.y += myplayer.jumpforce;
+                // if we touch the ground then reset out position and set canjump to true.
+                if(myplayer.position.y>ground){
+                    myplayer.position.y = ground;
+                    myplayer.canjump = true;
+                    break;
+                }                
+            }
+            // Here we add to the jumpforce. It will go from - to +.
+            myplayer.jumpforce += 0.2f;            
+        }
+        //----------------------------------------------------------------------------------
+        // Draw
+        //----------------------------------------------------------------------------------
+        BeginDrawing();
+
+            ClearBackground(RAYWHITE);
+            
+            DrawText("Press space to Jump.",200,240,40,DARKGRAY);
+            // Draw our player.
+            DrawRectangle(myplayer.position.x,myplayer.position.y,myplayer.width,myplayer.height,BLACK);    
+            DrawCircle(myplayer.position.x+4,myplayer.position.y+6,4,WHITE);    
+            DrawCircle(myplayer.position.x+myplayer.width-4,myplayer.position.y+6,4,WHITE);    
+
+        EndDrawing();
+        //----------------------------------------------------------------------------------
+    }
+
+    // De-Initialization
+    //--------------------------------------------------------------------------------------
+    CloseWindow();        // Close window and OpenGL context
+    //--------------------------------------------------------------------------------------
+
+    return 0;
+
+
+}