![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Пишу игру Worms, и мне нужен полу-прозрачный коричневый прямоугольник посередине экрана. Я его сделал, но теперь у меня всё тормозит.
Код:
procedure DrawInv(var b: TBitmap; k: Real);
type
PRGBArray = ^TRGBArray;
TRGBArray = array[0..10000] of TRGBTriple;
var x,y: Integer;
l: PRGBArray;
begin
for y:=50 to b.Height-51 do begin
l:=b.ScanLine[y];
for x:=50 to b.Width-51 do begin
l[x].rgbtBlue:=Round(l[x].rgbtBlue*(100-k)+14*k) div 100;
l[x].rgbtGreen:=Round(l[x].rgbtGreen*(100-k)+42*k) div 100;
l[x].rgbtRed:=Round(l[x].rgbtRed*(100-k)+106*k) div 100;
end;
end;
end;Подскажите, как ещё можно ускорить процесс? |
|
#2
|
|||
|
|||
|
Код:
l[x].rgbtBlue:=(255+l[x].rgbtBlue*a+14*(255-a)) shr 8;
l[x].rgbtGreen:=(255+l[x].rgbtGreen*a+42*(255-a)) shr 8;
l[x].rgbtRed:=(255+l[x].rgbtRed*a+106*(255-a)) shr 8; |
|
#3
|
||||
|
||||
|
спасибо)) неужели битовые операции выполняются НАСТОЛЬКО быстрее... но ведь ускорилось))
|
|
#4
|
||||
|
||||
|
Дробные числа сами по себе работают раз в 50 (а то и больше) медленнее целых.
Например: Код:
a:=b+a; Код:
mov eax, b add eax, a mov a, eax Если эти числа - real, то сначала 5 строк заполнения параметров, потом вызов функции перевода b из Real в Extended, потом то же самое для A, потом функция сложения и функция перевода результата из Extended в Real. Все эти функции от 10 команд. Функция Round тормозит прогресс. Приходится считать выражение дробным и переводить в целое. |