Тема: Изометрия
Показать сообщение отдельно
Старый 25.07.2014, 19:32   #10
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений
(для 1,012 пользователей)
Хорошо Ответ: Изометрия

Никак не могу нормально отсечь углы на изометрической карте, типо так должно быть:



Проблема в том, что массив сам по себе 200*200*5 и сравнивать ооочень накладно.
Я просчитал минимальный ромб, который попадает в экран, но углы занимают сравнимую с ним площадь (рисую 200 тайлов в экран, и 200 за него - нагрузочно )

пытался сделать так:
--минимальные и максимальные значения индексов рисуемого массива (минимальный ромб)
fromI,_=screenToIso(0,0
toI,_=screenToIso(SW,SH)
dx,fromJ=screenToIso(SW,0)
_,toJ=screenToIso(0,SH)

dx math.abs(dx fromI) --длина от вершины ромба до угла экрана (по x в изо)
lx math.abs(toI-fromI) -- кол-во элементов в грани ромба

for i=fromI,toI do

        
local sY dx-i
        local eY 
-(lx dx)             
        if(
i>dxthen sY i-dx end
        
if(i>lx-dxthen eY = (lx-dx)-i end
         
        
for j=fromJ+sYtoJ eY do
             --
отрисовка
       end  
end 
но почему-то рисуемая область не смещается при скролинге в право и вверх, а только в лево и вниз (screenToIso учитывает скролл карты)

Нажмите на изображение для увеличения
Название: print.png
Просмотров: 1388
Размер:	95.0 Кб
ID:	20750

как нормально математически отсечку сделать?
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием