Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Реализация игры-платформера (https://javascript.ru/forum/misc/32188-realizaciya-igry-platformera.html)

function 06.10.2012 16:16

Реализация игры-платформера
 
Вопрос: как представить игровое поле в javascript?

У самого имеется несколько идей:

1. Двумерный массив с пикселями (будет зависать)
2. Двумерный массив с блоками, например по 50px (перемещение только по блокам)
3. Двумерный массив с блоками, в котором положение игрока меняется при достижении определённой границы
if ((pos_x % 50) > 25) ...

Если выбрать этот вариант, то неполучится реализовать возможность "сдвигать" блоки.

Ваши идеи?

Maxmaxmахimus 06.10.2012 16:34

представь в виде абстрактной плоскости, а сущности представляй в виде координат их положения на этой плоскости, в том числе и сущность "камера" и её координаты.

а такие низкоуровневые вещи как пиксели и прочая хуита это дело рук браузера и видеокарты

function 06.10.2012 16:38

Тогда как определять наличие блока в данном месте? Перебором всех объектов?

nerv_ 06.10.2012 16:44

Цитата:

Сообщение от function
Тогда как определять наличие блока в данном месте? Перебором всех объектов?

блок должен знать, где он находится

Цитата:

Сообщение от Maxmaxmахimus
представь в виде абстрактной плоскости, а сущности представляй в виде координат их положения на этой плоскости, в том числе и сущность "камера" и её координаты.


function 06.10.2012 16:52

Нет. Например, нужно переместить объект в некоторое место, если там нет блока, а иначе ничего не делать. Как узнать, есть ли там блок(и)?

Maxmaxmахimus 06.10.2012 16:58

у блоков должны быть размеры))
как определить пересекает ли один квадрат другой квадрат зная их разверы и коордлинаты??
ну я думаю нам нужно Хоккинга или Эйнштейна подключать для такого рода уравнений вычислений

function 06.10.2012 17:13

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 208543)
у блоков должны быть размеры))
как определить пересекает ли один квадрат другой квадрат зная их разверы и коордлинаты??
ну я думаю нам нужно Хоккинга или Эйнштейна подключать для такого рода уравнений вычислений

.
.
Цитата:

Тогда как определять наличие блока в данном месте? Перебором всех объектов?

Maxmaxmахimus 06.10.2012 17:36

грубо говоря да, но это можно оптимизировать. деля плоскость на квадраты и в каждом квадрате будет содержаться данные о том какие тут обьекты находятся.

Или даже так, Грубо говоря 2 массива упорядоченных по расположению обьектов. первый массив по горизонтали второй по вертикале. и поиск по этому массиву будет молнеиносно быстрый. это называется индексация. Иными словами чтобы все обекты не проверять можно индексировать их расположение в массивах и всегда держать эти массивы упорядоченными по расположению обектов. Иными словами переупорядочивать их при перемещени обектов.
Но и это переупорядочивание можно оптимизировать.

Потом просто хочешь посмотреть пересекают ли какие то обьекты нужный тебе, смотришщь его координаты, потом берешь СРЕДНИЙ обьектт из упорядоченного по расположению массива остальных обьектов, и если этот средний элемент стоит левее то отсекаешь от исследования правую часть массива, потом берешь средний элемент левой части, и отсекаешь которая не подходит. и.т.д. Таким образом в 4-7 итераций ты находишь ближайшие обьекты которые рссположены около твоего, их то и тестируешь на пересечение. КЭП.


Я вообще ни одной игры не писал и даже незнаю как это делается, но просто логически думая советую это. Не знаю как там НА САМОМ ДЕЛЕ делается.

function 06.10.2012 17:39

Цитата:

Сообщение от Maxmaxmахimus
грубо говоря да, но это можно оптимизировать. деля плоскость на квадраты и в каждом квадрате будет содержаться данные о том какие тут обьекты находятся.

Цитата:

Сообщение от function
2. Двумерный массив с блоками, например по 50px (перемещение только по блокам)

Цитата:

Сообщение от Maxmaxmахimus
Или даже так, Грубо говоря 2 массива упорядоченных по расположению обьектов. первый массив по горизонтали второй по вертикале. и поиск по этому массиву будет молнеиносно быстрый.

Это как?

Maxmaxmахimus 06.10.2012 17:42

блин погугли как делать индексацию поиска


Часовой пояс GMT +3, время: 09:20.