Форум: "Игры";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];
ВнизСпрайтовая карта Найти похожие ветки
← →
Извращенец (2002-07-09 17:36) [0]Вот скачал статью про создание карт методом спрайтов, скачал исходники, но!!! они не компилируются. в лучшем случае ошибка . используй Ф7 и т.д и т.п.. плиз хелп. для РПГ нудо
← →
3d[Power] (2002-07-09 18:44) [1]попробуй избавится от ошибки - будет компилится =))))))
← →
Mirovodin (2002-07-09 21:08) [2]Я писал эти примеры на Delphi 3, какие именно примеры не компилируются ? Названия ориг-х архивов, версия Delphi, ошибка компилятора (только не в виде bmp файла со скрин_штотом рабочего стола, можете смеяться но получал по почте и такое:)) )
← →
Извращенец (2002-07-09 21:16) [3]Project proj.exe raised exception class ElistError with message "List index out of bounds (10100)". Process stopped. Use Step or Run to continue.
Дословно все вывел. не компилируется 2d_4c. Самый последний. вроде так все понятно. но тут проблема.
в общем статья хорошая!!
← →
Извращенец (2002-07-09 22:35) [4]Delphi 6
← →
Mirovodin (2002-07-10 10:33) [5]Хорошо, если время будет разберусь. И обновлю пример.
← →
Извращенец (2002-07-13 20:23) [6]вот нашел ошибку, которой, видимо, на Д3 не было:
Procedure TFlur2.Draw(DestHandle:TCanvas;X,Y:Integer;SourceRect:TRect);
var
...
begin
...
X1:=Trunc(Int(SourceRect.Left/SpriteWH));
Y1:=Trunc(Int(SourceRect.Top/SpriteWH));
X2:=X1+Trunc( Round( SourceRect.Right/SpriteWH)); \\ лишнее: Round(Y2:=Y1+Trunc( Round( SourceRect.Bottom/SpriteWH)); \\ лишнее: Round(dX:=X1*SpriteWH-SourceRect.Left;
dY:=Y1*SpriteWH-SourceRect.Top;
...
end;
а та ошибка была из-за моей невнимательности, прошу меня извинить
А вот еще вопрос, почему карту можно делать только квадратную. Хотлось бы понять...
← →
Mirovodin (2002-07-14 16:15) [7]А там алгоритм расчета смещения заложен такой, хотя если адаптировать то можно и прямоугольную. С квадратной проще. По поводу Round правильно.
← →
Извращенец (2002-07-14 19:50) [8]Спасибо,
и вот еще, почему это:
procedure TForm2.Timer5Timer(Sender: TObject);
begin
Flur.Draw(Buffer.Canvas,0,0,Screen);
Sprite.DrawNext(Buffer.Canvas,Screen);
CursorList.draw(Buffer.Canvas,CursorX,CursorY,0);
Bitblt(form2.canvas.handle,0,0,600,600,
Buffer.canvas.handle,0,0,SRCCopy);
end;
и это:
procedure TThread.Work;
begin
Flur.Draw(Buffer.Canvas,0,0,Screen);
Sprite.DrawNext(Buffer.Canvas,Screen);
CursorList.draw(Buffer.Canvas,CursorX,CursorY,0);
Bitblt(form2.canvas.handle,0,0,600,600,
Buffer.canvas.handle,0,0,SRCCopy);
end;
не приводит к одному и тому же результату?
К стати, после переведения слежения за спрайтом карты(как в Диабло карта крутится за спрайтом) у меня иногда спрайт не рисуется, вместо него - ничего. и во время усердного обследования случайной карты он иногда появляется, а потом пропадает. если нужен код , то могу предоставить.
← →
Mirovodin (2002-07-15 10:46) [9]Скорее всего у спрайта где то не верно координаты просчитываются, я этот пример давно не смотрел. Мгут быть и ошибки, нужно за него сесть "вплотную" и переписать, да все времени не хватает. А таймер на поток можно переделать, так еще быстрее будет.
← →
Извращенец (2002-07-15 19:57) [10]>А таймер на поток можно переделать, так еще быстрее будет.
я почему вывел ентот код!? проблема такая: вот весь код скопировал из ОнТаймер в Work потока ( ну абсолютно тоже самое!!!) и только вроде все быстрее должно (с этой целью и поток делал) а оно не рисует карту, спрайт, курсор мышиный.
Про спрайт я думаю, это я наизвращал вот и не рисуется иногда. Ведь вроде координаты у меня одни и теже - по центру экрана. Значит не в координатах дело.
← →
VitGun (2002-09-02 20:35) [11]Извращенец, у меня был головняк только с round, заменил на Int и все работает...больше проблем не было. У меня Delphi 5 EE, и DelphiX 2000.07.17.
← →
Namo (2002-09-04 22:14) [12]Извращенец
Да вы правы, у меня то же самое оказалось. После исправления вами указанного кода были те же симптомы :))
Чтоб исправить надо вставить этот код: вместо настоящей процедуры
Procedure TSprite.Rotate(AAngle:integer);
begin
FAngle:=FAngle+AAngle;
If FAngle>315 then FAngle:=0;
if FAngle<0 then FAngle:=315+Aangle;
end;
> Mirovodin
0 45 90 135 180 225 270 315 360
1 2 3 4 5 6 7 8 9
советую вам обратить внимание на то, что угол 360 и 0 имеют одно напрвление, и получается по этому лишниее девятое направление. Было бы не плохо обновить примеры.
ava hortaё
Feanturi: Valanyё Namo a Irmo // XXVII.III.LXXXVIII
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c