Графика и массивы. Need help !

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Demi-urg
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 11
Зарегистрирован: 03.07.2004 (Сб) 23:24
Откуда: не помню....

Графика и массивы. Need help !

Сообщение Demi-urg » 03.07.2004 (Сб) 23:50

На этом форуме я впервые.

И вот что меня сюда привело:
Я создаю 2d игру - в проэкции 3\4 (ну это к слову). Кто играл хотя бы в одну изометрическую игрушку - тот меня поймёт. Вначале хотел сделать что-то типа клона Ultima Online :D - к чему и стремлюсь.
Вот собственно проблема - в игре будет много графики - её надо структурировать и сгрупировать.

Логично - создать файл со списком изображений и работать уже с ним.
А суть в том что я не знаю как запихнуть (какой конкретный тип переменной использовать) изображения в файл.

Пробовал создавать пользовательский тип - в нём массив точек изображения - но наткнулся на ограничение VB - не больше 64К на пользовательский тип. Облом. Спрайты могут быть больше...

Оговорюсь, что в общем-то эта проблема разрешаема - если загрузить рисунки в *.res файл - и уже оттуда читать. Но графики много и количество индексов (0...999) слишком малО. Да и памяти (если сгруппировать изображения в крупные) такое решение будет отъедать прилично.

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


Так что может кто подскажет КАК ?
Я точно знаю что подобное решение (куча изображений в 1 файл) реализуемо и применяется почти во всех профессиональных разработках. В том же Quake всем известный pak0.pak (вроде не перепутал :?: )

Заранее спасибо.
______________________________
>> Critical error - No keyboard found
>> Press Any key.

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 04.07.2004 (Вс) 8:20

А объектом Collecton пользоваться не пробовал?

sanches
El compañero
El compañero
 
Сообщения: 823
Зарегистрирован: 09.01.2003 (Чт) 3:58
Откуда: Р_О_С_С_И_Я ! (Питер)

Сообщение sanches » 04.07.2004 (Вс) 9:41

так в чем проблема? запихнуть все картинки в один файл, тчобы можно было потом считать?

ну так тут ничего сложного (ну если не использовать сжатие как в тех же pak'ах), пишешь в файл такие "блоки" для каждой картинки:
1. название
2. размер
3. сама картинка
(по сути это теже типы, но тут никакого ограничения на размер)
а для быстрого "ориентирования" в этом большущем файле при его загрузке "сканишь" его и запоминаешь в массиве все найденные картинки (ну в смысле их названия) и сохраняешь их смещения от начала файла.

когда нужно получить конкретную картинку ишешь ее в массиве, оттуда узнаешь индекс. по этому индексу узнаешь размер картинки и "копируешь" соотв. кусок из файла в BMP и уже его загружаешь.


p.s. вместо названий можно и просто номера.
Изображение

Demi-urg
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 11
Зарегистрирован: 03.07.2004 (Сб) 23:24
Откуда: не помню....

Сообщение Demi-urg » 05.07.2004 (Пн) 0:33

2 Sanches
1. название
2. размер
3. сама картинка
(по сути это теже типы, но тут никакого ограничения на размер)

По первым двум полям вопросов нет. :D
А какой тип используется в 3-ем поле ?
Слышал что-то про IpictureDisp но наверное это не то... (может кто объяснит, а ?)
Можете заклеймить меня ламером, и отослать в "лягушатник"...
:oops:
Буду очень благодарен если кто-нить скинет фрагмент кода.
______________________________
>> Critical error - No keyboard found
>> Press Any key.

Approximator
Постоялец
Постоялец
 
Сообщения: 572
Зарегистрирован: 26.06.2004 (Сб) 3:10

Сообщение Approximator » 05.07.2004 (Пн) 1:17

Demi-urg писал(а):2 Sanches
1. название
2. размер
3. сама картинка
(по сути это теже типы, но тут никакого ограничения на размер)

По первым двум полям вопросов нет. :D
А какой тип используется в 3-ем поле ?
Слышал что-то про IpictureDisp но наверное это не то... (может кто объяснит, а ?)
Можете заклеймить меня ламером, и отослать в "лягушатник"...
:oops:
Буду очень благодарен если кто-нить скинет фрагмент кода.

В третьем случае можно воспользоваться различными вариантами. Во первых можно указать массив байт, например,
Код: Выделить всё
PicBytes(1 to PicLengthInBytes) as Byte

Можно использовать строку фиксированной длины
Код: Выделить всё
PicBytes as String*PicLengthInBytes

Хотя на мой взгляд правильнее было бы изображение грузить отдельно в массив байт... можно опосредованно, через строку, например:
Код: Выделить всё
Dim PicStr as String, PicBytes() as Byte
PicStr=String(PicLengthInBytes,0)
Get #FileNumb, GetPos, PicStr
PicStr=StrConv(PicStr, vbFromUnicode)
PicBytes()=PicStr

и т.п...
С уважением, Approximator.

Demi-urg
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 11
Зарегистрирован: 03.07.2004 (Сб) 23:24
Откуда: не помню....

Сообщение Demi-urg » 06.07.2004 (Вт) 2:01

Спасибо за код. Пока еще не проверял но по логике должно пахать. Да и ещё один вопрос - ну это так для интереса - если делается карта (двумерный массив - матрица) этих самых тайлов - а сохранение происходит в файле - естественно последовательно. Так скажем, размерность массива 5000х5000 - для средних размеров игры. Т.е. 25*10^6 записей. Что есть очччень много.
Так как же организовать работу серверной части (если игра многопользовательская) чтобы он мог отслеживать изменения по ВСЕЙ карте? (вроде выкинутый предмет, сломанная стена)
Если я всё правильно понимаю то тут нужно добавить какие-нить промежуточные записи во временные файлы - а потом осуществлять тотальный рефреш (сохранять все изменения) где-то раз в день. Так как в реальном времени постоянный скан файла размером в несколько мегов - это уже лаг. :roll:
Иными словами - как проиндексировать запись по двум полям сразу - и организовывать быстрый поиск в последовательном файле??
Если этот вопрос кому-то покажеться наивным, просьба не серчать - не у всех есть MSDN и не все окончили ВУЗ по специальности "программист" или "супер-спец по СУБД".... :lol:
Да и если можно снабжайте ответы кодом - так нагляднее.
______________________________
>> Critical error - No keyboard found
>> Press Any key.

Approximator
Постоялец
Постоялец
 
Сообщения: 572
Зарегистрирован: 26.06.2004 (Сб) 3:10

Сообщение Approximator » 06.07.2004 (Вт) 2:32

Demi-urg писал(а):Спасибо за код. Пока еще не проверял но по логике должно пахать. Да и ещё один вопрос - ну это так для интереса - если делается карта (двумерный массив - матрица) этих самых тайлов - а сохранение происходит в файле - естественно последовательно. Так скажем, размерность массива 5000х5000 - для средних размеров игры. Т.е. 25*10^6 записей. Что есть очччень много.
Так как же организовать работу серверной части (если игра многопользовательская) чтобы он мог отслеживать изменения по ВСЕЙ карте? (вроде выкинутый предмет, сломанная стена)
Если я всё правильно понимаю то тут нужно добавить какие-нить промежуточные записи во временные файлы - а потом осуществлять тотальный рефреш (сохранять все изменения) где-то раз в день. Так как в реальном времени постоянный скан файла размером в несколько мегов - это уже лаг. :roll:
Иными словами - как проиндексировать запись по двум полям сразу - и организовывать быстрый поиск в последовательном файле??
Если этот вопрос кому-то покажеться наивным, просьба не серчать - не у всех есть MSDN и не все окончили ВУЗ по специальности "программист" или "супер-спец по СУБД".... :lol:
Да и если можно снабжайте ответы кодом - так нагляднее.


Imvho, если нет желания расти профессионально, то вряд ли стоило "впрягаться". А если отбросить лирику, то сделать "рефреш", относительно просто. Размер карты, отображаемой на экране, конечен и далёк от 5000x5000. Ну даже, если 1600х1200. Обновлённый участок, как праивило и того меньше. Конечно, если обновление формируется правильно. Так вот, достаточно один раз вгрузить "в голову" серверу (в DC) карту, а затем ПРИ ФОРМИРОВАНИИ СПРАЙТА КАРТЫ делать обновления карты на сервере. Разумеется работая (адресуясь) по координатам верхнего левого угла и сторонам обновляемой прямоугольной области. Процедура эта, максимум, потребует вдвое больше времени на обновление, чем было до этого. А если до этого всё было организованно правильно, то такая задержка сказываться не должна. Кодом этот ответ снабжать не буду - длинно. Да и если Вы правильно формируете активное обновление на экране, то должны были понять и так.
С уважением, Approximator.

Demi-urg
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 11
Зарегистрирован: 03.07.2004 (Сб) 23:24
Откуда: не помню....

Сообщение Demi-urg » 06.07.2004 (Вт) 3:18

Ещё раз спасибо.
А насчёт профессионального роста - то тут другой исток. Всегда хотел написать свою игру и чтоб было поинтереснее. Но возможно действительно заморачиваться не стоит. Вот уже почти неделю раньше 4 утра не ложусь, а странно, вроде сессию сдал, лето в разгаре (опустим погоду...).
Привет модератору ! :)
______________________________
>> Critical error - No keyboard found
>> Press Any key.

sanches
El compañero
El compañero
 
Сообщения: 823
Зарегистрирован: 09.01.2003 (Чт) 3:58
Откуда: Р_О_С_С_И_Я ! (Питер)

Сообщение sanches » 08.07.2004 (Чт) 0:22

Demi-urg писал(а):Ещё раз спасибо.
А насчёт профессионального роста - то тут другой исток. Всегда хотел написать свою игру и чтоб было поинтереснее. Но возможно действительно заморачиваться не стоит. Вот уже почти неделю раньше 4 утра не ложусь, а странно, вроде сессию сдал, лето в разгаре (опустим погоду...).


Вот у меня похже было. В конце апреля начался отдых, в том смылсел, что НЕ БЫЛО НИКАКИХ обязательств (никуда не надо было ходить). Одыхалось (я НИЧЕГО не далел).... недельки две. ДЫК неуютно стало! И я давай тоже сидеть по ночам... спал по 5 часов максимум (в сутки разумеется), хотя казалось - лето ведь, отдыхать надо :twisted:

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

Keen
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 25.04.2004 (Вс) 10:45
Откуда: Россия => Москва

Сообщение Keen » 08.07.2004 (Чт) 9:27

sanches писал(а):
Demi-urg писал(а):Ещё раз спасибо.
А насчёт профессионального роста - то тут другой исток. Всегда хотел написать свою игру и чтоб было поинтереснее. Но возможно действительно заморачиваться не стоит. Вот уже почти неделю раньше 4 утра не ложусь, а странно, вроде сессию сдал, лето в разгаре (опустим погоду...).


Вот у меня похже было. В конце апреля начался отдых, в том смылсел, что НЕ БЫЛО НИКАКИХ обязательств (никуда не надо было ходить). Одыхалось (я НИЧЕГО не далел).... недельки две. ДЫК неуютно стало! И я давай тоже сидеть по ночам... спал по 5 часов максимум (в сутки разумеется), хотя казалось - лето ведь, отдыхать надо :twisted:

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


ИМХО, такое со всеми программистами (в разной степени) и со мной, наверное, тоже. Может быть, привычка? :lol:

А про игрушку ты зря - не стенсняйся, sanches, строго не осудим :) !

Demi-urg
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 11
Зарегистрирован: 03.07.2004 (Сб) 23:24
Откуда: не помню....

Сообщение Demi-urg » 16.07.2004 (Пт) 1:35

2 Sanches
ПРОСИМ !!!

Если честно то я сильно завяз. Прикупил себе на днях MSDN и грубо говоря разочаровался: там почти ВСЁ на .Net framework...
:cry: :cry: :cry:
Ненавижу....
Так что хотелось бы кинуть клич на форуме, знаю что немножко не в тот топик, но всё же....


Люди !!! Если кто заинтересован, а главное свободен и знает VB и DX то просьба не молчать, а чуток поддержать начинающего программера :oops:
Вот я тут выложил екзешничек будущего редактора - для игрушки - просто чтобы показать ... Критики не надо...
Да и там еще маленькая утилита - проверка на color key. Сделано попискельно (всмысле через GetPixel) - иначе не умею....
Вложения
AnkarotUtilityPack(alpha).rar
Там всё ещё очень сыро....
(236.4 Кб) Скачиваний: 26
______________________________
>> Critical error - No keyboard found
>> Press Any key.

Dagobert
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 141
Зарегистрирован: 21.12.2002 (Сб) 6:48
Откуда: Russia

Сообщение Dagobert » 16.07.2004 (Пт) 4:48

Я как раз сейчас занимаюсь тем же самым - технократической стратежкой в 2D. Работаю через DX7. Нашёл неплохое руководство по DX с примерами на английском, положил сюда
http://subdom.scararegis.by.ru/ddraw_print.html как переведу выложу к себе на сайт.
В движке почти сделал графику. Есть простая анимация, прозрачные спрайты, прокрутка карты.
Сейчас рабтаю над диалогами и вводом в полноэкранном режиме, чтобы продолжить развивать движок.

В общем, если есть вопросы, я постараюсь ответить.

Demi-urg
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 11
Зарегистрирован: 03.07.2004 (Сб) 23:24
Откуда: не помню....

Сообщение Demi-urg » 27.07.2004 (Вт) 23:20

[quote="Dagobert"]Нашёл неплохое руководство по DX с примерами на английском, положил сюда
http://subdom.scararegis.by.ru/ddraw_print.html как переведу выложу к себе на сайт.
В движке почти сделал графику. Есть простая анимация, прозрачные спрайты, прокрутка карты.
Сейчас рабтаю над диалогами и вводом в полноэкранном режиме, чтобы продолжить развивать движок.
[quote]

Вот всегда так и бывает - стоит только чуть-чуть забросить дело как тут же дают дельный совет. Вобщем спасибо. Будем изучать.

ps. А стратежка с мультями ? Или чистый сингл ? Если с мультями - будет сервер ? :wink:
В любом случае...
Меня первого в бетатестеры :D !!!
Можно в альфа....
И желательно исходники 8)
Исходники, исходники, ИсХоДнИкИ .... и таблеток от жадности :)
______________________________
>> Critical error - No keyboard found
>> Press Any key.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20

    TopList