![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
2D карта [Delphi, Windows]
HellTrooper © (2002-11-10 13:30:00)Люди есть класс карты 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-ий день долбаюсь
cyborg (2002-11-11 09:29:00) [1]Может ещё какие глюки есть, незнаю DelphiX поэтому сказать не могу.
cyborg (2002-11-11 09:25:00) [2]Пардон :), даже так:
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:23:00) [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;
Ibrik (2002-11-10 21:22:00) [4]Вот мой код с использованием 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;
Stucker (2002-11-10 20:21:00) [5]Удалено модератором