Форум: "Игры";
Текущий архив: 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.012 c