Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.29;
Скачать: CL | DM;

Вниз

Что-то плохое происходит... :(   Найти похожие ветки 

 
Malkavian   (2005-08-17 21:18) [0]

Добрый день!

Переделываю исходники joffa - аркадной игрушки. Она исользует DelphiX.
Спрайты там размера 32х32. Мне нужно их немного увеличить. Сделал 128х128. Размеры тайлов (земля и прочие поверхности) - остались неизменными - 32х32
До этого момента - все ОК. Проблемы начинаются в процедуре обсчета маски тайлов - тайл может быть "не под самый край" -  а неровный. Для этого там используется процедура создания маски.


Type hubba = Array[0..1] Of byte;

Procedure TMainForm.calcbmask(imageno: integer);
Var p, xx, yy       : integer;
 d                 : ^hubba;
Begin
 For p := 0 To dximagelist1.Items[imageno].PatternCount - 1 Do
 Begin
   For yy := 0 To 31 Do
   Begin
     d := DXImageList1.Items[imageno].Picture.Bitmap.ScanLine[yy + (p Shr 4) Shl 4];
     For xx := 0 To 31 Do
       If (d[(xx + (p Mod 32) Shl 5) * 3 + 2] = 255) And (d[(xx + (p Mod 32) Shl 5) * 3 + 1] = 0) And (d[(xx + (p Mod 32) Shl 5) * 3] = 0) Or
       (d[(xx + (p Mod 32) Shl 5) * 3 + 2] = 0) And (d[(xx + (p Mod 32) Shl 5) * 3 + 1] = 0) And (d[(xx + (p Mod 32) Shl 5) * 3] = 255) Then
       Begin
         bmask[p, xx, yy] := true;
       End Else bmask[p, xx, yy] := false;
   End;
 End;
End;



Если все запускать в таком виде как оно есть - спрайты (игрок) - 128х128 а тайлы(земля и прочие грибочки) 32х32 - алгоритм не отрабытывает.
Поэтом в цикле я меняю yy и xx от 0 до 127.

ЗДЕСЬ и выплывет мрачный глюк - игра вылетает с ошибкой :(
Пробую менять Type hubba = Array[0..1] Of byte; на Type hubba = Array[0..1] Of word; - та же ошибка.

ОГРОМНАЯ ПРОСЬБА - помогите пожйлуйста - бьюсь над этим неделю - ничего толкового не выходит :(
Сами исходники joffa лежат тут:
http://delphigfx.mastak.ru/gameproject/joffa/code.rar (код)
http://delphigfx.mastak.ru/gameproject/joffa/res.rar (ресурсы)


 
Malkavian   (2005-08-18 10:49) [1]

up


 
Sapersky   (2005-08-18 14:25) [2]

Если спрайты разного размера, нужно передавать размеры в процедуру, а дальше... дальше... проще заново написать, чем в таком коде разбираться.
Ну, могу предположить, что размеры спрайта нужно вписать не только в for, но и в выражения вроде (p Mod 32). А может, и shl нужно другое ставить (shl 5 это * 32). А может, и не нужно.



Страницы: 1 вся ветка

Текущий архив: 2006.01.29;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.043 c
3-1133119759
Sozon
2005-11-27 22:29
2006.01.29
SQL + LookUp


4-1128023725
Руслан
2005-09-29 23:55
2006.01.29
Как в Win98 получить адреса COM и LPT портов


2-1136884376
Nirvana
2006-01-10 12:12
2006.01.29
Использование функций одного модуля в другом


1-1135589157
DVM
2005-12-26 12:25
2006.01.29
StretchBlt на канву формы - искажение изображения


4-1132163658
Хинт
2005-11-16 20:54
2006.01.29
DLL, LoadLibrary и ReadProcessMemory