rollback_sync_on_frame
함수는 모든 플레이어가 현재 프레임에서 동기화되어 있는지를 확인합니다. 이는 플레이어의 상태가 예측에 기반하지 않고 실제로 수신된 데이터에 기반하고 있음을 의미합니다. 모든 플레이어가 동기화되어 있다면 true
를 반환하고, 그렇지 않다면 false
를 반환하며 모든 플레이어를 동기화하려고 시도합니다. 이 함수를 사용하여 플레이어를 동기화하려고 하면 프레임이 멈출 수 있으므로, 이 함수는 Step 이벤트에서 지속적으로 호출되지 않도록 해야 합니다. 대신 토글로 사용해야 합니다. 아래 예제를 참조하세요.
문법
rollback_sync_on_frame();
반환값
- Boolean: 동기화 상태에 따라
true
또는 false
를 반환합니다.
예제
if (obj_game.winning_player == -1 && points >= obj_game.points_required_for_win) {
if (rollback_sync_on_frame()) {
obj_game.winning_player = player_id;
}
}
위 코드는 플레이어 객체의 Step 이벤트에서 실행됩니다. 이 코드는 승리하는 플레이어가 없고 현재 플레이어가 승리에 필요한 점수를 가지고 있는지를 확인합니다. 두 조건이 모두 참이라면, 플레이어가 승리해야 함을 의미합니다. 그러나 그 전에 모든 플레이어가 동기화되어 있는지를 확인하여 상태가 올바른지 확인합니다. 모든 플레이어가 동기화되어 있다면 winning_player
변수를 설정합니다. 이로 인해 첫 번째 조건이 거짓이 되어 rollback_sync_on_frame()
이 다시 호출되지 않도록 합니다. 즉, 이 함수는 매 프레임마다 지속적으로 실행되는 것이 아니라 토글로 사용됩니다.
활용 예제
예제 번호 |
설명 |
1 |
플레이어의 점수를 업데이트하고 승리 조건을 확인하는 코드 |
if (rollback_sync_on_frame()) {
player_score += points;
if (player_score >= win_score) {
obj_game.winning_player = player_id;
}
}
if (rollback_sync_on_frame()) {
save_game_state();
}
3 |
특정 이벤트 발생 시 동기화를 확인하는 코드 |
|
|
if (event_occurred && rollback_sync_on_frame()) {
trigger_event();
}
if (rollback_sync_on_frame()) {
if (all_players_ready()) {
end_game();
}
}
if (rollback_sync_on_frame()) {
synchronize_player_actions();
}
이와 같은 예제들은 rollback_sync_on_frame
함수를 다양한 상황에서 어떻게 활용할 수 있는지를 보여줍니다.