태그 보관물: game-loop

game-loop

이 코드에서 “델타”의 요점은 무엇입니까? 게임 개발에서 표준적인 것을 반영합니까? 따라 선박의

게임 프로그래밍에 대해서는 거의 알지 못하지만 더 배우고 싶습니다. 게임 의 코드를 이해하려고합니다 . 코드가 왜 “델타”를 Shipcontrols.js에 전달하는지 이해하려고합니다.이 컨트롤은 사용자 입력에 따라 선박의 방향을 변경합니다.

기본적으로 게임은 모든 루프 “델타”를 계산합니다 …

다음은 하나의 루프를 통해 델타를 사용하는 약식 버전의 스택입니다.

var delta = now - this.time;
this.time = now;
this.current.render.call(this.current, delta, this.renderer);  

여기에 단계 …

ctx.manager.add("game", scene, camera, function(delta, renderer)
{
if(delta > 25 && this.objects.lowFPS < 1000) this.objects.lowFPS++;
var dt = delta/16.6;
this.objects.components.shipControls.update(dt); 

여기에 단계 …

bkcore.hexgl.ShipControls.prototype.update = function(dt)
{
var pitchAng;
var yaw;
var roll;
if (undefined != hand){ 

이 같은 것들을 …

if(this.key.forward)
    this.speed += this.thrust * dt;
else

이…

if(this.key.right)
{
    angularAmount -= this.angularSpeed * dt;

델타의 요점은 무엇입니까? 무작위 요소를 도입하려고합니까? 이 게임의 코드는 매우 좋습니다. 왜이 사람이 델타를 사용 했습니까?



답변

이것이 “시간 델타”입니다. 이전 업데이트 이후로 경과 된 시간입니다. 애니메이션, 물리 등이 올바른 속도로 실행되고 있는지 확인해야합니다.

코드는 프레임 업데이트마다 한 번씩 실행됩니다. 그러나 프레임이 일정한 속도로 그려지는 것은 아닙니다. 한 프레임은 1/60 초가 걸리고 다음 프레임은 1/30 초가 걸릴 수 있습니다. 이것을 측정하고 설명하지 않으면 게임이 불안하고 다양한 상황에서 너무 빠르거나 느리게 실행됩니다.

시간 델타는 물리학에 종종 적용되는데, 이는 간단한 오일러 통합을 위해 방정식이 지정되는 방식입니다. 속도를 위치에 통합 x1 = x0 + v * (t1 - t0)하는 것은 코드처럼 단순화하는 것으로 정의됩니다 x += v * dt. 따라서 물리 업데이트를 평가하려면 시간 델타가 필요합니다.

타임 델타를 측정하고 적용하는 것은 매우 정상입니다.


답변

“델타”, “d”또는 “Δ”는 수학적 문맥에서 “차이”를 의미한다 . 비슷한 의미를 가진 두 숫자 사이에 차이가있을 때마다 그 차이를 “델타”또는 “d”라고 할 수 있습니다.

델타는 게임 개발에서 매우 일반적입니다. 예를 들어, 1 초 전에 문자의 X 좌표와 X 좌표의 차이를 “델타 x”라고하며 일반적으로 dx, delta_x또는 로 표시됩니다 d_x.

또한 코드에서와 같이 두 번의 차이를 갖는 것이 매우 일반적입니다.

var delta = now - this.time;

이 경우, 해당 변수에 저장된 어떤 시간의 차이 나타내는된다 this.time및 저장 시간 now.

델타는 일반적으로 시간의 변화를 나타내는 데 사용됩니다. 예를 들어, 플레이어의 X 좌표가 프레임마다 5 픽셀 씩 변경되어야한다는 것을 알고 있다면이 변경 사항을 델타로 저장할 수 있습니다.

var delta_x = 5

그런 다음 해당 델타를 사용하여 필요할 때마다 변경 사항을 적용하십시오.

player.x = player.x + delta_x

그러나 이것은 컨벤션 일뿐입니다. 아무도 변수의 이름을 “델타”또는 “d”로 지정하도록 강요하지 않지만, 그렇게하면 코드를 읽는 다른 사람이나 나중에 코드를 읽는 사람이 변수의 역할을 이해하는 데 도움이 될 수 있습니다.

프로그래밍에 널리 사용되는 다른 일반적인 그리스 문자는 다음과 같습니다.

엡실론 : 아주 작은 가치. 부동 소수점 또는 기타 변수를 정밀 문제와 비교할 때 일반적으로 사용됩니다.

const epsilon = 0.0001
...
if abs(some_float - other_float) < epsilon then
    -- close enough, let's say they're equal
end

Pi : 시상수

세타 : 각도 표현

Lambda : 익명 함수 또는 클로저 표현


답변

dt의 약자 delta time. 프레임 속도에 관계없이 게임이 같은 속도로 실행되도록 프레임 속도 계산에 사용됩니다.

에 대한 자세한 정보를 framerate independence찾을 수 있습니다 여기에 .


답변

dt (델타 시간)는 루프의 각주기 / 렌더 프레임 (또는 원하는 타임 스탬프) 사이의 시간입니다. 이 델타 시간으로 시간이 지남에 따라 특정 값을 늘릴 수 있습니다. 실제와 마찬가지로 시간이 지남에 따라 특정 물리 속성을 측정합니다.

게임을 초당 60 프레임으로 실행한다고 가정 해 봅시다. 플레이어가 초당 5 픽셀 씩 움직 이도록하려면

 5 * (1/60); //Assuming we have a stable delta time of 0.016
 // (1/60) = 0.016 || 0.016 * 5 =  0.083 --> moved per frame || 60 frames * 0.083 = 5

또는

 5 * (newTime - oldTime); //aka dt

캐릭터는 60 프레임 위로 5 픽셀 이동합니다. 사이클이 길수록 델타 시간이 길어집니다.

모든 프레임 속도 (1/30, 1/25 등)에 대해 결과는 동일합니다.


답변