RogueLike 게임에서 다른 속도의 액션을 관리하는 방법은 무엇입니까?
내 말은 턴 기반 게임에는 액션과 다른 특성에 따라 다른 "속도"로 행동하는 액터가있을 수 있다는 것입니다. 액터는 속도가 빠르거나 그렇지 않은 경우 다른 액터보다 더 많은 액션 / 턴을 효과적으로 수행합니다.
액터가 언제 행동해야하는지 결정하는 방법 (턴 스케쥴?)
다른 방법이있는 것 같습니다. 알고리즘으로 설명 할 수 있습니까?
RogueLike 게임에서 다른 속도의 액션을 관리하는 방법은 무엇입니까?
내 말은 턴 기반 게임에는 액션과 다른 특성에 따라 다른 "속도"로 행동하는 액터가있을 수 있다는 것입니다. 액터는 속도가 빠르거나 그렇지 않은 경우 다른 액터보다 더 많은 액션 / 턴을 효과적으로 수행합니다.
액터가 언제 행동해야하는지 결정하는 방법 (턴 스케쥴?)
다른 방법이있는 것 같습니다. 알고리즘으로 설명 할 수 있습니까?
답변:
내 불법적 인 게임 Tyrant에서 나는 액션 포인트와 속도 등급 시스템을 사용했다.
원래:
그런 다음 게임 루프는 다음과 같이 진행됩니다.
hero action AP cost * 100 / hero speed
creature speed * elapsed time / 100
이 시스템은 전체적으로 아주 훌륭하게 작동했습니다.
행동이 여러 차례 (즉, 50 바로자는 동안) 자라는 것을 의미합니까?
내가 할 일은 player.currentAction 객체를 유지하는 것입니다. currentAction에는 액션에 필요한 턴 수, 액션의 해상도, 액션을 취소하는 상태 목록 (위험, 공격, 과열 등)이 포함될 수 있습니다. 매 턴마다 플레이어 입력을 확인하기 전에 플레이어가 현재 액션 중임을 확인한 다음 다음과 같은 작업을 수행합니다.
if(!player.currentAction.interrupted())
{
if(player.currentAction.complete() == true)
{
player.currentAction.doAction(); //Some actions, like casting a spell, would have something happen here. Others, like sleeping, may or may not, depending on how you coded it.
player.currentAction = null;
}
else player.currentAction.decreaseTimer(); //Decrease our timer by one.
}
else
{
player.currentAction.interrupt(); //Let the player know he's been interrupted. Bungle the spell, cancel sleep, etc.
player.currentAction = null;
}
당신은 액션 포인트로 갈 수 있지만 그 자체로는 회전이 없지만 틱은 훨씬 작습니다. 모든 액터에 액션 포인트 누적 속도가 있다고 가정합니다 (예 : 틱당 2 AP). AP 10과 같은 행동을 시작합니다. 액터가 행동의 AP 가격을 지불하는 데 걸리는 정도이기 때문에 게임은 5 틱 앞으로 진행합니다.
배우가 여러 명있을 때 이 액션이 실행되는 시점에 누군가 AP 가격을 지불 할 때까지 게임은 틱별로 진행됩니다.
이 접근법은 @mikera와 비슷하지만 부정적인 AP는 없습니다.