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

Вниз

2D карта   Найти похожие ветки 

 
HellTrooper ©   (2002-11-10 13:30) [0]

Люди есть класс карты TMAP, который должен корректно отображать карту (размер тайтла 100х100) приведу код прорисовки...


Procedure TMap.BuildMap;
var i,j:integer;
rt:TRect;
begin
for i:=1 to MapRealSizeW div 100 do
for j:=1 to MapRealSizeH div 100 do
begin
rt.Left:=(i*100);
rt.Top:=(j*100);
rt.Right:=(i*100);
rt.Bottom:=(j*100);
if TestSrcImage(rt) then MapTextures.Items[MapDesc[(j*(MapRealSizeW div 100))+i ].ItemTexture].Draw(MapSurface,(100*i)-(MapPosition.X mod 100),(100*j)-(MapPosition.Y mod 100) ,0);
end;
end;


Здесь где-то ошибка с отрисовкой идея такова:

ТТТТТТ
ТЭЭЭЭТ
ТЭЭЭЭТ
ТТТТТТ


Отрисовка экрана:
destSur.Draw(0,0,DrawRect,MapSurface,false);

И процедура TMap.TestSrcImage(rc:Trect):boolean;

var
ScrRect:Trect;
rezzX:boolean;
rezzY:boolean;
begin
ScrRect.Left:=MapPosition.X-100;
ScrRect.Right:=MapPosition.X+Drawrect.Right-100;
ScrRect.Top:=MapPosition.Y-100;
ScrRect.Bottom:=MapPosition.Y+Drawrect.Bottom-100;
rezzX:=(rc.Left>=ScrRect.Left) and (rc.Left<=ScrRect.Right);
rezzX:=rezzX or
((rc.Right>=ScrRect.Left) and (rc.Right<=ScrRect.Right));
rezzY:=(rc.Top>=ScrRect.Top) and (rc.Top<=ScrRect.Bottom);
rezzY:=rezzY or
((rc.bottom>=ScrRect.Top) and (rc.bottom<=ScrRect.Bottom));
result:=rezzX and rezzY;
end;


Где-то глюк :( 3-ий день долбаюсь


 
Stucker   (2002-11-10 20:21) [1]

Удалено модератором


 
Ibrik   (2002-11-10 21:22) [2]

Вот мой код с использованием DelphiX. Всё работает, надеюсь
разберёшся, если чё пиши.

type
TMap=record
top : word;
left : word;
width : Word;
height : Word;
data : array [1..100,1..100] of byte;
end;


...

procedure DrawFon;
begin
for x:=1 to Round(Form1.DXDraw1.Display.Width/50)+1 do
for y:=1 to Round(Form1.DXDraw1.Display.Height/50)+1 do
Form1.DXImageList1.Items.Find(IntToStr(map.data[x+map.left div 50,y+map.top div 50])).Draw(Form1.DXDraw1.Surface,x*50-50-(map.left mod 50),y*50-50-(map.top mod 50),0);
{for x:=1 to 20 do}
end;


 
cyborg ©   (2002-11-11 09:23) [3]

Глюк тут:

for i:=1 to MapRealSizeW div 100 do
for j:=1 to MapRealSizeH div 100 do
begin
rt.Left:=(i*100);
rt.Top:=(j*100);
rt.Right:=(i*100);
rt.Bottom:=(j*100);

Нужно так:

for i:=0 to (MapRealSizeW div 100)-1 do
for j:=0 to (MapRealSizeH div 100)-1 do
begin
rt.Left:=i*100;
rt.Top:=j*100;
rt.Right:=rt.Left+100;
rt.Bottom:=rt.Top+100;


 
cyborg ©   (2002-11-11 09:25) [4]

Пардон :), даже так:

for j:=0 to (MapRealSizeH div 100)-1 do
for i:=0 to (MapRealSizeW div 100)-1 do
begin
rt.Left:=i*100;
rt.Top:=j*100;
rt.Right:=rt.Left+100;
rt.Bottom:=rt.Top+100;

Первый в цикле должен идти Y, за ним X


 
cyborg ©   (2002-11-11 09:29) [5]

Может ещё какие глюки есть, незнаю DelphiX поэтому сказать не могу.



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

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

Наверх




Память: 0.47 MB
Время: 0.012 c
4-30644
Wowa-K
2003-02-10 11:14
2003.04.10
Работа с окнами


14-30547
vopros
2003-03-24 14:13
2003.04.10
Где можно посмотреть лог сообщений net send?


1-30390
mask
2003-03-29 19:32
2003.04.10
Open API


3-30219
Jaxtor
2003-03-24 11:40
2003.04.10
Вывод значений в Excel


7-30633
Антон К.
2003-02-14 10:03
2003.04.10
Программирование Sound Blaster