среда, 14 декабря 2011 г.

Отчёт №2

И так, работу начал с игрового пространства. В отличии от других игр, игровой процесс Бомбермена использует два типа игрового пространства. О чём идёт речь?
Дело в том, что на заре игростроя, игровое пространство большинства игр состояло из матрици. Поскольку игры двумерные были, то и матрици двумерные. Интерпретация матрици - здесь является пространством. Тоесть пространство состоит не из бесконечного количества точек, а из конкретных не делимых блоков. Это означает, что любой игровой объект может находиться только в каком то конкретном секторе. А находиться между секторами он не может, так как там пространства нет. Точно такой же подход был в реализации всех игр в игрушке тетрис, которая разошлась огромным теражём по всему миру и имела в себе: танчики, тенис, гоночки, все возможные стрелялки и т.д.
Все эти игры использовали игровое пространство - двумерную матрицу, или проще говоря - мир в котором перемещение осуществлялось перескакивением через блоки мира.
С таким миром в принципе работать достаточно легко и все алгоритмы связанные с перемешениями и столкновениями в этом мире, достаточно просты и не требуют более чем четыре условия для описания адекватного столкновения. Да, я имею ввиду все четыре стенки любого самого маленького программно не делимого куска игрового пространства.
 
  Это было описание игрового пространства с неделимыми секторами.
Но сушествует и более совершенное пространство, тоже двумерное, но с бесконечным количеством неделимых секторов. И перемешение по этому пространству осуществляется тоже перескакивением по секторам (бесконечно маленьким), но по другому алгоритму. Который выглядит примерно так:
  Character.Position.X := Character.Position.X + (deltatime * индекс скорости);
индекс скорости - если равняется единице, то в течении одной секунды выполнения такого алгоритма:
  Character.Position.X := 1;
На протяжении всего времени, персонаж за один цикл перескакивал через некое количество секторов, которое равно скорости работы кода FPS поделённую на одну секунду времени. И мы получим растояние пройденное за один цикл. И тут не нужно быть гением, чтобы понять, что чем ниже скорость работы кода, тем через большее количество сектров перескочит персонаж за один цикл. А это в свою очередь говорит о том, что характер (а не скорость) перемещение персонажа напрямую зависит от скорости работы кода FPS.
  И тут задачка: Стоит два блока, между ними такое растояние, что персонаж идеально в притык между ними залезет. И у нас есть задачка просто тупо между этими блоками протись.
  Ну еслибы у нас пространство состояло только из конкреного числа неделимых секторов - матрици, то проблем не было бы ни каких. Мы просто поднялись бы на один сектор выше и мы находились бы идеально посредине между этими блоками, а значит смогли бы пройти между ними.
  Но у нас пространство состоящее из бесконечного количества веротностей, где может находиться персонаж. А значит и перемещается он специфически, для своего пространства, тоесть в зависимости от FPS он перескакивает, хоть и на микро уровне но в всё же перескакивает, по этому пространсву. А зная это, мы получаем не утишительный вывод:
Что вероятность стать перед блоками так, что бы быть идеально между ними, сводится почти к нулю. А учитывая, что это воспроизводится на конпьютере, то это вообще почти не возможно. Персонаж никогда не войдёт между двух блоков! 
Он сможет это сделать только тогда когда FPS будет бесконечно большим =). Но вы понимаете, что это не возможно...
   
  Уверен, каждый из учасников в этом конкурсе столкнётся с этой проблемой. Как её решить, и как её решил я, я опишу подробно в своём следующем отчёте. 

5 комментариев:

  1. А почему это бомбермен использует два типа игрового пространства? Там все исключительно матричное, кроме разве что расчета коллизий игрок <-> враг <-> спрайт взрыва.

    ОтветитьУдалить
  2. http://www.youtube.com/watch?v=Mn8MKm3wtPY
    Пока без коментариев

    ОтветитьУдалить
  3. При отпускании клавиши бомбермен стремился в ту клетку, к которой он ближе. То есть в твоем случае, на видео, он шел бы к клетке, отмеченной синим.

    ОтветитьУдалить
  4. Та не, всё гораздо сложнее. Синяя клетка это то как персонажа видит матрица игрового пространства и не более. Алгоритм "как скользить по углам?" я описал на рисунке. И на конец о пространствах, то как видишь перс. перемещается не по матрице, а по пространству состоящему из бесконечно маленьких секторов. Но это всё игра терминов. Тут не стоит зацикливаться, но стоит призадуматься, если относишся к этому легкомысленно.

    ОтветитьУдалить
  5. Нехватает времени нормально описать то чем занимаюсь, а видео пусть даст немного интриги.
    http://www.youtube.com/watch?v=AtcMKc5n21s

    ОтветитьУдалить