Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];

Вниз

Карта с нелинейными тайлами.   Найти похожие ветки 

 
Megabyte-ceercop ©   (2004-10-07 08:49) [0]

Привет всем. Реализую я сейчас такую идею:
Карта с нелинейными тайлами.

Т.е. если обычно сетка карты емеет квадратные тайлы, то здесь имеются еще й смещения X,Y для каждой вершины сетки. Вершины эти могут смещаться не более чем на размер клетки.
Это дает возможность делать разные холмы (там где в обычной карте с квадратами была бы просто плоскость). Надеюсь я понятно объяснил.

Вопрост в том, как определить какому именно тайлу принадлежит точка.

В обычной карте я бы сделал так:

Tile := TilesMap[X div TileWight, Y div TileHeight];

Но ведь тайлы то могут быть не ровно квадратные.

Найти координаты вершин можно так:

TilesMap[X div TileWight, Y div TileHeight].Xskip;
TilesMap[X div TileWight, Y div TileHeight].Yskip;

Каждый тайл хранит только смещение для нижнего правого угла.
Чтобы найти смещения для других углов тайла нужно обратиться к соответствующим соседним тайлам.

Вот.


 
cyborg ©   (2004-10-07 09:23) [1]

Если у тебя карта массив, то сделай каждой клетке значение высоты, может так? Когда рисуешь спрайт, двигай его с учётом высоты клетки, хотя так наверное плучится скачками, но можно сделать расчёт с учётом двух соседних клеток и расстояние между ними, на котором стоит герой.


 
Megabyte-ceercop ©   (2004-10-07 09:45) [2]

Эх, еслиб нарисовать...

Если представить карту в воде сетки, ребра которой разграничивают все тайлы, то в нормальной сетке все ребра будут идти по приямой, а сдесь для каждого пересечения дается сдвиг на N пикселей влево-право и N2 пикселей вверх-низ. Тайлы получаются разные, перекошеные, сплюснутые и т.д. (позваляют делать более гибкий ландшавт (склоны, плавные холмы). Графика тайлов соответственно тоже растягивается).

Можно найти координаты вершин одного тайла (в котором предположительно находится нужная точка). Проверить принадлежность точки фигуре которую эти вершины описывают, и если не принадлежит, проверить восемь соседних тайлов на туже принадлежность нужной нам точки.

Проблема сужается:

Имеются четыре вершины прямоугольника (в Map-таблице их найти несложно)

A(X1,Y1)
B(X2,Y2)
C(X3,Y3)
D(X4,Y4)

Как определить принадлежит ли точка N(Xn, Yn) Прямоугольнику ABCD.???

Может кто-то знает самый быстрый способ?

Хотя бы вариант с треугольником?


 
П7   (2004-10-07 10:02) [3]

Алголист - твой друг!


 
POSO   (2004-10-07 10:05) [4]

Ну это больше на 3d смахивает или псевдо. Что то наподобие как в simcity ???


 
Megabyte-ceercop ©   (2004-10-07 10:24) [5]

2D реализованое через 3D. Карта всеравно плоская, хоть и гибкая.


 
Megabyte-ceercop ©   (2004-10-07 10:27) [6]


> П7   (07.10.04 10:02) [3]
> Алголист - твой друг!


Алголист - это болесь чтоли такая?

А нельзя ссылку?

Вот ещё вопрос.
Что с сайтом http://www.gamedev.ru/
как туда попасть сейчас?


 
NikeOLD ©   (2004-10-07 10:36) [7]

Ему надо реализовать что-то наподобие карты в Аллодах.
Насколько я могу судить, там обычная сетка размерности  m*n с одинаковой шириной и высотой ячеек. Но сами ячейки разбиты на более мелкие четырехугольники (возможно прямоугольники мелких размеров). Разбиты только те ячейки, которые должны быть холмами.
Внешне карта плоская, но игрок, перемещаясь по такой карте идет с некоторым "усилием", имитирующем подъем на гору.
Иногда игрок за один шаг просто взлетает на препятствие, что может свидетельствовать об очень длинном прямоугольнике, по которому он прошел. Из-за различных размеров прямоугольников и получаются различная длина шагов. Чем их больше, тем "труднее" будет игроку взобраться на "гору".

Предполагаю, что надо идти в этом направлении, но я могу и ошибаться.


 
NikeOLD ©   (2004-10-07 10:39) [8]


> Megabyte-ceercop ©   (07.10.04 09:45) [2]

Графика тайлов неизменна. То что ты описал в этом посте - 3D.
"Аллоды" же были написаны на  DirectDraw7 без 3D. Стало быть есть другой путь.


 
Megabyte-ceercop ©   (2004-10-07 11:33) [9]

Эх, видимо только после выклада демо Киркоп III станет всем ясно чего я хочу (хотя боюсь что и выклад демо - не гарантия)  :-(

а http://www.gamedev.ru/
У кого-нибудь работает?

или где ещё можно почитать по игровой геометрии?


 
NikeOLD ©   (2004-10-07 12:23) [10]

http://www.amazon.com
даже купить можно


 
NailMan ©   (2004-10-07 12:59) [11]

Работает, я даже там в форуме сейчас торчу...

---
WBR, NailMan aka 2:5020/3337.13


 
П7   (2004-10-07 13:26) [12]

http://gamedev.ru
Всё работает.

В Алголист можно попасть через Рамблер. Ленивый ты человек.

И вообще, всякие ссылки можно по сабжу откопать в Рамблере.

Мне скоро придётся делать нечто подобное, только в 3D. ВотЪ! (:


 
megabyte-ceercop ©   (2004-10-07 13:37) [13]

Я обе эти ссылки на gamedev тыкаю, а там надпись Please contact to ms@vip.ru
Послал туда письмо с матом. Ответа нет.


> Мне скоро придётся делать нечто подобное, только в 3D. ВотЪ!
> (:


Эх, да у тебя ещё всё впереди. :)

ща введу в Rambler слово: (Алголист)&("как лечить")


 
Sapersky   (2004-10-07 18:41) [14]

http://algolist.manual.ru

Хотя я с ходу про тайлы ничего там не разглядел.

Мне скоро придётся делать нечто подобное, только в 3D. ВотЪ!
> (:
Эх, да у тебя ещё всё впереди. :)


Действительно, не проще ли натуральное 3D - тем более если

2D реализованое через 3D



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.053 c
3-1103367985
Серый
2004-12-18 14:06
2005.01.23
Вычисляемое поле


1-1105256503
kaZaNoVa
2005-01-09 10:41
2005.01.23
TThread, Потоки, пример использования


1-1104920197
AliceCat
2005-01-05 13:16
2005.01.23
Приведение типов: char -> double


1-1105526740
Ega23
2005-01-12 13:45
2005.01.23
Формула инверсия цвета


1-1105282903
Sergo_Zero
2005-01-09 18:01
2005.01.23
Вопрос ? MyForm:TForm.Create(applications);





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский