소스 검색

Update physac examples with fixed timestep method

pull/129/head
victorfisac 8 년 전
부모
커밋
4c43a40788
2개의 변경된 파일59개의 추가작업 그리고 3개의 파일을 삭제
  1. +30
    -2
      examples/physics_basic_rigidbody.c
  2. +29
    -1
      examples/physics_forces.c

+ 30
- 2
examples/physics_basic_rigidbody.c 파일 보기

@ -13,10 +13,13 @@
#define PHYSAC_IMPLEMENTATION
#include "physac.h"
#include <pthread.h>
#define MOVE_VELOCITY 5
#define JUMP_VELOCITY 30
void* PhysicsThread(void *arg);
int main()
{
// Initialization
@ -53,6 +56,10 @@ int main()
// Create pplatform physic object
PhysicBody platform = CreatePhysicBody((Vector2){ screenWidth/2, screenHeight*0.7f }, 0.0f, (Vector2){ screenWidth*0.25f, 20 });
// Create physics thread
pthread_t tid;
pthread_create(&tid, NULL, &PhysicsThread, NULL);
SetTargetFPS(60);
//--------------------------------------------------------------------------------------
@ -61,10 +68,9 @@ int main()
{
// Update
//----------------------------------------------------------------------------------
UpdatePhysics(); // Update all created physic objects
// Check rectangle movement inputs
if (IsKeyDown('W') && rectangle->rigidbody.isGrounded) rectangle->rigidbody.velocity.y = JUMP_VELOCITY;
if (IsKeyPressed('W')) rectangle->rigidbody.velocity.y = JUMP_VELOCITY;
if (IsKeyDown('A')) rectangle->rigidbody.velocity.x = -MOVE_VELOCITY;
else if (IsKeyDown('D')) rectangle->rigidbody.velocity.x = MOVE_VELOCITY;
@ -117,10 +123,32 @@ int main()
// De-Initialization
//--------------------------------------------------------------------------------------
pthread_cancel(tid); // Destroy physics thread
ClosePhysics(); // Unitialize physics (including all loaded objects)
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}
void* PhysicsThread(void *arg)
{
// Initialize time variables
double currentTime = GetTime();
double previousTime = currentTime;
// Physics update loop
while (!WindowShouldClose())
{
currentTime = GetTime();
double deltaTime = (double)(currentTime - previousTime);
previousTime = currentTime;
// Delta time value needs to be inverse multiplied by physics time step value (1/target fps)
UpdatePhysics(deltaTime/PHYSICS_TIMESTEP);
}
return NULL;
}

+ 29
- 1
examples/physics_forces.c 파일 보기

@ -13,12 +13,15 @@
#define PHYSAC_IMPLEMENTATION
#include "physac.h"
#include <pthread.h>
#define FORCE_AMOUNT 5.0f
#define FORCE_RADIUS 150
#define LINE_LENGTH 75
#define TRIANGLE_LENGTH 12
void* PhysicsThread(void *arg);
int main()
{
// Initialization
@ -61,6 +64,10 @@ int main()
PhysicBody topWall = CreatePhysicBody((Vector2){ screenWidth/2, -25 }, 0.0f, (Vector2){ screenWidth, 50 });
PhysicBody bottomWall = CreatePhysicBody((Vector2){ screenWidth/2, screenHeight + 25 }, 0.0f, (Vector2){ screenWidth, 50 });
// Create physics thread
pthread_t tid;
pthread_create(&tid, NULL, &PhysicsThread, NULL);
SetTargetFPS(60);
//--------------------------------------------------------------------------------------
@ -69,7 +76,6 @@ int main()
{
// Update
//----------------------------------------------------------------------------------
UpdatePhysics(); // Update all created physic objects
// Update mouse position value
mousePosition = GetMousePosition();
@ -174,10 +180,32 @@ int main()
// De-Initialization
//--------------------------------------------------------------------------------------
pthread_cancel(tid); // Destroy physics thread
ClosePhysics(); // Unitialize physics module
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}
void* PhysicsThread(void *arg)
{
// Initialize time variables
double currentTime = GetTime();
double previousTime = currentTime;
// Physics update loop
while (!WindowShouldClose())
{
currentTime = GetTime();
double deltaTime = (double)(currentTime - previousTime);
previousTime = currentTime;
// Delta time value needs to be inverse multiplied by physics time step value (1/target fps)
UpdatePhysics(deltaTime/PHYSICS_TIMESTEP);
}
return NULL;
}

불러오는 중...
취소
저장