Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.03;
Скачать: CL | DM;

Вниз

Изометрия: пара вопросов   Найти похожие ветки 

 
greenrul ©   (2003-04-27 11:46) [0]

Я решил сделать изометрическую 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 и пр. - там все слишком муторно - человек использует свой класс, а о нем ни слова...


 
Namo ©   (2003-04-27 15:23) [1]

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

Feanturi: Valanyё Mandos


 
Namo ©   (2003-04-27 15:39) [2]


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

xx,yy - индексы матриц-тайлов
x,y - от куда рисуем все тайлы, так как они всегда отрицательны, то перед нимим ставится "-". это проверка на нахождение на поверхности экрана

Feanturi: Valanyё Mandos


 
TButton ©   (2003-04-27 17:57) [3]

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


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

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

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

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

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

И глянь ветку:
http://delphimaster.net/view/9-1049222730/


 
greenrul ©   (2003-04-29 01:45) [5]

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


 
TButton ©   (2003-04-29 02:13) [6]

кинь мне...
так значит у тебя в РПГухе небудет в одном тайле гора оружия валяться?


 
Namo ©   (2003-04-29 17:26) [7]


> в одном тайле гора оружия валяться

а что здесь трудного?

Feanturi: Valanyё Mandos


 
TButton ©   (2003-04-29 18:07) [8]

здесь трудно, то что оружие у него одна штука в одном слое, слоев всего 5, и три уходят на БэкГраунд :(((...


 
greenrul ©   (2003-04-29 18:14) [9]

TButton: дык этож временно... потом будут ground1.txt и ground2.txt которые менять нельзя, это что-то типа стен, асфальта и пр. что не уничтожается.

Так будут ли ОЧЕНЬ СИЛЬНО тормозить игру эти спрайты?


 
Namo ©   (2003-04-29 18:29) [10]

а еще в некоторых играх рисуют мешочки вместо упавших вещей. хотя это лучше для ФРПГ. но тада останется только рисование мешочка и сохранение его содержимого.

> Так будут ли ОЧЕНЬ СИЛЬНО тормозить игру эти спрайты

думаю нет.

> которые менять нельзя

открою блокнот и все поменяю. :((

Feanturi: Valanyё Mandos


 
greenrul ©   (2003-04-29 19:27) [11]

2Namo:
> думаю нет.
А вообще тормозить?


> открою блокнот и все поменяю. :((
Я имел в виду в самой игре =)


 
Namo ©   (2003-04-29 19:38) [12]


> вообще тормозить?

много чего влияет, даже железо, по крайней мере разница на 566 и на 1.7 будет! у меня по разному, в зависимости от загруженности...

Feanturi: Valanyё Mandos


 
Плохой человек   (2003-04-29 21:11) [13]

2 TButton:

>так значит у тебя в РПГухе небудет в одном тайле гора оружия валяться?

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


 
greenrul ©   (2003-04-29 21:16) [14]

2 TButton, Плохой человек : Так и будет - гора оружия на одном тайлике.

Накладывается layer1 на layer2 и т.д.


 
Плохой человек   (2003-04-29 21:38) [15]

>Накладывается layer1 на layer2 и т.д.

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


 
Namo ©   (2003-04-29 21:57) [16]


> Так и будет - гора оружия на одном тайлике

ну уж нет! тайл - ОДНА картинка, т.е. у тя должна быть картинка с изображением горы оружия (аналог мешочка), и ты его рисуешь, а в слое, уже указывается, сколько там какого оружия. главное, чтоб слой был какго-то типа, со свойствами, вроде этого...

Feanturi: Valanyё Mandos


 
TButton ©   (2003-04-30 06:51) [17]

привожу пример. JA2(2,5) Fallout(2,3) там в одном тайле может лежать несколько шмоток причем видно что ето не мешочек а шмотки, рисуются одна поверх другой. а вот к примеру Diablo(2) там в одном тайле 1 шмотка. а две никак нельзя. вобщем я бы сделал отдельный массив в котором прописано все оружие, что валяется (с координатами, т.е. где валяется). и при прорисовке сканировал бы его, на предмет попадания шмотки в видимую область... примерно так замутил бы...


 
Namo ©   (2003-04-30 13:13) [18]

а что мешает несколько раз нарисовать на одном месте шмотки и оружие??? просто массив должен быть типизированным, например TTile, где будет записываться кол-во, тип, и т.п. шмоток и оружия.

Feanturi: Valanyё Mandos


 
TButton ©   (2003-04-30 13:22) [19]

я, правда, не совсем понимаю как он в тексте хранит карты, но думаю что прописать в одном байте все шмотки никак не получится... если он тока не хранит карту в виде скрипта...


 
Namo ©   (2003-04-30 13:29) [20]


> не совсем понимаю как он в тексте хранит карты

номера тайлов.

Feanturi: Valanyё Mandos


 
greenrul ©   (2003-04-30 17:34) [21]

2НАРОД:
хм... по поводу спец. файла с оружием - может быть... Вы скорее всего идею не поняли - слоев пока пять - в каждом слое может что-то лежать - оружие, труп и т.д. Чем вам такой подход не нравится? Сами же сказали, что тормозить не будет


 
Плохой человек   (2003-04-30 17:42) [22]

>слоев пока пять - в каждом слое может что-то лежать - оружие, труп и т.д.

Не, это плохой подход. Рано или поздно наступит ситуация, когда слоёв не хватит, чтобы изобразить всё.


 
greenrul ©   (2003-04-30 18:01) [23]

2Плохой человек : следующий вопрос - как совместить две картинки из DxImageList совместить в одну ImageSprite.Image?
Желательно чтоб приоритет по z был - первая вверху, вторая - внизу

P.S. Taldur demo у меня не работает - компилится, но дальше - ошибка при запуске


 
Namo ©   (2003-04-30 18:24) [24]


2 greenrul

Идеально просто, сначала нарисовать одну, а потом другую в твою ImageSprite.Image . а выше будет та, которая позже нарисуется.
тут уж просто все

Feanturi: Valanyё Mandos


 
Плохой человек   (2003-04-30 18:46) [25]

>P.S. Taldur demo у меня не работает - компилится, но дальше - ошибка при запуске

Вот я и говорю. Он пашет под Delphi 3.



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

Текущий архив: 2003.11.03;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.017 c
14-8658
Сергей Суровцев
2003-10-14 10:07
2003.11.03
Файлы заменяются старыми копиями.


14-8597
kingdom
2003-10-15 12:41
2003.11.03
Ищу email-подписку на хороший журнал по программированию


4-8711
MAX_
2003-08-29 16:44
2003.11.03
Монитор


1-8415
andrey79
2003-10-22 13:41
2003.11.03
отправка файла


1-8527
han-bratan
2003-10-23 15:41
2003.11.03
OutputDebugString