Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2011, 23:41   #11
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Сообщений: 388
По умолчанию

Для загрузки карты всегда использую TStringList Жутко удобно и проблем нет
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума Ответить с цитированием
Старый 30.04.2011, 00:02   #12
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от [BeNdeR] Посмотреть сообщение
Если массив типа TGameMas тогда не работает процедура загрузки файла

на чтении ошибка(read)

И вообще если я использую массив типа TGameMas, есть ли мне смысл заполнять карту таким способам?
Нужно понимать, что TGameMas тип не стандартный, а созданный вручную, он не может работать без соответствующих типизированных записей, которых ты еще не создал, но уже пытаешься считать данные без указания конкретной записи. Вот он основной тип карты:

Код:
Type
  TGameMap = packed record
    TGTexIndex: Byte;   // это индекс картинки в банке текстур
    TGMove:     Byte;   // 1-препятствие 0-ничего нет
  end;
Теперь вспоминаем информацию относительно банка текстур, которую уже давал. Суть в том, чтобы открыть файл, считывать по 2 символа, соединять их в строку, пробегать по банку текстур, если нет такой еще, загружать с файла по составному имени, записывать в банк, а номер ячейки банка в массив карты по записи TGTexIndex. Если текстура нашлась, то записать номер ячейки в TGTexIndex и сбросить цикл поиска. Массив карты будет хранить только номер ячеек банка текстур, а ячейка банка уже картинку и все параметры текстуры. Таким образом при отображении карты по индексу из банка берутся текстуры и отображаются стандартным образом. Повторов текстур в памяти не будет.

Подробно о заполнении банка текстур...

...как доработать до считывания по 2 байта кода, думаю, не сложно.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 30.04.2011 в 15:20.
Beermonza вне форума Ответить с цитированием
Старый 30.04.2011, 09:06   #13
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Кстати , о мейджик намберах... Как Beermonza мне напомнил, после моего поста. Плохо когда 255 значений и чертипоймёшь , что они значат, посему я всегда использую очень хорошо обозванные енумы, примеры(из Интакт) :
Код:
Nabil = ( abnone, abjoust, abdejoust, abmagaura, abmagflow, abdeshot,
  abderise, abjump, abinspire, abdeagil, abdeadeat, abdestun, abtrap ) ;
Nspellid = ( sinone, sistun, siheal, sitrwall, siarrow, sishield,sidrain,
  sirise, siinspire, sicurse, sihaste, sidemagic, siray, siequake ) ;
Nsptarg = (stnone, stoneenm, stallenm, stoneown, stallown, stclear, stequake) ;
Nspkind = (sknone, skmagic, skphys) ;
Nspuse = (sunone, sufree, sulimit, sustand ) ; // line of sight limitation of using a spell
Naction = (acnone, acmove, acatk, acshot, acabil, acspl) ;
Nforce = (fnone, finfan, franged, fflyer, fcaval, ftank) ;
Nobjtype = (otnone, otwall, ottower, ottrwall, ottrap) ;
Ndamage = (dmgmelee = 1, dmgranged = 2, dmgmagic = 3, dmgjoust = 4, dmgspec = 5) ;
хранятся они, естественно, в цифрах (либо можно в строках, но это отдельная песня, про getenumvalue) и загрузка оных превращается в милейшую простоту:
Код:
fs.read(b, sizeof(b));
// сюда можно проверку сделать ещё
game.map[y,x].value := Nvalue(b);
а обращение конечно такое(пример с case близкий и понятный, сам case'ами не очень пользуюсь) :
Код:
case game.map[y,x].value of
  Nfirstvalue :...
  Nsecondvalue : ...
  end;
phomm вне форума Ответить с цитированием
Старый 30.04.2011, 13:09   #14
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Сообщений: 388
По умолчанию

В таких случаях case нагляднее if, а комментарии в коде повышают его понятность
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума Ответить с цитированием
Старый 30.04.2011, 15:41   #15
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

phomm, понимаешь в чем дело, ...новичок, он же мыслит пока примитивами, и надо бы не спугнуть его непонятными ему оптимизаторскими решениями. Это мы сразу видим суть, а он видит поверхностно. Поэтому я предлагал сначала научиться мыслить на поверхности, а потом уже нырять с головой в оптимизацию. Кроме того сложного ничего в примере нет, там и оптимизировать ничего не нужно, буквально все "на пальцах" и так, чтобы можно было зайти в Блокнот и заменить T1 на T2, если вместо текстуры T1.bmp нужна T2.bmp, только и всего.

Мне, например, удобнее хранить карты в сжатом формате и пользоваться отдельным редактором, ...тут-то все оптимизировано до безобразия, и есть возможность записать в клетку одну из 16777216 текстур с ее многочисленными параметрами. Но чтобы до этого дойти, нужно проделать весть путь от хранения в текстовом файле и банального считывания, до пакованных типизированных данных, обрабатываемых в потоках, понимая, как это работает в самом простом варианте.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 04.05.2011, 20:46   #16
[BeNdeR]
Пользователь
 
Аватар для [BeNdeR]
 
Регистрация: 14.04.2011
Сообщений: 74
По умолчанию

Я тут без типа TGameMap сделал, но почему-то не рисует карту(
Вложения
Тип файла: rar [Exit].rar (168.3 Кб, 8 просмотров)

Последний раз редактировалось [BeNdeR]; 05.05.2011 в 11:37.
[BeNdeR] вне форума Ответить с цитированием
Старый 04.05.2011, 22:11   #17
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

в formcreate добавь вызов loadlevel , а то у тебя массив даже не грузится, ну и конечно поправь в ней Х с 1..29 на 0..28 и также для У

настоятельно рекомендую завести константы для количества клеток и размеры поля вычислять как константу = количество_клеток*размер_клетки (размер клетки тоже сделать не переменной, а константой)
phomm вне форума Ответить с цитированием
Старый 05.05.2011, 11:32   #18
[BeNdeR]
Пользователь
 
Аватар для [BeNdeR]
 
Регистрация: 14.04.2011
Сообщений: 74
По умолчанию

О теперь работает! Спасибо!
PS. Файл заменил! Правдо там картинки плохо подобраны!Ничего не поймёте)

Последний раз редактировалось [BeNdeR]; 05.05.2011 в 11:38.
[BeNdeR] вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построчный алгоритм заполнения многоугольника с затравкой (Билдер С++) SKA_zo4nik Помощь студентам 8 28.03.2011 20:15
простейший алгоритм а работает криво Lokos Общие вопросы Delphi 7 27.10.2010 16:21
Простейший фаерволл wall66 Софт 0 24.10.2009 17:36
Алгоритм заполнения ячеек Иван_1651 Microsoft Office Excel 3 11.03.2009 21:27
Алгоритм заполнения квадратной матрицы по спирали beregok Помощь студентам 3 15.01.2009 16:56