ПрограммированиеФорум2D графика и изометрия

Отклонение в координатах.

#0
19:59, 27 апр 2013

Пишу изометрическую игру на AS 3.0
Вот так вычисляю формулы:

positionX = x1 + ( (x2-x1)/kol_wall )*i;
positionY = y1 + ( (y2-y1)/kol_wall )*i;
        
x = (positionX + positionY);
y = (positionY - positionX) * 0.50 - h;
Draw_wall_textur(x,y, tip_wall);

Draw_wall_textur - функция рисования тайла.
вот результат. Как видно у прямо стены есть отклонение.

Изображение

не могу понять в чём ошибка. Вроде бы всё логически правильно.

Фон рисую подобными формулами:

x = (pX + pY) * (WidthClass/2);
y = (pY - pX) * HeightClass * 0.50 - (HeightClass/2);
            
drawTexture(x, y, tip,xml_date_fon[i].x + "," + xml_date_fon[i].y);
#1
3:26, 28 апр 2013

накопление ошибки от округления?

#2
13:44, 28 апр 2013

Вроде бы всё норм. Проверил всё до функции Draw_wall_textur

private function Draw_wall_textur(x:Number,y:Number,tip:int){
  var wall_mc:MovieClip;
  if(tip == 1){
    wall_mc = new wall_l;
  }else if(tip == 2){
    wall_mc = new wall_r;
  }
  trace('1',x,y);
  wall_mc.x = x;
  wall_mc.y = y;
  trace('2',wall_mc.x,wall_mc.y);
  conteiner_wall.addChild(wall_mc);
}

и тут я наблюдаю округления.
Вот лог

1 -120 107.99999999999997
2 -120 107.95
1 -96 95.99999999999997
2 -96 95.95
1 -72 83.99999999999997
2 -72 83.95
1 -48 71.99999999999997
2 -48 71.95
1 -24 59.99999999999997
2 -24 59.95
1 0 47.999999999999986
2 0 47.95
1 24 35.999999999999986
2 24 35.95
1 48 23.999999999999986
2 48 23.95
1 72 11.999999999999986
2 72 11.95
1 96 -1.4210854715202004e-14
2 96 0
1 120 -12.000000000000007
2 120 -12
1 144 -24.000000000000007
2 144 -24
1 168 -36.00000000000001
2 168 -36
1 192 -48
2 192 -48
1 216 -60
2 216 -60
1 240 -72
2 240 -72
1 264 -84
2 264 -84
1 288 -96
2 288 -96
1 312 -108
2 312 -108
1 336 -120
2 336 -120

Ну вроде бы округления небольшие. не знаю смертельно ли это.

#3
15:51, 28 апр 2013

Кажется что то не то с формулами.

я заменил стену обычной линией. И 0.5 в форумулах на функция Math.sin(30 * Math.PI/180).

private function draw_line(n:int){
  conteiner_line.graphics.lineStyle(2, 0x000000);
      
  var x,y:Number;
      
  var positionX:int = new int(xml_wall[n].x1);
  var positionY:int = new int(xml_wall[n].y1);
      
  x = positionX + positionY;
  y = (positionY - positionX) * Math.sin(30 * Math.PI/180);
  trace(positionX,positionY,x,y)
  conteiner_line.graphics.moveTo(x, y);
      
  positionX = new int(xml_wall[n].x2);
  positionY = new int(xml_wall[n].y2);
      
  x = positionX + positionY;
  y = (positionY - positionX) * Math.sin(30 * Math.PI/180);
  trace(positionX,positionY,x,y)
  conteiner_line.graphics.lineTo(x, y);
      
}//end funtion

результат тот же.
Изображение

#4
16:36, 28 апр 2013

Со стеной всё в порядке, ошибка в выводе тайлов. У них смещение по горизонтали немного меньше «правильного», поэтому чем тайл дальше влево или вправо от центра, тем он к центру ближе. :-)

#5
17:00, 28 апр 2013

eMan.Lived
ооо.. точно спасибо.. отклонение было в 1 пиксель, а т.к. тайлов было 10 то конечное отклонение в 10 пикселей. теперь то всё сошлось..

ПрограммированиеФорум2D графика и изометрия

Тема в архиве.

Тема закрыта.