Мене цікавить, як типово розроблені механізми маніпуляції часом в іграх. Мене особливо цікавить зміна часу (як, наприклад, в останньому SSX або Prince of Persia).
Гра 2D шутер зверху вниз.
Механізм, який я намагаюся розробити / впровадити, має такі вимоги:
1) Дії суб'єктів, крім характеру гравця, повністю детерміновані.
- Дія, яку здійснює суб'єкт господарювання, ґрунтується на кадрах, просунутих із початку рівня та / або позиції гравця на екрані
- Суб'єкти породжуються у встановлений час протягом рівня.
2) Зворотний час працює шляхом реверсування назад у режимі реального часу.
- Дії гравця також зворотні, він відтворює в зворотному порядку, що виконував гравець. Гравець не має контролю в зворотний час.
- Немає обмеження часу, проведеного заднім ходом, ми можемо перевернути весь шлях до початку рівня, якщо захочемо.
Як приклад:
Рамки 0-50: За цей час гравець рухає вперед 20 одиниць. Ворог 1 породжує в кадрі 20 Ворог 1 рухається вліво 10 одиниць під час кадру 30-40 Гравець стріляє кулею в кадр 45 Куля рухається 5 вперед (45-50) і вбиває Ворога 1 на кадр 50
Повернення цього відтворюється в реальному часі: Гравець за цей час рухається назад на 20 одиниць. Ворог 1 відроджується в кадрі 50 Куля знову з'являється в кадрі 50 Куля рухається назад 5 і зникає (50-45) Ворог рухається ліворуч 10 (40-30) Ворог видалений у кадр 20.
Просто дивлячись на рух У мене були деякі ідеї, як цього досягти, я думав мати інтерфейс, який міняв би поведінку, коли час просувався або змінювався. Замість того, щоб робити щось подібне:
void update()
{
movement += new Vector(0,5);
}
Я б зробив щось подібне:
public interface movement()
{
public void move(Vector v, Entity e);
}
public class advance() implements movement
{
public void move(Vector v, Entity e)
{
e.location += v;
}
}
public class reverse() implements movement
{
public void move(Vector v, Entity e)
{
e.location -= v;
}
}
public void update()
{
moveLogic.move(new vector(5,0));
}
Однак я зрозумів, що це не буде оптимальним результатом роботи і швидко ускладниться для більш заздалегідь дій (таких як плавний рух по вигнутих контурах тощо).