Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.07.2015, 22:01
Babyka Babyka вне форума
Прохожий
 
Регистрация: 02.07.2015
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Создание карты из тайлов

Здравствуйте! хочу создать карту из тайлов (тайлы беру на sasplanet) с возможностью изменения масштаба карт и подгрузкой недостающих тайлов при перемещении карты мышью. Скидываю ссылку на яндекс дискhttps://yadi.sk/d/wSpsdPd4hdZZZ) что получилось. Но проблема в том что на моем ноутбуке программа работает достаточно быстро(Intel Core i5-4200U, 1.6GHz и 6GB оперативы), а вот на компьюторах по проще она меняет масштаб с заметной задержкой, подскажите что сделать чтобы это исправить?)))
Ответить с цитированием
  #2  
Старый 03.07.2015, 05:17
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

А вот как запустить GTA на 486й машинке никак, выходит ваша нью-гугель-карта слишком затратна по железу - поменяйте видеосистему, добавьте оперативы\проц или тогда уменьшите видимый на экране размер оконца карты и выбирайте "тайлы" с таким разрешением\качеством, чтоб поменьше весили, грузиться в память они будут веселее
Ответить с цитированием
  #3  
Старый 03.07.2015, 08:09
Babyka Babyka вне форума
Прохожий
 
Регистрация: 02.07.2015
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

вопрос : что изменить в коде чтобы уменьшить время изменения масштаба на более слабых машинах?
Ответить с цитированием
  #4  
Старый 03.07.2015, 09:43
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Радость

алгоритм поменять
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 03.07.2015, 12:50
Babyka Babyka вне форума
Прохожий
 
Регистрация: 02.07.2015
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

может подскажите какой алгоритм? что изменить?
Ответить с цитированием
  #6  
Старый 03.07.2015, 13:15
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Процедуру подгрузки активных фрагментов при перемещении общего холста покажите пжлст
Ответить с цитированием
  #7  
Старый 03.07.2015, 20:34
Babyka Babyka вне форума
Прохожий
 
Регистрация: 02.07.2015
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Код:
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  
Старый 04.07.2015, 08:57
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

т.е по данному алгоритму выходит что при любом сдвиге всё время происходит загрузка картинок, их подгонка под контейнер с показом на форме, - жестко по отношению к системе. Можно добавить проверку положения отображаемого фрагмента и подгружать следующий только если видимая часть выходит за пределы имиджа
Ответить с цитированием
  #9  
Старый 04.07.2015, 11:09
Babyka Babyka вне форума
Прохожий
 
Регистрация: 02.07.2015
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

как раз таки и происходит проверка. x_sdvig и y_sdvig это переменные которые хранят количество пикселей от границы всего изображения до границ отображаемого на экране куска изображения.
Ответить с цитированием
  #10  
Старый 17.08.2015, 19:52
Babyka Babyka вне форума
Прохожий
 
Регистрация: 02.07.2015
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Тема еще актуальна! Может кто нибудь подскажет выход из этой ситуации???
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:00.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter