Очередной глюк или кривые руки?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
trexxet
новенький
Сообщения: 31
Зарегистрирован: 25.03.2013 22:58:00
Откуда: Смоленск

Очередной глюк или кривые руки?

Сообщение trexxet »

Здравствуйте. Для простенькой игры пишу небольшой редактор карт. Карта представляет из себя квадрат из 8х8 тайлов. Всего имеется 8 видов тайлов. У них есть несколько параметров: Obstacle (препятствие, через которое можно стрелять), Wall (стена), Destroyable (стена/препятствие разрушимо), ID (вид тайла) и картинка (пока не реализована, да и не нужна в редакторе). Если Wall и Obstacle ложны, то это обычная земля/пол. Карта хранится в файле n.map.
Проблема такова: после заполнения таблицы (в ней в клетках указывается ID тайла в этом месте карты) и установки параметров слева жму кнопку "Сохранить". Если, не закрывая редактор, нажать "Загрузить", то все заработает без проблем. Но если закрыть редактор, открыть и нажать "Загрузить", то в случае запуска через Lazarus получиться беспорядочный набор чисел, в случае запуска .exe будет ошибка "Access violation". Помогите, пожалуйста, разобраться с этой проблемой, т.к. она довольно странная и ошибки в коде я не вижу.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
xdsl
постоялец
Сообщения: 131
Зарегистрирован: 15.01.2009 12:49:03

Сообщение xdsl »

Вы неправильно сохраняете и считываете экземпляры класса TTlile. По сути Вы сохраняете и считываете указатели (см. размер файла n.map)
Если хотите работать с объектами, пользуйтесь для хранения классом Tfilestream. В этом случае придется порождать их от TComponent.
trexxet
новенький
Сообщения: 31
Зарегистрирован: 25.03.2013 22:58:00
Откуда: Смоленск

Сообщение trexxet »

Спасибо. Решил сделать TTile не классом, а записью, и в игре сделать перевод из записи в класс.
Ответить