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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.01 c
3-8309
Relaxxx
2003-10-13 11:57
2003.11.03
Вопрос по поводу выбора драйвера для програмирования под Оракл


3-8274
tprkv
2003-10-14 10:42
2003.11.03
Как сделать так, чтобы я нажал на запись в DBGRID а она отобразил


7-8699
Tumcoat
2003-08-26 09:53
2003.11.03
Проблема с клавишей TAB


3-8262
IBNovice
2003-10-14 15:57
2003.11.03
LookUp in DBGrid


14-8641
Study
2003-10-14 16:44
2003.11.03
А чём люди вскрывают





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский