Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
1-38150
NAlexey
2003-02-03 11:15
2003.02.13
Сохранение TCollection в Run-time


14-38514
passm
2003-01-28 13:32
2003.02.13
Список используемых (открытых) файлов


14-38484
Ketmar
2003-01-22 15:05
2003.02.13
что делать?


1-38361
Сергей
2003-02-04 01:00
2003.02.13
Хранение информации


3-38116
Dizzy
2003-01-28 10:44
2003.02.13
Blob has been modified





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский