Author Topic: Навигация  (Read 2845 times)

0 Members and 1 Guest are viewing this topic.

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Навигация
« on: February 12, 2021, 06:33:49 PM »
Привет всем, помогите создать навигаци по меню. Посоветуйте что использовать, подпрограмму или лучше масив, со вторым не очень лажу. Нужно что то компактное и с легким обращением, типа нажать зеленую кнопку 1,2,3,4 или желтую 1,2,3,4. Есть вариан с зарание прописанными вычислениями но выглядит очень грамозко.
Code: (clickermann) [Select]
SUB(Сумка)
   $Sumka = 0
   WHILE($Sumka = 0)
      GETSCREEN(130,10, 1700,600)
      COLORMODE(7, 130,10, 1700,600)
      IF_PICTURE_IN (130,10, 1700,600, "..\Нарезка\Сумка.bmp")
         $Sumka = 1
         $x =  $_return1
         $y =  $_return2
         LOGWRITE ("коры ", $x, " x ", $y)
         // = Сейф ==
         $KLD_x = $x - 90
         $KLD_y = $y + 30
         // = Востанов ==
         $VOS_x = $x - 10
         $VOS_y = $y + 30
         // = Разбор ===
         $RAZ_x = $x + 15
         $RAZ_y = $y + 30
         // = Удалить ===
         $UDL_x = $x + 35
         $UDL_y = $y + 30
         // = Экипиров ===
         $EKP_x = $x + 210
         $EKP_y = $y + 170
         // = Зелья ===
         $BUT_x = $x + 210
         $BUT_y = $y + 205
         // = Прочее ===
         $YWK_x = $x + 210
         $YWK_y = $y + 270
         // = Удал/Раз ===
         $COM_x = $x - 210
         $COM_y = $y + 460
      ELSE
         KEYPRESS(#a) // Открыть сумку
         WAITMS(300)
      END_IF
   END_CYC
   WAITMS(100)
END_SUB


Щас обращение такое
Code: (clickermann) [Select]
Сумка()
LCLICK($KLD_x,$KLD_y)  // Открыть сейф


А хотелось бы, как в подпрограмме, типа вот так:
Code: (clickermann) [Select]
Сейф (1)

4.У.В.@.К

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Re: Навигация
« Reply #1 on: February 12, 2021, 08:49:01 PM »
Привет!
Вот, так примерно можно сделать удобный вызов нужного действия.
Code: (clickermann) [Select]
SUB(Сумка)
   $Sumka = 0
   WHILE($Sumka = 0)
      GETSCREEN(130,10, 1700,600)
      COLORMODE(7, 130,10, 1700,600)
      IF_PICTURE_IN (130,10, 1700,600, "..\Нарезка\Сумка.bmp")
         $Sumka = 1
         $x = $_return1
         $y = $_return2
         LOGWRITE ("коры ", $x, " x ", $y)
      ELSE
         KEYPRESS(#a) // Открыть сумку
         WAITMS(300)
      END_IF
   END_CYC
   WAITMS(100)
END_SUB


SUB(Открыть, $n)
   
   Сумка()
   
   SWITCH($n)
      CASE("Сейф")
         $x = $x - 90
         $y = $y + 30
      CASE("Востанов")
         $x = $x - 10
         $y = $y + 30
      CASE("Разбор")
         $x = $x + 15
         $y = $y + 30
      CASE("Удалить")
         $x = $x + 35
         $y = $y + 30
      CASE("Экипиров")
         $x = $x + 210
         $y = $y + 170
      CASE("Зелья") =
         $x = $x + 210
         $y = $y + 205
      CASE("Прочее")
         $x = $x + 210
         $y = $y + 270
      CASE("Удал/Раз")
         $x = $x - 210
         $y = $y + 460
   END_SWITCH
   
   LCLICK($x, $y) // Открыть то, что выбрано в параметре $n
   LOGWRITE ($x, " - ", $y) // проверка
   
END_SUB

Открыть ("Сейф")

HALT

А можно всё это вынести в #include, тогда в основном скрипте совсем красиво будет.)
Code: (clickermann) [Select]
#include "sumka.cms" // где то выше вызова подпрограммы "Открыть"
// ...
Открыть ("Сейф") // вызов подпрограммы "Открыть" в нужном месте и с нужным параметром

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Навигация
« Reply #2 on: February 13, 2021, 08:16:22 AM »
Твой вариант мне понравился, спасибо большое, красивый и удобный вызов, даже не придется комментировать ::)
Но хотелось бы увидеть, как бы это по другому можно написать, есть меню которое появляется каждый раз по другим координатам. из за этого нужно его все время определять. В меню как видно из скрипта есть кнопочки, которые нужно нажимать, по необходимости, и вот мне, интересно как бы вы это сделали?)

4.У.В.@.К

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Re: Навигация
« Reply #3 on: February 13, 2021, 03:08:05 PM »
Но хотелось бы увидеть, как бы это по другому можно написать, есть меню которое появляется каждый раз по другим координатам. из за этого нужно его все время определять. В меню как видно из скрипта есть кнопочки, которые нужно нажимать, по необходимости, и вот мне, интересно как бы вы это сделали?)

Если этот вопрос ко мне, то я бы так и сделал, как написал выше. Во первых, нужно найти опорную точку на этом меню. Которую можно быстро найти и от координат которой будут вычисляться координаты кнопок. Только непонятно в какой момент меню меняет свое местоположение. И надо ли его искать каждый раз перед очередным нажатием кнопок. Может быть достаточно будет найти его один раз, за всё время работы скрипта, и хранить его координаты в переменных? А в остальном всё тоже самое - запускаем подпрограмму типа Открыть("параметр"), которая пересчитает координаты для каждой кнопки и сделает клик, если нужно.
Ну а насчет того, чтобы написать по другому, то это можно. Можно например объединить две подпрограммы в одну. Можно отслеживать местоположение меню в отдельном потоке, через определенные интервалы времени. Можно использовать для хранения координат переменные, массив, строку, или файл. Если это весь скрипт, а не отдельный его кусок, то подпрограммы вообще можно выкинуть. И так далее...
И еще, я бы:
- кнопки вообще не искал, а назначил бы для них горячие клавиши;
- постарался зафиксировать меню;
- отказался от COLORMODE...
Если конечно всё это возможно. В общем, сначала максимально подготовил бы программу, с которой должен работать скрипт.
Короче, по месту смотреть надо, т.к. сейчас, лично у меня, вопросов больше, чем ответов. ))

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Навигация
« Reply #4 on: February 16, 2021, 07:47:30 PM »
Меню не вариан зафиксировать, кнопки назначить тоже нельзя, они открываются как вкладки подменю только кликами. Колормод можно попробовать убрать, но что это даст? Обращение идет раз в 10 мин. Мне больше интересно можно ли уменьшить количество строк? Думаю можно уменьшить 6 строк используя первые 4 кнопки общий х  и боковые общий у.

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
Re: Навигация
« Reply #5 on: February 16, 2021, 09:14:04 PM »
сделать поменьше, чтобы потом сделать побольше после вызова подпрограммы?)
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»