|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
16.05.2010, 14:25 | #11 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
С графическим движком удобно работать, когда рисование каждого изображения можно вызвать не по какому-то безликому числу, а по строковому идентификатору (по крайней мере в небольшом проекте). Поэтому можно использовать стандартный контейнер std::map, например, такой:
Код:
Код:
Собственно, я тут хотел показать только как использовать map. Вообще почитайте про стандартные контейнеры (STL-евские) - очень полезная вещь.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
16.05.2010, 14:57 | #12 |
Пользователь
Регистрация: 15.05.2010
Сообщений: 11
|
Спасибо, займусь !
"Один человек может спасти весь мир. При условии, что один человек может этот мир уничтожить." (c)
"Bad side of mind seize my dreams..." (c) |
16.05.2010, 18:23 | #13 |
Пользователь
Регистрация: 15.05.2010
Сообщений: 11
|
Проблема с std::map
Собственно, решил попробовать std::map. Написал небольшую прогу, где при нажатии на кнопку из файла '_all' грузится список файлов, и 2 изображения (в файле только 2 прописи) выводятся на экран. Суть проблемы: на экран, как и задумано, выводятся 2 тайла, но они одинаковые. Это изображение, которое в файле прописано последним. Подскажите, в чем ошибка?
Код:
"Один человек может спасти весь мир. При условии, что один человек может этот мир уничтожить." (c)
"Bad side of mind seize my dreams..." (c) Последний раз редактировалось Alex Roth; 16.05.2010 в 18:39. |
17.05.2010, 12:14 | #14 |
Пользователь
Регистрация: 15.05.2010
Сообщений: 11
|
Жаль что никто не может помочь
Попробую разобраться своими силами... Быть может кто-нибудь из участников форума писал спрайтовые движки? Хотелось бы посмотреть такой в работе. И вообще, насколько эффективно писать такие вещи на визуале?
"Один человек может спасти весь мир. При условии, что один человек может этот мир уничтожить." (c)
"Bad side of mind seize my dreams..." (c) |
17.05.2010, 12:56 | #15 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Дело в том, что у вас память под рисунок выделяется всего один раз:
Код:
Нужно просто при загрузке каждого изображения заново выделять память. Примерно так: Код:
Код:
Код:
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
17.05.2010, 13:12 | #16 |
Пользователь
Регистрация: 15.05.2010
Сообщений: 11
|
Гром, складывается ощущение, что вы единственный, кто работал с такими вещами . Спасибо! Исправил свои ошибки, все работает как надо. А насчет Free() - действительно подсмотрел в Delphi, когда работал на чистом С++ не использовал такие вещи вообще .
"GraphicEngine.h" подключает библиотеку "MyPoint.h" - где ее можно взять?
"Один человек может спасти весь мир. При условии, что один человек может этот мир уничтожить." (c)
"Bad side of mind seize my dreams..." (c) |
17.05.2010, 13:26 | #17 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Многие из вещей подсмотрены в разделе "СиОИ", просто там в основном пишут на Delphi.
А про MyPoint - совсем забыл. Это я просто сделал структуру для удобства обращения с координатами. Вот весь ее текст: Код:
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
19.05.2010, 13:39 | #18 | |
Пользователь
Регистрация: 15.05.2010
Сообщений: 11
|
Перегруз памяти
Снова проблема :
Код:
Изначально мое приложение занимает в памяти ~5900KB При выполнении функции повышается на ~50KB (при каждом нажатии на кнопку) Переваливает за ~10000KB - приложению хана. Ошибка: Цитата:
Отсюда вопрос - как удалить tmp_bmp. Или как другим способом избавится от заполнения памяти ?
"Один человек может спасти весь мир. При условии, что один человек может этот мир уничтожить." (c)
"Bad side of mind seize my dreams..." (c) Последний раз редактировалось Alex Roth; 19.05.2010 в 13:40. Причина: лишний код |
|
19.05.2010, 14:48 | #19 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Так... Пока вообще не понял, зачем несколько раз нажимать на кнопку. Вроде как это загрузчик всех изображений в память?
И еще немного не понял, что здесь происходит? Загружается картинка, разрезается на кусочки и кусочки сохраняются в памяти? Я лично реализовал это по-другому: сохранял в памяти всю картинку целиком, а вырезал нужный кадр из нее прямо во время рисования и тут же удалял. С хранением в виде кучи мелких кадров, наверное, будет быстрее работать, хотя сложность работы, да и объем памяти немного возрастут. Не берусь судить, какой из способов лучше, да и вопрос тут скорее в удобстве использования. Что касается собственно пожирания памяти - то все так и должно быть. При каждом запуске загрузки всех картинок выделяется память под новые картинки, а память, выделенная под старые, не освобождается. Правильно это должно работать следующим образом: в начале работы программы или, как вариант, при загрузке очередной игровой карты, происходит однократная загрузка всех вообще или всех относящихся к данной карте изображений. Во время выхода из программы или при необходимости загрузки новой карты вместо старой (правда, вы можете еще хранить несколько карт в кэше при желании - в этом случае - при необходимости удалить эту карту из кэша чтобы поместить туда новую) происходит очистка соответственно всех изображений вообще или всех изображений данной карты (во втором случае вы просто имеете свой собственный массив изображений карты одновременно с массивом изображений интерфейса и подобных вездесущих). Есть, конечно, еще вариант проверять, есть ли в map элемент с таким индексом и только тогда выделять память под кадр: Код:
А дескриптор неверный - это, скорее всего, у него просто память закончилась под многочисленные картинки.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Borland C++ Builder | m@rusl@12 | C++ Builder | 1 | 25.04.2010 15:47 |
c++ Borland builder | 4ika | C++ Builder | 1 | 27.11.2009 20:32 |
работа со StringGrid(borland C++ builder) | Greenoren | Помощь студентам | 4 | 20.11.2009 22:57 |
Проблема с установкой Borland C++ Builder 6!!! | seeker78 | Помощь студентам | 4 | 21.09.2009 20:04 |
Borland C++Builder 2007 | Sota | Софт | 1 | 14.03.2008 20:21 |