2015-10-19 5 views
1

Я думаю, что здесь что-то не хватает. У меня супер простой случай, когда я хочу использовать флаг как семафор. Если я нажмю [значение зеленого флага], значение настройки обратно на 0 работает просто отлично. Если я нажму [пробел], флаг не будет установлен после воспроизведения звука. Я что-то упустил? Что происходит внутри обработчика сообщений? Перегружен ли он следующим вызовом обработчику сообщений?Set variable не работает внутри обработчика сообщений

https://scratch.mit.edu/projects/82146090/

ответ

2

Проблема заключается в том, как сообщение вызывается.

Я сделал это испытание вашего кода.

Event loop in scratch

Когда цикл запускает сообщение, увеличивает счетчик, показывающий, сколько раз происходит обжиг.

Первый штрих-пресс, который я сделал, «test» был увеличен до 4000. Другими словами, сообщение было выпущено более 4000 раз! Я медленная машинистка, но события бывают быстрыми.

Теперь кажется, что в Scratch каждое сообщение транслирует прерывание предыдущего. Как «играть звук» долго, чтобы выполнить, message1 никогда не доходит до конца без перерыва, окончательные инструкции никогда не выполняется и flag2 не установлен в 0.

Есть несколько обходных путей:

move 'set' outside the if

Установите флажок вне области if. Поскольку второе сообщение прерывает первый и запускает, он обнуляет флаг.

use 'and wait'

Убедитесь, что текущее сообщение не прерывается новым путем использования «и ждать». Таким образом, не прерывание, сообщение выполняется полностью.

enter image description here

Избегайте сообщений. Используйте собственный цикл событий. Вам действительно нужен цикл для запуска более 4000 сообщений для 1 нажатия клавиши? Пусть Scratch обрабатывает события своим путем.