"자전거"목록의 한 객체에 부울 isBoosting이 포함되어 있으면 drawLine()을 더 빨리 수행하려고합니다. 목록에 두 개의 자전거가 포함되어 있고 그 결과 자전거 중 하나만 isBoosting 할 때 두 가지 자전거의 속도가 빨라지는 것으로 나타납니다. 왜 누군가는 아이디어를 가지고 있습니까? 객체가 isBoosting에 대해 true 값을 포함하지 않으면 스레드가 "이동"하지 않아야합니까?다른 Thread.sleep() 기간을 사용하여 플레이어 속도를 제어 하시겠습니까?
foreach (LightBike b in bikes) //draw bikes
{
if (b.isBoosting && b.boostCounter > 0) //player is boosting
{
Thread.Sleep(GAME_SPEED - 5);
b.boostCounter--;
if (b.boostCounter == 0)
{
b.isBoosting = false;
b.boostCounter = 20;
}
}
else
{
Thread.Sleep(GAME_SPEED);
}
canvas.DrawLine(new Pen(b.color, BIKE_SIZE) { EndCap = System.Drawing.Drawing2D.LineCap.Square }, b.location, b.getNextLocation());
}
*이 접근법은 안정적으로 작동하지 않습니다. * 지연을 제어하지 마십시오. 근사치 일 뿐이며 다른 요인에 의해 영향을받을 수 있으며 모든 것에 영향을 줄 수 있습니다. * 각 시간 delta * (정확히 일정하지 않고 시간 델타가 올바르게 처리되면 변경 될 수 있음)마다 이동 한 양을 제어하십시오. 이 "시간 델타 이동"의 간단한 형태는 [좋은] 기본 게임 튜토리얼에서 다룹니다. –
또한 업데이트 논리는 그리기 논리와 분리되어 있어야합니다. 그리기는 세계의 개체를 시각적으로 표현한 것으로 대부분의 경우 독립적이어야합니다. –