![]() |
|
|
#1
|
||||
|
||||
|
У меня проблемма в следующем коде отрисовки гексагонов.
Имеется гексагон в файле Temp.bmp (в аттаче), надо их плотно утрамбовать (как пчелинные соты), у меня же получаеться совсем нето, куча разрывов и т. д. в m стринглисте храняться индефикаторы какую картинку загружать, там везде A. fmain.MAP - Timage на форме fmain. Код процедуры отрисовки: Код:
procedure drawm;
var
PIC: TBitmap;
i,k,d,f,l: integer;
c: char;
s: string;
begin
s:='';
f:=1;
l:=4;
PIC:=TBitmap.Create;
PIC.Height:=20;
PIC.Width:=30;
PIC.Transparent:=True;
for i:=0 to 19 do
begin
s:=m.Strings[i];
if f<2 then
begin
f:=f+1;
end
else
begin
f:=1;
end;
for k:=1 to 40 do
begin
c:=s[k];
if c='A' then
begin
PIC.LoadFromFile('Temp.bmp');
if f=1 then fmain.MAP.Canvas.Draw(k*30-21,i*20,PIC);
if f=2 then fmain.MAP.Canvas.Draw(k*30,i*20-4,PIC);
end;
end;
end;
PIC.Destroy;
end;
Пожалуйста помогите найти и исправить ошибки. |
|
#2
|
||||
|
||||
|
Решил проблему, если кому интересно:
Код:
procedure drawm;
var
PIC: TBitmap;
i,k,f,d: integer;
c: char;
s: string;
begin
s:='';
f:=4;
PIC:=TBitmap.Create;
PIC.Height:=20;
PIC.Width:=30;
PIC.Transparent:=True;
for i:=0 to 19 do
begin
s:=m.Strings[i];
for k:=1 to 4 do
begin
c:=s[k];
if c='A' then
begin
PIC.LoadFromFile('Temp.bmp');
end;
if c='B' then
begin
PIC.LoadFromFile('Green.bmp');
end;
if c='C' then
begin
PIC.LoadFromFile('Red.bmp');
end;
if c='D' then
begin
PIC.LoadFromFile('Yellow.bmp');
end;
if i mod 2>0 then d:=20 else d:=0;
fmain.MAP.Canvas.Draw(k*30-d,i*20-f,PIC);
end;
f:=f+4;
end;
PIC.Destroy;
end; |