문제
내가 만들려고 노력하는 게임이 총알이에 비행 할 수 있습니다.I would ike 들을 벡터와 방향과 크기를 그들에게로 이동합니다.난 그냥 확인을 구현하는 방법을 이?
감사
해결책
계산 해야하는 두 부분이 있습니다. 먼저 총 거리부터 시작합니다. 이것은 간단해야합니다.
total_distance = velocity * time
이것이 2D 게임이라고 가정하면 Sine & Cosine을 사용하여 총 거리를 X 및 Y 구성 요소 (주어진 각도)로 나누어야합니다.
distance_y = total_distance * sin(2 * pi * angle / 360)
distance_x = total_distance * cos(2 * pi * angle / 360)
마지막으로, 거리 x/y는 총알의 시작 위치에 따라 오프셋되어야합니다.
pos_x = distance_x + start_pos_x
pos_y = distance_y + start_pos_y
물론, 당신은이 모든 것을 멋진 수업으로, 필요에 따라 확장 및 연마 할 수 있습니다.
다른 팁
할 수 있습 총알 클래스를 포함하는 위치,방향으로는 벡터와 속도합니다.모든 시간을 단계 업데이트할 수 있습 총알의 위치는 다음과 같이
position += direction * veclocity;
여기에서는 방향으로 단위였다.
나는 다음과 같은 것으로 시작합니다.
struct Vector3f {
float x, y, z;
};
struct Bullet {
Vector3f position;
Vector3f velocity;
};
inline const Vector3f& Vector3f::operator+=(const Vector &other)
{
x += other.x;
y += other.y;
z += other.z;
return *this;
}
inline const Vector3f& Vector3f::operator*=(float v)
{
x *= v;
y *= v;
z *= v;
return *this;
}
그런 다음 총알 위치를 업데이트 할 수 있습니다 bullet.position += velocity
(벡터 첨가는 구성 요소를 별도로 추가하여 수행됩니다). 속도 벡터에는 방향과 속도 (= 벡터의 크기)가 모두 포함됩니다.
그리고 당신의 총알이 모든 프레임마다 느리게되면 다음과 같은 일을 할 수 있습니다. bullet.velocity *= 0.98
(여기서 0.98은 분수를 나타냅니다). 스칼라를 사용한 벡터 곱셈은 각 구성 요소에 스칼라에 곱하여 수행됩니다 ...
안부, 크리스토프
제휴하지 않습니다 StackOverflow