|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Создание карты из тайлов
Здравствуйте! хочу создать карту из тайлов (тайлы беру на sasplanet) с возможностью изменения масштаба карт и подгрузкой недостающих тайлов при перемещении карты мышью. Скидываю ссылку на яндекс дискhttps://yadi.sk/d/wSpsdPd4hdZZZ) что получилось. Но проблема в том что на моем ноутбуке программа работает достаточно быстро(Intel Core i5-4200U, 1.6GHz и 6GB оперативы), а вот на компьюторах по проще она меняет масштаб с заметной задержкой, подскажите что сделать чтобы это исправить?)))
|
#2
|
||||
|
||||
А вот как запустить GTA на 486й машинке никак, выходит ваша нью-гугель-карта слишком затратна по железу - поменяйте видеосистему, добавьте оперативы\проц или тогда уменьшите видимый на экране размер оконца карты и выбирайте "тайлы" с таким разрешением\качеством, чтоб поменьше весили, грузиться в память они будут веселее
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
|||
|
|||
вопрос : что изменить в коде чтобы уменьшить время изменения масштаба на более слабых машинах?
|
#4
|
||||
|
||||
алгоритм поменять
Пишу программы за еду. __________________ |
#5
|
|||
|
|||
может подскажите какой алгоритм? что изменить?
|
#6
|
||||
|
||||
Процедуру подгрузки активных фрагментов при перемещении общего холста покажите пжлст
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#7
|
|||
|
|||
Код:
procedure sdvig; //реализация подгрузки тайлов var x,y,sdv:word; begin sdv:=512; //число = количество сдвинутых тайлов*256 //******* смещаем карту по оси Х ******** if X_sdvig+Form1.left<2*256 then begin //смещаем карту на тайл BitBlt(buf2.Canvas.Handle, sdv, 0, buf2.Width,buf2.Height, buf.Canvas.Handle,0, 0, SRCCOPY); //заполняем новыми тайлами Title_X:=Title_X-2; for x:=0 to 1 do for y:=0 to buf_y do begin fileName:=pyt_k_kartam+'\maps.yandex.com.Map\z'+inttostr(z)+'\'+ inttostr((Title_X+x) div 1024)+'\x'+inttostr(Title_X+x)+'\'+ inttostr((Title_y+y) div 1024)+'\y'+inttostr(Title_Y+y)+'.png'; if FileExists(fileName) then IMG.Picture.LoadFromFile(fileName) else IMG.Picture.LoadFromFile(GetCurrentDir+'\404.png'); buf2.Canvas.Draw(x*256,256*(y),IMG.Picture.Graphic); end; buf.picture.bitmap.Assign(buf2.Picture); X_sdvig:=X_sdvig+sdv; if marker_flag=true then marker; if svasy_marker_flag=true then svasy_marker; exit; end; if X_sdvig+Form1.Width>(buf_x-2)*256 then begin //смещаем карту на тайл BitBlt(buf2.Canvas.Handle, 0, 0, buf2.Width,buf2.Height, buf.Canvas.Handle,sdv, 0, SRCCOPY); //заполняем новыми тайлами Title_X:=Title_X+2; for x:=buf_x-2 to buf_x-1 do for y:=0 to buf_y do begin fileName:=pyt_k_kartam+'\maps.yandex.com.Map\z'+inttostr(z)+'\'+ inttostr((Title_X+x) div 1024)+'\x'+inttostr(Title_X+x)+'\'+ inttostr((Title_y+y) div 1024)+'\y'+inttostr(Title_Y+y)+'.png'; if FileExists(fileName) then IMG.Picture.LoadFromFile(fileName) else IMG.Picture.LoadFromFile(GetCurrentDir+'\404.png'); buf2.Canvas.Draw(x*256,256*(y),IMG.Picture.Graphic); end; buf.picture.bitmap.Assign(buf2.Picture); X_sdvig:=X_sdvig-sdv; if marker_flag=true then marker; if svasy_marker_flag=true then svasy_marker; exit; end; //******* смещаем карту по оси Y ******** if Y_sdvig+Form1.top<2*256 then begin //смещаем карту на тайл BitBlt(buf2.Canvas.Handle, 0, sdv, buf2.Width,buf2.Height, buf.Canvas.Handle,0, 0, SRCCOPY); //заполняем новыми тайлами Title_Y:=Title_Y-2; for y:=0 to 1 do for x:=0 to buf_x do begin fileName:=pyt_k_kartam+'\maps.yandex.com.Map\z'+inttostr(z)+'\'+ inttostr((Title_X+x) div 1024)+'\x'+inttostr(Title_X+x)+'\'+ inttostr((Title_y+y) div 1024)+'\y'+inttostr(Title_Y+y)+'.png'; if FileExists(fileName) then IMG.Picture.LoadFromFile(fileName) else IMG.Picture.LoadFromFile(GetCurrentDir+'\404.png'); buf2.Canvas.Draw(x*256,256*(y),IMG.Picture.Graphic); end; buf.picture.bitmap.Assign(buf2.Picture); Y_sdvig:=Y_sdvig+sdv; if marker_flag=true then marker; if svasy_marker_flag=true then svasy_marker; exit; end; if Y_sdvig+Form1.Height>(buf_Y-2)*256 then begin BitBlt(buf2.Canvas.Handle, 0, 0, buf2.Width,buf2.Height, buf.Canvas.Handle,0, sdv, SRCCOPY); Title_Y:=Title_Y+2; for Y:=buf_Y-2 to buf_Y-1 do for X:=0 to buf_X do begin fileName:=pyt_k_kartam+'\maps.yandex.com.Map\z'+inttostr(z)+'\'+ inttostr((Title_X+x) div 1024)+'\x'+inttostr(Title_X+x)+'\'+ inttostr((Title_y+y) div 1024)+'\y'+inttostr(Title_Y+y)+'.png'; if FileExists(fileName) then IMG.Picture.LoadFromFile(fileName) else IMG.Picture.LoadFromFile(GetCurrentDir+'\404.png'); buf2.Canvas.Draw(x*256,256*(y),IMG.Picture.Graphic); end; buf.picture.bitmap.Assign(buf2.Picture); Y_sdvig:=Y_sdvig-sdv; if marker_flag=true then marker; if svasy_marker_flag=true then svasy_marker; exit; end; end; Последний раз редактировалось Admin, 03.07.2015 в 21:58. |
#8
|
||||
|
||||
т.е по данному алгоритму выходит что при любом сдвиге всё время происходит загрузка картинок, их подгонка под контейнер с показом на форме, - жестко по отношению к системе. Можно добавить проверку положения отображаемого фрагмента и подгружать следующий только если видимая часть выходит за пределы имиджа
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#9
|
|||
|
|||
как раз таки и происходит проверка. x_sdvig и y_sdvig это переменные которые хранят количество пикселей от границы всего изображения до границ отображаемого на экране куска изображения.
|
#10
|
|||
|
|||
Тема еще актуальна! Может кто нибудь подскажет выход из этой ситуации???
|