사용자 도구

사이트 도구


language:2d-game-physics:2d-game-physics-101

출처 : http://www.rodedev.com/tutorials/gamephysics/game_physics.swf

Velocity

// set initial angle and speed
var angle = 30;
var speed = 20;
// calcuate x, y scales (this will give the x/y equivalent of the angle)
var scale_x = cos(angle); // the x scale is the sin of the angle
var scale_y = sin(angle); // the y scale is the sin of the angle
var velocity_x = (speed * scale_x); // speed times scal_x is our x velocity
var velocity_y = (speed * scale_y); // speed times scale_y is our y velocity
// each frame call game loop to set object's position(move it along the predefined angle)
function GameLoop()
{
  movingObject.x = movingObject.x + velocity_x;
  movingObject.y = movingObject.y + velocity_y;
}//end game loop

Acceleration

// set initial angle and speed, acceleration
var angle = 30;
movingObject.speed = 20;
movingObject.acceleration = 2;
// calcuate x, y scales (this will give the x/y equivalent of the angle)
var scale_x = cos(angle); // the x scale is the sin of the angle
var scale_y = sin(angle); // the y scale is the sin of the angle
// each frame call game loop to set object's position(move it along the predefined angle)
function GameLoop()
{
  // continously add acceleration to speed
  movingObject.speed = movingObject.speed + movingObject.acceleration; 
 
  // speed times scale_x, scale_y is our x/y velocity
  movingObject.velocity_x = (movingObject.speed * scale_x);
  movingObject.velocity_y = (movingObject.speed * scale_y);
 
  movingObject.x = movingObject.x + movingObject.velocity_x;
  movingObject.y = movingObject.y + movingObject.velocity_y;
}//end game loop

Gravity

// set gravity constant
var gravity = 3;
var moving = true;
// each frame call game loop to set object's position
function GameLoop()
{
  if( moving == true ) {
    velocity_y = velocity_y - gravity;
    // if object has not hit the ground add y velocity(may be a negative velocity)
    if( movingObject.y - velocity_y > ground.y ) {
      movingObject.y = movingObject.y + velocity_y;
    }
    movingObject.x = movingObject.x + velocity_x;
  }
}

Throwing/Passing

오브젝트를 던지거나 패스하는 경우,

  • x 축 속도 : 이동할 거리 / 희망 도착 시간
    • x velocity is equal to the distance an object needs to travel to reach its destination divided by the amout of time you want the object to take to reach its destination.
  • x velocity = distance / time
    distance = x velocity * time
    time = distance / x velocity
  • y 축은 중력에 대해서 고려해줘야 한다.
  • y velocity = time * gravity * 0.5f

코드 예제

function GameLoop()
{
  if( thrown == true && moving == false ) {
    moving = true;
    // get distance between two guys
    var distance = guy2.x - guy1.x;
    // claculate x and y velocities
    velocity_y = time * gravity * 0.5;
    velocity_x = distance / time;
  }
  // ....
  if( moving == true ) {
    ball.x = ball.x + velocity_x;
    ball.y = ball.y + velocity_y;
    velocity_y = velocity_y - gravity;
  }
}

Distance & Timing

Frame Rate & Deviance

language/2d-game-physics/2d-game-physics-101.txt · 마지막으로 수정됨: 2024/04/23 22:44 저자 127.0.0.1