![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
|||
|
|||
|
Тема еще актуальна! Может кто нибудь подскажет выход из этой ситуации???
![]() |