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

Вниз

Спрайтовая карта   Найти похожие ветки 

 
Извращенец ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
3-38025
Dracula2000
2003-01-29 09:57
2003.02.13
InterBase 6


1-38296
Sem
2003-02-05 20:50
2003.02.13
TStrings


14-38521
Шишкин Илья
2003-01-26 19:09
2003.02.13
Помогите с компонентом


3-38121
Big_Rom
2003-01-28 07:20
2003.02.13
oracle и тип нумбер


1-38311
Son!K
2003-02-03 13:50
2003.02.13
Опять Hex