Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник по программированию в Algodoo.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
462.85 Кб
Скачать

Урок 13: Разное: Сохранение событий

Вроде бы, все основное я уже рассказал, поэтому теперь расскажу о нескольких интересных методиках. В Thyme есть возможность сохранить событие. Для этого надо в строке onCollide прописать код наподобие такого –

(e)=>{scene.my.saveE := {e}}

Теперь в переменной saveE сохранено событие, и можно узнать все, что вы узнали бы через просто E (например, scene.my.savee.pos). Довольно интересно сохранить событие, потом в другом объекте сделать пойнтер цвета

color = {scene.my.savee.this.color}

и изменять цвет объекта, в котором был скрипт сохранения. Если вы так сделаете, то увидите, что цвет объекта с пойнтером тоже изменяется.

Не знаю где можно это использовать, но сам факт, что есть такая возможность, достоин занесения в книгу.

Урок 14: Разное: Удаление через код

Удаление через код - это когда вы можете удалить объект, не устанавливая клавишу уничтожения и не используете killer geom.

Правильный путь – scene.removeEntity(объект).

Также можно обнулить плотность e.this.density = 0

Что насчет удаления через некоторое время, вот один из способов

onCollide = (e)=>{controlleracc=sim.time+3; density={sim.time>controlleracc? 0:2}; onCollide=(e)=>{}}

Если вы усвоили материал, то после небольшого анализа поймете, как это работает.

Урок 15: Разное: Программирование клавиш

В 2.1 появились дополнительные возможности по работе с кнопками, первая - это keys.isDown(keyCode), которая заменяет старый способ с лазерами.

Использовать просто – если клавиша "up" нажата, то keys.isDown("up") вернет true. Использовать можно в любом скрипте.

Вторая - это новое событие "onKey" которое работает по-другому. Это процедура с объектом в качестве аргумента: onKey = (e) => {скрипт}. Она вызывается каждый раз, когда нажимается или отпускается кнопка (а также при зажатой кнопке повторяется ее вызов, как в текстовом редакторе).

В объекте «e» передается несколько параметров:

e.pressed (true/false) - true если клавиша нажата, false если отпущена

e.keycode (string) – название кнопки, например: "backspace"

e.keychar (string) – символ нажатой кнопки (только для алфавитно-цифровых)

e.handled – можно установить в "true" чтобы выключить эту клавишу в интерфейсе

e.this – это сам объект в свойствах которого написан обработчик onKey

Некоторые клавиши, например "a" или "s" обрабатываются сначала интерфейсом и чтобы сцена нормально работала нужно переключиться в режим проигрывателя. Рекомендуется установить App.GUI.playMode = {sim.running} в любом onSpawn скрипте любого объекта.

Аналогично можно работать и с мышкой – коды кнопок «mouse_left», «mouse_right»

update = (e)=>{e.this.color = keys.isDown("mouse_left") ? [1, 1, 1, 1] : [1, 1, 1, 0]}

Урок 16: Разное: Внутреннее обновление пойнтеров

Иногда при использовании пойнтеров возникает проблема – после сохранения некоторые свойства теряют пойнтеры, или вы можете случайно изменить цвет объекта и тем самым сбить пойнтер.

Чтобы избежать этих досадных недоразумений, заходим в меню скриптов, выбираем свойство, которое вы не собираетесь изменять или которое имеет меньшую вероятность потерять пойнтер, и пишем код вроде такого

{length = {Scene.my.var}; false}

Где false – исходное значение самого свойства, в моем примере это было свойство opaqueBorders.

Если все равно не помогает, увы, придется использовать onCollide, хотя есть еще один способ… Код примерно такой –

scene.my.var = scene.addcircle({radius := 1})

Как результат – через scene.my.var мы может изменять свойство созданного объекта…