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

procedure mainMenu;
var work:image;
startIm:array[0..5] of image;
configIm:array[0..5] of image;
loadIm:array[0..5] of image;
exitIm:array[0..5] of 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
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Просьба помочь с оптимизацией...
А зачем их хранить отдельно в массивах и зачем вообще резать?
Можно загрузить картинки как спрайты и выводить потом нужные кадры спрайта. Lib_arcade такое может. Например:
AddSprite(LoadImage('/start.png'), w, h); // Загрузка спрайта 0 AddSprite(LoadImage('/config.png'), w, h); // Загрузка спрайта 1 AddSprite(LoadImage('/load.png'), w, h); // Загрузка спрайта 2 AddSprite(LoadImage('/exit.png'), w, h); // Загрузка спрайта 3
// Пример вывода спрайта 1, кадр 3 с вращением SetFrame(1, 3); // Устанавливаем кадр SpritePosition(1, x, y); // Куда выводить TransformSprite(1, 5); // Поворот на 90 градусов DrawSprite(1); //Отрисовка спрайта Repaint;
А оптимальнее всего вообще все спрайты хранить в одной картинке.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
04.11.2010, 17:38
|
#3
|
Оператор ЭВМ
Регистрация: 04.11.2010
Сообщений: 38
Написано одно полезное сообщение
|
Ответ: Просьба помочь с оптимизацией...
Сообщение от odd
А зачем их хранить отдельно в массивах и зачем вообще резать?
Можно загрузить картинки как спрайты и выводить потом нужные кадры спрайта. Lib_arcade такое может. Например:
AddSprite(LoadImage('/start.png'), w, h); // Загрузка спрайта 0
AddSprite(LoadImage('/config.png'), w, h); // Загрузка спрайта 1
AddSprite(LoadImage('/load.png'), w, h); // Загрузка спрайта 2
AddSprite(LoadImage('/exit.png'), w, h); // Загрузка спрайта 3
// Пример вывода спрайта 1, кадр 3 с вращением
SetFrame(1, 3); // Устанавливаем кадр
SpritePosition(1, x, y); // Куда выводить
TransformSprite(1, 5); // Поворот на 90 градусов
DrawSprite(1); //Отрисовка спрайта
Repaint;
А оптимальнее всего вообще все спрайты хранить в одной картинке.
|
Спасибо, либой не додумался пользоваться. Только сначала надо поворачивать спрайт, а потом указывать координаты вывода, а то он у меня не прямоугольный
А можно как-то выгружать переменные или они автоматически выгружаются?
|
(Offline)
|
|
05.11.2010, 01:07
|
#4
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Просьба помочь с оптимизацией...
Есть команда RemoveSprites которая удаляет из памяти все спрайты.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:02.
|