forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Просьба помочь с оптимизацией... (http://forum.boolean.name/showthread.php?t=13641)

Rameron 04.11.2010 16:01

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

PHP код:

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 отдельных картинок и заносятся в соответствующие массивы.

odd 04.11.2010 16:55

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

PHP код:

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

А оптимальнее всего вообще все спрайты хранить в одной картинке.

Rameron 04.11.2010 17:38

Ответ: Просьба помочь с оптимизацией...
 
Цитата:

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

PHP код:

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

А оптимальнее всего вообще все спрайты хранить в одной картинке.

Спасибо, либой не додумался пользоваться. Только сначала надо поворачивать спрайт, а потом указывать координаты вывода, а то он у меня не прямоугольный:)
А можно как-то выгружать переменные или они автоматически выгружаются?

odd 05.11.2010 01:07

Ответ: Просьба помочь с оптимизацией...
 
Есть команда RemoveSprites которая удаляет из памяти все спрайты.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot