Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal

Ответ
 
Опции темы
Старый 16.07.2009, 04:23   #1
mustaeed
Оператор ЭВМ
 
Регистрация: 01.04.2009
Сообщений: 21
Написано 0 полезных сообщений
(для 0 пользователей)
инвертированная картинка

есть ли возможность в МПаскале с помощью библиотеки, прорисовать картинку не как обычно слева-направо, а наоборот справа-налево?
Это былобы удобно, меньше места в оперативке будет занимать, и в архиве тоже.
Потому что у меня в игре(и думаю не только у меня) почти все картинки с анимацией персонажей, дублируются только с флипом справоналево.
Появилась такая идея оптимизации.

Тема наверно ещё не обсуждалась.
(Offline)
 
Ответить с цитированием
Старый 16.07.2009, 09:40   #2
DJ PhoeniX
AnyKey`щик
 
Регистрация: 15.07.2009
Адрес: Интернет
Сообщений: 6
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: инвертированная картинка

Думаю, стоит написать функцию разворота в отдельном модуле, причём лучше на чистой Яве. И, при загрузке ресурсов, просто добавлять ещё и развёрнутый.
Идея ясна, примеров на яве до Ж, думаю, даже конечная библиотека во "Всемирной Помойке" найдётся... Поиск, как всегда, рулит.
(Offline)
 
Ответить с цитированием
Старый 16.07.2009, 09:46   #3
DJ PhoeniX
AnyKey`щик
 
Регистрация: 15.07.2009
Адрес: Интернет
Сообщений: 6
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: инвертированная картинка

Далеко искать не пришлось: http://forum.boolean.name/showthread.php?t=3515
Вот ещё: http://forum.boolean.name/showthread.php?t=6132

Последний раз редактировалось DJ PhoeniX, 16.07.2009 в 09:54. Причина: Добавил ссылку
(Offline)
 
Ответить с цитированием
Старый 16.07.2009, 17:25   #4
temned
Знающий
 
Аватар для temned
 
Регистрация: 29.07.2008
Адрес: Россия,Саратов
Сообщений: 206
Написано 22 полезных сообщений
(для 33 пользователей)
Ответ: инвертированная картинка

Да, просто нужно иногда поюзать поиск
(Offline)
 
Ответить с цитированием
Старый 23.07.2009, 13:55   #5
mustaeed
Оператор ЭВМ
 
Регистрация: 01.04.2009
Сообщений: 21
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: инвертированная картинка

мне нужно как раз для экономии оперативной памяти,
чтобы не загружать в оперативку дополнительные кадры,
то есть взять в определённом случае картинку и нарисовать обычным drawimage, когда персонаж идёт вправо,
а в другом случае взять эту же картинку, но просто прорисовать её в обратном направлении, когда персонаж идёт влево.
а все эти библиотеки загружают в память новую картинку но только инвертированную,так можно только лишь сэкономить размер jar файла.
ну а спрайты я вообще не люблю, помоему ими неудобно пользоваться,
лучше обычным способом подгружать каждый кадр отдельно.

я подсчитал у меня в игре на главного героя приходится 44 кадра для торса и 26 кадров для ног многовато помоему, и все эти кадры подгружены в оперативку, если научится прорисовывать картинку в обратном направлении то кадров станет в 2 раза меньше тк каждый кадр дублируется, нпример кадр стоя влево и кадр стоя вправо идентичный но инвертированный.

ну дак как можно такое вообще сделать или нет?
(Offline)
 
Ответить с цитированием
Старый 23.07.2009, 16:46   #6
DJ PhoeniX
AnyKey`щик
 
Регистрация: 15.07.2009
Адрес: Интернет
Сообщений: 6
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: инвертированная картинка

А я чёто не понял, а чем не устраивает
DrawImage(Rotate(image1),0,0);
например?
И для рисования на канве развёрнутой картинки там есть функция гдето...
(Offline)
 
Ответить с цитированием
Старый 23.07.2009, 18:23   #7
mustaeed
Оператор ЭВМ
 
Регистрация: 01.04.2009
Сообщений: 21
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: инвертированная картинка

а что возврашает функция - Rotate(image1) картинку?
соответственно на время прорисовки когда ты вызываеш - DrawImage(Rotate(image1),0,0); то программа на некоторое время создаёт
в памяти эту самую картинку а это мне кажется подобно тому чтобы делать так: drawimage(loadimage('/img.png'),0,0);
или я ошибаюсь?
(Offline)
 
Ответить с цитированием
Старый 23.07.2009, 20:07   #8
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: инвертированная картинка

Сообщение от mustaeed Посмотреть сообщение
а что возврашает функция - Rotate(image1) картинку?
соответственно на время прорисовки когда ты вызываеш - DrawImage(Rotate(image1),0,0); то программа на некоторое время создаёт
в памяти эту самую картинку а это мне кажется подобно тому чтобы делать так: drawimage(loadimage('/img.png'),0,0);
или я ошибаюсь?
Создавать то создает, только потом, сразу после отрисовки, должна уничтожить. А для инвертированной отрисовки нужно попиксельно отрисовывать из RGB-массива, что неприемлемо медленно, в отличие от стандартной отрисовки, когда просто происходит копирование всего изображения в один прием.
Если есть подозрение на утечку памяти, можно использовать "сборщик мусора" для уничтожения неиспользуемых объектов.
(Offline)
 
Ответить с цитированием
Старый 23.07.2009, 23:02   #9
mustaeed
Оператор ЭВМ
 
Регистрация: 01.04.2009
Сообщений: 21
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: инвертированная картинка

я понимаю что копирование изображения прорисовка его и потом удаление
не будет занимать много оперативной памяти но ведь это получается будет сильно тормозить процессор а нельзя ли рисовать картинку также как в drawimage но только начиная с последнего бита и в обратном направлении?
я то и спрашиваю потомучто сам незнаю даже возможно ли это.

вот например взять игру contra на NES(dandy), неужели там у них все дублтрующиеся кадры персонажей только повёрнутые в другую сторону,
существуют как отдельный кадр? мне кажется что там именно прорисовка идёт в обратную сторону а кадр один и тот же.
(Offline)
 
Ответить с цитированием
Старый 23.07.2009, 23:10   #10
mustaeed
Оператор ЭВМ
 
Регистрация: 01.04.2009
Сообщений: 21
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: инвертированная картинка

Сообщение от ViNT Посмотреть сообщение
Создавать то создает, только потом, сразу после отрисовки, должна уничтожить.
так это тоже что drawimage(loadimage('/img.png'),0,0);
тоже создаёт на время картинку, прорисовывает а потом удаляет.
но ведь никто не посоветует такой способ, гораздо меньше грузится процессор если заранее подгрузить картинку, и потом её только прорисовывать а не каждый repaint; снова загружать и удалять,
хотя опять же если всё время пользоваться drawimage(loadimage('/img.png'),0,0); то оперативки будет вообще почти не занято.
но зато как всё будет тормозить....

я же хочу и оперативки оптимально использовать и процессор вообще по минимуму.
(Offline)
 
Ответить с цитированием
Старый 23.07.2009, 23:14   #11
mustaeed
Оператор ЭВМ
 
Регистрация: 01.04.2009
Сообщений: 21
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: инвертированная картинка

Сообщение от ViNT Посмотреть сообщение
А для инвертированной отрисовки нужно попиксельно отрисовывать из RGB-массива, что неприемлемо медленно, в отличие от стандартной отрисовки, когда просто происходит копирование всего изображения в один прием.
это получается то что я хочу невозможно.
а как же contra интересно как там всё происходит?
(Offline)
 
Ответить с цитированием
Старый 24.07.2009, 23:04   #12
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: инвертированная картинка

Может быть, подобное возможно в более сложных языках(хотя и то врядли), но не в java, там нет прямой работы с памятью.

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


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Картинка мигает KingMaks Blitz3D 11 03.01.2010 21:50
Картинка в 2D над картинкой 3D Spiderman 2D-программирование 6 29.05.2009 01:01
Картинка на картинке Petrofan 3D-программирование 5 15.12.2008 20:17
Картинка взрыва Spiderman 2D-программирование 7 15.08.2008 11:48
Картинка на заднем фоне??? untonee 3D-программирование 13 20.10.2006 17:12


Часовой пояс GMT +4, время: 04:33.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com