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

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

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

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 04.11.2010, 16:01   #1
Rameron
Оператор ЭВМ
 
Регистрация: 04.11.2010
Сообщений: 38
Написано одно полезное сообщение
Просьба помочь с оптимизацией...

Помогите, пожалуйста, оптимизировать код, если это вообще возможно. Кроме способа с двухмерным массивом:

procedure mainMenu;
var 
work:image;
      
startIm:array[0..5of image;
      
configIm:array[0..5of image;
      
loadIm:array[0..5of image;
      
exitIm:array[0..5of image;
      
w,h:integer;
begin
  work
:=LoadImage('start.png');
  
w:=getImageWidth(work)/6;
  
h:=getImageHeight(work);
  
startIm[0]:=rotate_image_from_image(work,0,0,w,h,5);
  
startIm[1]:=rotate_image_from_image(work,w,0,w,h,5);
  
startIm[2]:=rotate_image_from_image(work,w*2,0,w,h,5);
  
startIm[3]:=rotate_image_from_image(work,w*3,0,w,h,5);
  
startIm[4]:=rotate_image_from_image(work,w*4,0,w,h,5);
  
startIm[5]:=rotate_image_from_image(work,w*5,0,w,h,5);
  
  
work:=LoadImage('config.png');
  
w:=getImageWidth(work)/6;
  
h:=getImageHeight(work);
  
configIm[0]:=rotate_image_from_image(work,0,0,w,h,5);
  
configIm[1]:=rotate_image_from_image(work,w,0,w,h,5);
  
configIm[2]:=rotate_image_from_image(work,w*2,0,w,h,5);
  
configIm[3]:=rotate_image_from_image(work,w*3,0,w,h,5);
  
configIm[4]:=rotate_image_from_image(work,w*4,0,w,h,5);
  
configIm[5]:=rotate_image_from_image(work,w*5,0,w,h,5);
  
  
work:=LoadImage('load.png');
  
w:=getImageWidth(work)/6;
  
h:=getImageHeight(work);
  
loadIm[0]:=rotate_image_from_image(work,0,0,w,h,5);
  
loadIm[1]:=rotate_image_from_image(work,w,0,w,h,5);
  
loadIm[2]:=rotate_image_from_image(work,w*2,0,w,h,5);
  
loadIm[3]:=rotate_image_from_image(work,w*3,0,w,h,5);
  
loadIm[4]:=rotate_image_from_image(work,w*4,0,w,h,5);
  
loadIm[5]:=rotate_image_from_image(work,w*5,0,w,h,5);
  
  
work:=LoadImage('exit.png');
  
w:=getImageWidth(work)/6;
  
h:=getImageHeight(work);
  
exitIm[0]:=rotate_image_from_image(work,0,0,w,h,5);
  
exitIm[1]:=rotate_image_from_image(work,w,0,w,h,5);
  
exitIm[2]:=rotate_image_from_image(work,w*2,0,w,h,5);
  
exitIm[3]:=rotate_image_from_image(work,w*3,0,w,h,5);
  
exitIm[4]:=rotate_image_from_image(work,w*4,0,w,h,5);
  
exitIm[5]:=rotate_image_from_image(work,w*5,0,w,h,5);
end
Имеется 4 рисунка, в которых поочередно слева на право вырезается по 6 отдельных картинок и заносятся в соответствующие массивы.
(Offline)
 
Ответить с цитированием
Старый 04.11.2010, 16:55   #2
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: Просьба помочь с оптимизацией...

А зачем их хранить отдельно в массивах и зачем вообще резать?
Можно загрузить картинки как спрайты и выводить потом нужные кадры спрайта. Lib_arcade такое может. Например:

AddSprite(LoadImage('/start.png'), wh); // Загрузка спрайта 0
AddSprite(LoadImage('/config.png'), wh); // Загрузка спрайта 1
AddSprite(LoadImage('/load.png'), wh); // Загрузка спрайта 2
AddSprite(LoadImage('/exit.png'), wh); // Загрузка спрайта 3

// Пример вывода спрайта 1, кадр 3 с вращением
SetFrame(13); // Устанавливаем кадр
SpritePosition(1xy); // Куда выводить
TransformSprite(15); // Поворот на 90 градусов
DrawSprite(1); //Отрисовка спрайта
Repaint
А оптимальнее всего вообще все спрайты хранить в одной картинке.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Rameron (04.11.2010)
Старый 04.11.2010, 17:38   #3
Rameron
Оператор ЭВМ
 
Регистрация: 04.11.2010
Сообщений: 38
Написано одно полезное сообщение
Ответ: Просьба помочь с оптимизацией...

Сообщение от odd Посмотреть сообщение
А зачем их хранить отдельно в массивах и зачем вообще резать?
Можно загрузить картинки как спрайты и выводить потом нужные кадры спрайта. Lib_arcade такое может. Например:

AddSprite(LoadImage('/start.png'), wh); // Загрузка спрайта 0
AddSprite(LoadImage('/config.png'), wh); // Загрузка спрайта 1
AddSprite(LoadImage('/load.png'), wh); // Загрузка спрайта 2
AddSprite(LoadImage('/exit.png'), wh); // Загрузка спрайта 3

// Пример вывода спрайта 1, кадр 3 с вращением
SetFrame(13); // Устанавливаем кадр
SpritePosition(1xy); // Куда выводить
TransformSprite(15); // Поворот на 90 градусов
DrawSprite(1); //Отрисовка спрайта
Repaint
А оптимальнее всего вообще все спрайты хранить в одной картинке.
Спасибо, либой не додумался пользоваться. Только сначала надо поворачивать спрайт, а потом указывать координаты вывода, а то он у меня не прямоугольный
А можно как-то выгружать переменные или они автоматически выгружаются?
(Offline)
 
Ответить с цитированием
Старый 05.11.2010, 01:07   #4
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: Просьба помочь с оптимизацией...

Есть команда RemoveSprites которая удаляет из памяти все спрайты.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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