|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
05.10.2012, 16:24 | #21 |
Пользователь
Регистрация: 06.09.2012
Сообщений: 14
|
phomm, может и в виде байтов будет проще, но, к сожалению, пока я не знаком с ними.
Да, конечно, если можно, то лучше показать пример. А то от прочитанного глаза на лоб вылезли, но надо же когда-то начинать, волков бояться - в лес не ходить. Зы: с потоками раньше работал немного. Я так понимаю, данные в ОЗУ будут храниться? Если что, я хотел реализовать сохранение карты на ЖД (Харде). Последний раз редактировалось Slin; 05.10.2012 в 16:35. |
05.10.2012, 21:23 | #22 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,883
|
Мы с Beermonza говорим примерно об одном, работа с файлами из байтов через файлстрим или мемористрим и делается. Данные вообще удобно так хранить - на диск и с диска читать и писать можно методами файлстрима, и загружать сразу в игровой массив без обработки какой-либо, т.е. 1 байт (ну или другой тип) прямиком загружается в массив , карты например, только в случае с 2мерной картой надо просто регулировать индексатор массива ( с помощью div mod )
Схемы загрузки подобным образом я нередко приводил, например тут и продолжение тут |
06.10.2012, 15:50 | #23 | |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Цитата:
Вначале нужна переменная: Код:
Код:
Код:
gmf - Game Map File, аббревиатура, которую сочиняешь по ходу создания проекта, для типизирования файлов. Когда поток не нужен, нужно от него избавиться, дабы не занимать память: Код:
Код:
Код:
Код:
...я не написал готовый код, наверное понятно почему.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 06.10.2012 в 15:58. |
|
07.10.2012, 12:20 | #24 | ||
Пользователь
Регистрация: 06.09.2012
Сообщений: 14
|
Что-то не получается у меня, ошибку выдает при выполнении процедуры загрузки, при сохранении - все хорошо.
Но, обо всем по порядку. Для лучшего понятия, я создал простую программу, в которой в первое поле вводится число, оно сохраняется в файли через поток, а во втором поле, по нажатию кнопки, оно же и выводится. Код:
А вот в моей игре, как я уже сказал ранее, почему-то не работает. Выдает ошибку (Фото ошибки прикрепил к сообщению). Вот процедура сохранения: Код:
Код:
UPD: Так, свою ошибку нашел, она была в этой строке: Код:
UPD2 (Опять вопрос): А с чем может быть связано, что он не по порядку считывает? Может разделитель какой нужен? Создал я два "отладочных" мемо, на входе записывается это: Цитата:
Цитата:
Map_Mass[y, x].View - это вид игрового объекта, их у меня 28, тип переменной View: byte. Код:
Код:
Последний раз редактировалось Slin; 07.10.2012 в 19:30. |
||
07.10.2012, 19:34 | #25 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,883
|
Без проекта тяжело сказать, но то, что я увидел по скрину - предполагаю массив не создан, надо вызвать до чтения из потока setlength(Map_Mass, 16, 16)
Ну и опять же , где константы под энто дело )) ? |
07.10.2012, 20:21 | #26 |
Пользователь
Регистрация: 06.09.2012
Сообщений: 14
|
Вот проект: Garden.rar.
Если честно, то мне опять стыдно за мой код, но обещаю, что исправлю его. Только разрешение надо подправить, я делал под свое 1280*1024. UPD: Свою проблему решил созданием еще одного массива в самой процедуре загрузки, теперь все хорошо. Вот ее вид: Код:
Последний раз редактировалось Slin; 07.10.2012 в 22:33. |
08.10.2012, 01:48 | #27 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Slin, ты не понял как читать данные с потока.
MapFileStream.Read(Map_mas[Y, X], MapFileStream.Size); - ошибка на пустом месте. Size возвращает размер потока в байтах, т.е. файла. Читать нужно по 1 байту, или по сколько у тебя клетка. Position потока двигается самостоятельно при каждом чтении на величину считываемого фрагмента, поэтому нужно ставить его при начале считывания и далее он сам двигается. Переделай. ...я не все почитал, сейчас нет времени, завтра все посмотрю.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 08.10.2012 в 01:50. |
08.10.2012, 09:32 | #28 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,883
|
Такс, на работе с утра прогнал проект.
Как уже заметил Beermonza, косяк с чтением не того размера данных приводил к ошибкам чтения. Помимо этого была ещё одна существенная проблема. Пока я старался понять её причину - переписал начатую, но незаконченую буферизацию, а то программа постоянно грузила картинки с диска, отрисовка с перезаписыванием в текстуры. Я сделал, что текстуры неизменны, а вся отрисовка ведётся в буфер, и только он выводится. Ну а ошибка - использование object вместо record . Обжект - устаревший тип и не рекомендуется к использованию. Если делать по простому - то использовать record, а если хочется посложнее - классы (полностью поддерживающие ООП вместо обжекта) Насчёт грамотного кода - конечно же повыводить многое в константы. Но ещё лучше произвести инкапсуляцию всяких вспомогательных вещей. Первее всего просятся "кнопки" - можно завести сущность кнопки - в ней указать положение и размер (4 числами - 2 координаты точек - левверх и правниз, а можно координаты левверха и ширина+высота) и текстуру. Написать функцию, которой передавать координаты мыши, а она будет выдавать какая кнопка в этих координатах. В самой функции просто организовать цикл по кнопкам с 1 (одним) IF, а не с 20 как сейчас. Ещё мне не очень нравится проверка по текстурам, а не по кодам (которые потом можно перевести в иные сущности, типа енумов, а текстуры - нет) Ну и хочу сразу сказать, что скорее всего, разные сущности - цветы, посадки и интерьер, или ещё какие, да и на случай переработки тоже, надо бы хранить в разных наборах, а клетку карты сделать хранящей код для каждой категории (чтобы, например, на плитку посадить кошку) Вот код исправленного модуля - в приложении. |
08.10.2012, 17:08 | #29 |
Пользователь
Регистрация: 06.09.2012
Сообщений: 14
|
Beermonza, phomm,
Спасибо, код исправил, сделал сохранение и загрузку, доделал буфер, изменил загрузку текстур. Только появился вопрос, как можно запомнить тип объекта, на котором располагается поставленный еще один объект? Как-то плохо выразился, лучше на примере объясню: В ячейку с координатами (0;0), я размещаю газон, т.е. Map_mass[0,0].View:=18 (18- номер Газона), потом я на газон хочу посадить кошку=> у ячейки (0;0) Map_mass[0,0].view:=14 (14 - Номер кошки, текстура - прозрачная). При загрузке сохраненной игры, получается, что в ячейке (0;0) располагается текстура кошки, без текстуры газона на заднем фоне. Как это можно решить? Можно ли создать еще одну переменную у массива, допустим Map_mass[x,y].BackFon и в нее записывать номер объекта, который находился в (x;y), до размещения туда другого объекта? А при загрузке сохраненной игры, восстанавливать сначала задний фон, а потом передний? Или есть какое - либо более логичное решение? Последний раз редактировалось Slin; 08.10.2012 в 17:11. |
09.10.2012, 10:14 | #30 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,883
|
Я об этом и писал выше. В данном случае, разумно будет выделить для клетки набор параметров (полей для записи о клетке), которые были бы независимы от других(т.е. задний фон не зависит от объекта на клетке - 2 параметра). В базовом исполнении, можно просто в клетке хранить соответствующие номера объектов (при желании можно и текстуры, точнее ссылки на них, в целом, так и есть сейчас).
Но при более сложной работе, это будет неоптимально по ряду критериев. Посему обозначьте примерный план для конечной цели проекта, будет проще советовать, какую схему удобнее выбрать. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Игра "Змейка" на 2 персоны | [Dethklok] | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 1 | 07.06.2011 14:24 |
Assembler.Игра "змейка". | Пупкин | Помощь студентам | 0 | 27.05.2010 00:08 |
Игра "Змейка" | program123 | Общие вопросы Delphi | 2 | 08.03.2009 23:49 |
Игра "Змейка" | spamer | Общие вопросы Delphi | 1 | 09.01.2009 04:22 |
Ещё одна игра "Змейка" | Simply-Art | Софт | 17 | 05.07.2007 04:10 |