Технологии
Ошибка с выводом графики - вопрос №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;
Дополнение автора от август 1, 2013 г., 01:49:55
Нет, в том-то и дело, что я могу вписать и все 8 вариантов вместо 4-х и ничего не меняется. Я если я хочу рисовать всерху или слева — все рисует, справа или снизу — не рисует.
Виталий июль 30, 2013 г.
-
Всего ответов: 1
-
Бросается в глаза цикл по i от 1 до 8
А внутри тела цикла — проверки на i = 1, i = 2, i = 3, i = 4
Зачем тогда 5, 6, 7, 8?
Может дело в этом?
Похожие вопросы
Я не могу нормально играть в стиме с другом по сети, а также самому подключаться к любым серверам, это происходит не только в одной игре, но и в
июль 16, 2023 г.
Что делать, если все ругают тебя за проведение своего времени в играх?
Вопрос задан анонимно январь 28, 2023 г.
Что означают цифры в названии видеокарты? например Видеокарта GeForce RTX 3060 12 ГБ (45648), LHR ,не обрезана ли она?
октябрь 22, 2022 г.