Как сделать временные (исчезающие) сообщения в Max
В Max сделать исчезающее сообщение можно просто: показать текст в message/text-объекте, запустить delay на нужное число миллисекунд и послать команду, перезаписывающую содержимое пустой строкой (или вызвать clear). Ниже — рабочие патчи и варианты для быстрого применения.
Простой способ: delay + set у message
- Создайте message-объект, укажите в инспекторе varname, например m1.
- Чтобы показать текст и не выводить его автоматически, используйте скриптовую команду или объект message:
- Пример вывода: [message "; m1 set Hello, world!"] -> bang.
- Подключите [delay 2000] (2000 ms) к message-объекту, который отправит команду очистки: [message "; m1 set "] -> delay -> send.
- Схема в текстовом виде:
- [bang] -> [message "; m1 set Hello"] -> (выполнится показ)
- [bang] -> [delay 2000] -> [message "; m1 set "] -> (очистка)
Этот подход прост и работает в большинстве патчей: вы явно перезаписываете содержимое через scripting (символ ';' — командная строка патчера).
Если не хотите давать varname вручную, используйте [thispatcher] с messages типа "script send" для обращения к объекту по id.
Скриптовый метод (без явных промежуточных message)
Можно формировать одну управляющую строку и отправлять её напрямую:
- [sprintf "; %s set %s" objectName messageText] -> [sel] -> [delay] -> [sprintf "; %s set " objectName] Это удобно при генерации текстов из данных (sprintf, prepend) и позволяет централизованно управлять временем жизни сообщений.
Визуальные варианты: text, comment, live.text
- Объект [text] принимает сообщения "clear" и более гибок для многострочных выводов: отправьте нужный текст, затем через [delay] посылайте "clear".
- Для плавного исчезновения (фейда) используйте отдельный графический слой: выводите текст в [lcd] или jit.matrix и меняйте прозрачность через линейный интерполяционный сигнал (line), но это сложнее и требует Jitter/graphics.
Некоторые UI-объекты не реагируют на пустую строку как на «очистку». В таких случаях используйте явные команды "clear" (для [text]) или "set" с пустым аргументом для message-объекта.
Частые ошибки
- Не задали varname (имя объекта) в инспекторе — скриптовые команды сработают не на тот объект.
- Отправляете пустую строку без ';' — это не скриптовая команда и не изменит содержимое message.
- Используете слишком короткий delay — текст не успевает прочитаться.
- Путаете message-объект (который хранит текст) и comment-объект (который не всегда реагирует на set).
FAQ
- Как задать имя объекту? — Выделите объект, откройте Inspector (Cmd/Ctrl+I) и в поле "varname" впишите m1.
- Можно ли показывать несколько сообщений с разным временем жизни? — Да: каждому сообщению можно дать собственный delay или в коде формировать пары "показать — delay — очистить".
- Работает ли это в Max for Live? — Да, принципы те же; учитывайте особенности UI объектов в Live API.
Если нужно, пришлите ваш патч (.maxpat) — опишу конкретную правку и дам готовый фрагмент кода.