Ошибка с выводом графики - вопрос №705059

В делфи создал следующую процедуру. Она предназначена для рисования переходов между покрытиями земли в редакторе карт. Проблема заключается в следующем. Переходы рисуются только слева и сверху. А вот справа и снизу ничего не рисуется. Пробовал разные способы, но справа и снизу рисуется только без процедуры и с точным заданием координат прорисовки. Прошу помоч устранить ошибку чтобы рисовалось и снизу и справа. Заранее спасибо.

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-х и ничего не меняется. Я если я хочу рисовать всерху или слева — все рисует, справа или снизу — не рисует.
30.07.13
1 ответ

Ответы

Бросается в глаза цикл по i от 1 до 8

А внутри тела цикла — проверки на i = 1, i = 2, i = 3, i = 4

Зачем тогда 5, 6, 7, 8?

Может дело в этом?

31.07.13
Посмотреть всех экспертов из раздела Технологии > Delphi
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store