Author Topic: Помогите решить ошибку.  (Read 1356 times)

0 Members and 1 Guest are viewing this topic.

MedweD

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Помогите решить ошибку.
« on: September 30, 2020, 03:05:08 PM »
Вообщем то пишу поток. В поток решил засунуть подпрограмму и ссылаюсь на нее. Когда пытаюсь запустить скрипт. Выдает вот это:
"ошибка при вызове функции POP()
Прерывать выполнение сценария?
"
"ошибка при интерпретации строки JMP(POP())
Прерывать выполнение сценария?
"
Подскажите как с этим берется. Не могу понять откуда вообще берется POP и что это такое.
Code: [Select]
THREAD(Атака, 1)
   IF_PICTURE_IN(0,0, $_xmax, $_ymax,"mob.bmp",-1,100)
      LDOWN($_return1,$_return2)
      Хит()
   else
      Хит()
      KEYDOWN(#A)
      WAITMS(50)
      KEYUP(#A)
   END_IF
   SUB(Хит)
      LOGWRITE ("Сообщение")
   END_SUB
   
   Хит()
   
END_THREAD

4.У.В.@.К

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Re: Помогите решить ошибку.
« Reply #1 on: September 30, 2020, 10:05:05 PM »
1. Описание подпрограммы должно быть в корне потока, в котором она будет вызываться. То есть, само описание не должно находиться ни в каких циклах, подпрограммах, или условиях. Короче,)) никаких оберток вокруг SUB ... END_SUB быть не должно. Единственной оберткой может быть поток.

2. Вызов подпрограммы делается ниже (по ходу сценария), чем её описание.

Как смог сформулировал.))

Code: (clickermann) [Select]
THREAD(Атака, 1)

   SUB(Хит)
      LOGWRITE ("Сообщение")
   END_SUB

   Хит() // вызов подпрограммы - в любом месте ТОГО ЖЕ ПОТОКА, в котором эта подпрограмма описана, но после её описания
   
END_THREAD

Вот так можно сделать.
Code: (clickermann) [Select]
THREAD(Атака, 1)

   SUB(Хит)
      LOGWRITE ("Сообщение")
   END_SUB

   IF_PICTURE_IN(0,0, $_xmax, $_ymax,"mob.bmp",-1,100)
      LDOWN($_return1,$_return2)
      Хит()
   ELSE
      Хит()
      KEYDOWN(#A)
      WAITMS(50)
      KEYUP(#A)
   END_IF

   Хит()
   
END_THREAD

HALT

MedweD

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Помогите решить ошибку.
« Reply #2 on: October 01, 2020, 07:51:49 PM »
1. Описание подпрограммы должно быть в корне потока, в котором она будет вызываться. То есть, само описание не должно находиться ни в каких циклах, подпрограммах, или условиях. Короче,)) никаких оберток вокруг SUB ... END_SUB быть не должно. Единственной оберткой может быть поток.

2. Вызов подпрограммы делается ниже (по ходу сценария), чем её описание.

Как смог сформулировал.))

Code: (clickermann) [Select]
THREAD(Атака, 1)

   SUB(Хит)
      LOGWRITE ("Сообщение")
   END_SUB

   Хит() // вызов подпрограммы - в любом месте ТОГО ЖЕ ПОТОКА, в котором эта подпрограмма описана, но после её описания
   
END_THREAD

Вот так можно сделать.
Code: (clickermann) [Select]
THREAD(Атака, 1)

   SUB(Хит)
      LOGWRITE ("Сообщение")
   END_SUB

   IF_PICTURE_IN(0,0, $_xmax, $_ymax,"mob.bmp",-1,100)
      LDOWN($_return1,$_return2)
      Хит()
   ELSE
      Хит()
      KEYDOWN(#A)
      WAITMS(50)
      KEYUP(#A)
   END_IF

   Хит()
   
END_THREAD

HALT
Спасибо за отзывчивость)