это я понял. у меня все работает.Проблема в другом: в примере с шестиугольниками сетка рисуется и считается в кординате 0,0 .А мне нужно ее сместить.Напимер в центр экрана.В какую строчку добавить коэфициент смещения? Куда только не пробыва не работает.
Ни кто не поможет?Может из-за оператора Int, как он должен в данной ситуации работать в какую сторону округлять?
вот справка по моему Int-у.
Int конвертирует дробное, приравнивая его к ближайшему целому числу.
ПОМНИТЕ: Это не традиционное значение Int в Basic.
Как насчет чисел, которые на одинаковом отдалении между целыми?
Округляется к ближайшему четному целому:
Int( 2.5 ) ... дает 2
Int( 3.5 ) ... дает 4
Скорее всего проблема из-за этого.
Jlemyp
"Int в Basic" приравнивает к меньшему целому, даже отрицательные значения. Поэтому в Basic без проблем работает при смещении координат в любом направлении.
int(-8.8)=-9
int(8.8)= 8
В бейсик варианте для смещения точки "0,0" код не нужно менять вообще. Достаточно сменить Scale параметры формы.
Mikle спасибо! Один вопрос решил у меня Int не так работал заменил на другой оператор. А вот про смещение не понял, какие Scale параметры формы? Ты имеешь ввиду масштаб ячеек? Я хочу что-бы сетка рисовалась допустим в правом нижнем углу экрана,а не навесь экран.
Jlemyp
> не понял, какие Scale параметры формы
В бейсике можно задать форме свойства: ScaleTop, ScaleHeight, ScaleLeft, ScaleWidth. Названия говорят сами за себя. После этого все ф-ции, возвращающие координаты (типа MouseMove) и все использующие координаты-параметры (типа Pset, Line, Move) будут использовать эту систему координат. Перевод автоматический.
долго искал.. нашёл адекватный код... на с++ тайл можно найти в staggered isometric map
Vector2 vPos = vMousePos; float x = floorf(( vPos.x + ( vPos.y - m_fHeightSegment / 2.f ) * 2.f ) / m_fWidthSegment ); float y = floorf( ( vPos.y - ( vPos.x - m_fWidthSegment / 2.f ) / 2.f ) / m_fHeightSegment ); int tx = static_cast< int >( floorf( ( x - y ) / 2.f ) ); int ty = static_cast< int >( y + x );
gary_cho, спасибо за код
staggered isometric map на VB6
Dim GrilleU As Integer 'x Dim GrilleV As Integer 'y Dim ISO_HEIGHT As Integer Dim ISO_WIDTH As Integer ISO_WIDTH = 46 ISO_HEIGHT = 24 UX = Int((X + (Y - ISO_HEIGHT / 2) * 2) / ISO_WIDTH) VY = Int((Y - (X - ISO_WIDTH / 2) / 2) / ISO_HEIGHT) GrilleU = Int((UX - VY) / 2) GrilleV = VY + UX 'X0 = GrilleU * ISO_WIDTH + (GrilleV Mod 2) * (ISO_WIDTH / 2) 'Y0 = GrilleV * (ISO_HEIGHT / 2) CenterX = GrilleU * ISO_WIDTH + (GrilleV Mod 2) * (ISO_WIDTH / 2) + (ISO_WIDTH / 2) CenterY = GrilleV * (ISO_HEIGHT / 2) + (ISO_HEIGHT / 2) Текст1.Text = GrilleU & " (" & UX & ")" Текст2.Text = GrilleV & " (" & VY & ")" Текст3.Text = X Текст4.Text = Y Текст5.Text = CenterX Текст6.Text = CenterY
Смотрю http://www.redblobgames.com/grids/hexagons/ в треде ещё не упоминали.
Теперь я упомянул.
Хронология темы меня радует чем-то.
Тема в архиве.