Author Topic: Поиск части картинки на экране.  (Read 4559 times)

0 Members and 1 Guest are viewing this topic.

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Поиск части картинки на экране.
« on: November 27, 2016, 10:28:46 AM »
Здравствуйте.

В игре есть карта, малая часть которой отображается в соответствующей области экрана.
Мне нужно понимать в каких координатах я нахожусь.
Т.е. стандартными методами я делаю 100500 скринов кусочков отображаемой в данный момент карты и производя среди них поиск на соответствие с тем, что сейчас на экране, вычисляю местоположение.
Т.к. карта немаленькая, таких скринов получится очень много. Я хочу склеить из отображаемых кусочков единое поле которое и запишу допустим в map.bmp.
Будет всего один файл, и уже внутри него я бы хотел указывать сектор (координаты левого верхнего угла, координаты правого нижнего угла) и с этим извлечённым кусочком сравнивать то, что в данный момент на дисплее.
Согласитесь, это намного проще, чем иметь сотни отдельных кусочков *.bmp.

Внимание, вопрос: такое реально средствами Кликермана ?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Поиск части картинки на экране.
« Reply #1 on: November 27, 2016, 10:52:03 AM »
Конечно же нет.

Кстати в место картинок ты можешь снимать хеш. Если конечно графика не меняется.

Вот набросал на вскидку
Скрипт для создания базы данных:
Code: (clickermann) [Select]
GETSCREEN
$hash = PXLCRC(10,10, 100,100) // область снятия хеша

$inp = INPUTBOX("Введите инфу", "", 999)
IF($inp = "")
   HALT
END_IF
$str = STRCONCAT($hash, "|", $inp) // строка (Хеш, разделитель |, Координата)

$check = 0
FOR($a=1,$a<TFCOUNT("Hash.txt")+1) // проверка на дубликаты
   IF(STRPOS(TFREAD("Hash.txt", $a), $hash) > 0)
      $check = 1
   END_IF
END_CYC

IF($check = 0)
   TFWRITE("Hash.txt", $str) // запись хеша в базу данных
END_IF

HALT

Скрипт идентификации:
Code: (clickermann) [Select]
GETSCREEN
$hash = PXLCRC(10,10, 100,100) // область снятия хеша

$count_Hash = TFCOUNT("Hash.txt")+1
FOR($a=1,$a<$count_Hash)
   STRSEPARATE(TFREAD("Hash.txt", $a), "|", $arr)
   IF($hash = $arr[0])
      // Если верно
      $a=$count_Hash // прерываем цикл
      LOGWRITE ("Найден хеш: ", $arr[0], " В: ", $arr[1]) // вывод инфы в лог
   END_IF
   UNDEFINE($arr)
END_CYC

HALT
« Last Edit: November 27, 2016, 11:22:17 AM by Oraven »

Золотой

  • Оплот сообщества
  • ****
  • Posts: 312
    • View Profile
Re: Поиск части картинки на экране.
« Reply #2 on: November 27, 2016, 11:09:28 AM »
Кто-то здесь уже клеил карту и насколько мне помнится успешно.
Но зачем идти таким сложным путём, вся графическая игровая информация обычно хранится в браузере или игровом клиенте, взять от туда готовую карту проще чем клеить самоделку.

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Поиск части картинки на экране.
« Reply #3 on: November 27, 2016, 11:10:46 AM »
Кстати в место картинок ты можешь снимать хеш.

Спасибо.
А почему хеш, а не картинка ? Быстрее что ли ?
Мне картинки понятнее.
---
UPD: вник, да, хешем лучше.
Спасибо за идею.
« Last Edit: November 27, 2016, 11:22:58 AM by putman »

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Поиск части картинки на экране.
« Reply #4 on: November 27, 2016, 11:22:00 AM »
Кто-то здесь уже клеил карту и насколько мне помнится успешно.
Но зачем идти таким сложным путём, вся графическая игровая информация обычно хранится в браузере или игровом клиенте, взять от туда готовую карту проще чем клеить самоделку.
С хешем сделаю, вроде устраивает.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Поиск части картинки на экране.
« Reply #5 on: November 27, 2016, 11:25:09 AM »
Ну хотя бы потому что тебе не придется клепать картинки. Кроме того область хеша может быть большой, хоть весь экран, с картинками такое не прокатит. Ну и конечно быстрее.

Чуток дополнил первый скрипт. Вставил инпутбокс для удобства.

Золотой

  • Оплот сообщества
  • ****
  • Posts: 312
    • View Profile
Re: Поиск части картинки на экране.
« Reply #6 on: November 27, 2016, 11:27:35 AM »
вот например  сейчас взял из памяти браузера двумерное игровое поле размеры 4000: 3600 , по факту на экране отображается малая часть остальное в игре доступно после перетаскиваний.  Весит более 1мб поэтому картинка здесь не принимается. :-[
Ничего ты хешем не сделаешь. ибо не для карт это предназначено. 8)

Золотой

  • Оплот сообщества
  • ****
  • Posts: 312
    • View Profile
Re: Поиск части картинки на экране.
« Reply #7 on: November 27, 2016, 11:30:17 AM »
ключевая фраза ...Если конечно графика не меняется.
любой сдвиг игрового поля хоть на пиксель, любая пробегающая зверюшка на которые ты не обращаешь в игре ни какого внимания, любая анимация и до свидания любимый хеш - здравствуй вторая смена!
« Last Edit: November 27, 2016, 11:34:27 AM by Золотой »

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Поиск части картинки на экране.
« Reply #8 on: November 27, 2016, 02:03:25 PM »
Чуток дополнил первый скрипт. Вставил инпутбокс для удобства.
Cпасибо, инпут как раз пригодился, обзывать клетки карты.

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Поиск части картинки на экране.
« Reply #9 on: November 27, 2016, 02:04:36 PM »
ключевая фраза ...Если конечно графика не меняется.
любой сдвиг игрового поля хоть на пиксель, любая пробегающая зверюшка на которые ты не обращаешь в игре ни какого внимания, любая анимация и до свидания любимый хеш - здравствуй вторая смена!
У меня только карта, посторонних спрайтов нет.

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Поиск части картинки на экране.
« Reply #10 on: November 27, 2016, 02:29:00 PM »
Oraven, как автоматически установить фокус на окно инпута ?
---
Сам нашел, Вы мне уже подсказывали ранее.
« Last Edit: November 27, 2016, 02:32:42 PM by putman »

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Поиск части картинки на экране.
« Reply #11 on: December 16, 2016, 11:14:56 AM »
Здравствуйте.
Тут понадобилось сравнивать ХЕШ с маской.
Т.е. в центре прямоугольной области есть еще прямоугольник, хеш в котором нужно игнорировать.
Существует такое или нужно составлять картину из нескольких прямоугольников хеша, таким образом не затрагивая центральной части ?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Поиск части картинки на экране.
« Reply #12 on: December 16, 2016, 02:07:30 PM »
Тут понадобилось сравнивать ХЕШ с маской.
Т.е. в центре прямоугольной области есть еще прямоугольник, хеш в котором нужно игнорировать.
Существует такое или нужно составлять картину из нескольких прямоугольников хеша, таким образом не затрагивая центральной части ?
Такого нет.
Нужно делить на области. Брать 4 прямоугольника "вокруг" и для каждой считать хэш.