Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Изометрия: пара вопросов


Страницы:   1 2

greenrul ©   (2003-04-27 11:46:00) 

Я решил сделать изометрическую RPG - карты у меня хранятся в следующем формате - папка map_name/ground.txt - текстовый массив, описывающий землю (нулевой уровень), потом layer1.txt, layer2.txt и т.д. - в layer"ах хранится информация о вещах, положенных на землю, зданиях и пр.
Например: одна клетка - нулевой уровень- асфальт, 1 слой - кровь, 2 слой - пистолет. В итоге на асфальте в луже крови лежит пистолет.
Не подскажете, может можно это более оптимально организовать?

Второй вопрос - как совмещать эти слои? У меня есть массив изображений Tiles[1..n,1..n] of TTile. Нужно совместить 3 image - мне стоит делать
b1:=TBitmap.Create;
b2:=TBitmap.Create;
b3:=TBitmap.Create;

b1.LoadFromFile("c:\1.bmp");
b2.LoadFromFile("c:\2.bmp");

b2.Transparent:=True;

b3.Width:=b1.Width; b3.Height:=b1.Height;
b3.Canvas.Draw(0,0,b1);
b3.Canvas.Draw(0,0,b2);

Image1.Picture.Assign(b3);

b1.free;
b2.free;
b3.free;
end;

или есть более оптимальный вариант?

И последнее - если у меня тайл уходит за пределы экрана, но не уничтожается, система все еще им загружена? То есть если сделать огромный массив TImageSprite на всю локацию, а показана всегда будет только одна часть? Например при скроллинге будут просчитываться все спрайты, если координаты <0 или больше ширины/высоты экрана то Visible:=false;
Опять, же есть ли более оптимальный вариант?

Заранее прошу не посылать читать руководства с Daddy DelphiX и пр. - там все слишком муторно - человек использует свой класс, а о нем ни слова...


greenrul   (2003-04-29 01:45:00) [21]

2TButton :Я отказался от скрепления TBitmap"ов - сделал вот как:
у меня отныне массив Tiles[1..256,2..256,1..5] - 5 слоев. Функционирует пока без тормозов. Если кому интересно пишите - кину формулу вывода тайлов и определения текущего тайла под мышкой безо всяких масок


Плохой человек   (2003-04-27 20:00:00) [22]

>Не подскажете, может можно это более оптимально организовать?

Можно создать файл типа TTile (если TTile - record) и записать его так напрямую. Пример можешь глянуть в движке Taudur с DelphiGFX. Он под Delphi 5 не пашет из-за несовместимости типов записей. Но код понятен.

>или есть более оптимальный вариант?

Код не понравился, грязновато, хотя, может это только набросок. Но LoadFromFile я бы не использовал - слишком долго. Нужно держать картинки загруженными заранее. И лучше перейти на графическую библиотеку, например, Graphic32.

И глянь ветку:
http://www.delphimaster.ru/cgi-bin/forum.pl?look=1&id=1049222730&n=9


TButton   (2003-04-27 17:57:00) [23]

дурацкий вопрос (ох как я их люблю). А что если в одном тайле лежит несколько пистолетов, автомат и базука. для каждого будешь слой создавать?


Namo   (2003-04-27 15:39:00) [24]


for xx:=0 to && do for yy:=0 to && do
if ((xx+1)*32>-x)and((xx-1)*32-y)and((yy-1)*32


Namo   (2003-04-27 15:23:00) [25]

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

Feanturi: Valanyё Mandos


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо