В делфи создал следующую процедуру. Она предназначена для рисования переходов между покрытиями земли в редакторе карт. Проблема заключается в следующем. Переходы рисуются только слева и сверху. А вот справа и снизу ничего не рисуется. Пробовал разные способы, но справа и снизу рисуется только без процедуры и с точным заданием координат прорисовки. Прошу помоч устранить ошибку чтобы рисовалось и снизу и справа. Заранее спасибо.
procedure DrawPerehod;
var i:Integer;
begin
if (x>0) and (y>0) and (X<Opt.Xmap-1) and (Y<Opt.Ymap-1) then
begin
for i:=1 to 8 do
begin
if (i=1) and (opt.Perehods[x,y,1]>0) and (opt.Map[x,y,0]>opt.Map[x,y+1,0]) then
Graf.buf.Canvas.Draw(x*opt.XCell,(y+1)*opt.YCell, Graf.perIMG[ Opt.Map[x,y,0], Opt.Perehods[x,y,2], 2 ]);
if (i=2) //and (opt.Perehods[x,y,2]>0) and (opt.Map[x,y,0]>opt.Map[x,y-1,0]) then
then Graf.buf.Canvas.Draw(x*opt.XCell,(y-1)*opt.YCell, Graf.perIMG[ Opt.Map[x,y,0], Opt.Perehods[x,y,2], 2 ]);
if (i=3) and (opt.Perehods[x,y,3]>0) and (opt.Map[x,y,0]>opt.Map[x-1,y,0]) then
Graf.buf.Canvas.Draw((x-1)*opt.XCell,y*opt.YCell, Graf.perIMG[ Opt.Map[x,y,0], Opt.Perehods[x,y,3], 3 ]);
if (i=4) and (opt.Perehods[x,y,4]>0) and (opt.Map[x,y,0]>opt.Map[x+1,y,0]) then
Graf.buf.Canvas.Draw((x+1)*opt.XCell,y*opt.YCell, Graf.perIMG[ Opt.Map[x,y,0], Opt.Perehods[x,y,4], 4 ]);
end;
end;
end;
Вызывается процедура в таймере так:
//prorisovka urovney kart
if OPt.MapCreate=True then
begin
for x:=0 to round(Opt.XScreen/opt.XCell)-1 do
for y:=0 to round(Opt.YScreen/opt.YCell)-1 do
for k:=0 to Opt.LevelmapMax-1 do
begin
//if ((Opt.map[i,j,k]>0) and (k>0)) or (k=0) then
Graf.buf.Canvas.Draw(x*opt.XCell,y*opt.YCell,Graf.Image[k,Opt.map[x,y,k]]);
//переходы для нулевого уровня;
if (k=0) then DrawPerehod;
end;
end;
Записи данных выглядят так:
Toption=record
Path:string;
Maximage:array[0..49]of Integer;
Map,Perehods:array of array of array of Integer;
LevelMap,LevelmapMax,Image:Integer;
XCell,YCell,Xmap,YMap,XScreen,YScreen,MX,MY,Kist:Integer;
DownGraph:Boolean;
MapCreate:Boolean;
end;
TGraph=record
buf:TBitmap;
Image:array of array of TBitmap;
PerIMG: array of array of array of TBitmap; //tekstura, n-perehoda, n-povorot
end;
Дополнение автора от 01.08.13 02:49:55 Нет, в том-то и дело, что я могу вписать и все 8 вариантов вместо 4-х и ничего не меняется. Я если я хочу рисовать всерху или слева — все рисует, справа или снизу — не рисует.
А внутри тела цикла — проверки на i = 1, i = 2, i = 3, i = 4
Зачем тогда 5, 6, 7, 8?
Может дело в этом?
Добрый день. Меня заинтересовал ваш ответ "Бросается в глаза цикл по i от 1 до 8А внутри тела цикла — проверки на i = 1, i = 2, i = 3, i = 4Зач..." на вопрос http://www.liveexpert.org/topic/view/705059-oshibka-s-vivodom-grafiki. Можно с вами обсудить этот ответ?