------------------ЗАЧЕМ-ЭТО-НАДО?------------------- Мне не понравилось, что работа с прокруктой сцены в WME - вещь весьма неочевидная и привязанная, по большей части, к перемещению персонажа, что не всегда удобно. Мне нужно было получить полный контроль над происходящим, что бы организовать более красивую и плавную иллюзию перемещения камеры в меню, где персонажа нету, а на переднем плане висит неподвижный, относительно камеры, текст. Стандартными средствами движка такого достичь не получилось, так что пришлось писать самому. Тем более, я посчитал, что это-весьма перспективно для будущих головоломок.
----------------------ОПИСАНИЕ---------------------- Скрипт добавляет 2 новых метода для объекта layer: * Scroll (x,y,v) -перемещает слой (целиком, как entity, так и region). При этом игра приостанавливается до завершения перемещения. * ScrollAsync(x,y,v) -тоже самое, только выполнение остальных скриптов продолжается, слой будет "ехать" на заднем фоне. , где: x,y - ВЕЛИЧИНА ПЕРЕМЕЩЕНИЯ по x и y соотвественно, (т.е. если взять x=-10, y=0, то слой переедет на 10 пикселей влево) v - время, через которое слой приедет в указанную точку. Указыватся в милисекундах. Почему так? Да потому что так удобнее. Лично я, при планировке сцен, уже знаю, какая область будет в камере и на сколько ей надо переехать. Что касается скорости, то здесь тоже всё очевидно - важно рассчитывать время прибытия слоёв относительно друг друга. Т.е., если слои должны закончить перемещение одновременно, то достаточно просто указать одинаковые значения, а не высчитывать, сколько кому ехать.
---------------------ИСПОЛЬЗОВНИЕ--------------------- 1. Положить файл layer.script в папку /scripts/ 2. Ассоциировать переменную со слоем. Для этого в скрипте, где Вам нужно двигать слой пишите:
Code
var l1=Scene.GetLayer("int_obj"); //l1-имя переменной, может быть любой, int_obj -имя слоя, пишется в кавычках. Должно соответствовать имени вашего слоя! Или можно написать просто номер, без кавычек
3. Прикрепить скрипт к объекту (слою).
Code
l1.AttachScript("scripts\layer.script");
4. Собственно, подвинуть слой:
Code
l1.ScrollAsync (-1066,0,3000); //Двигает слой int_obj на 1066 пикселей влево. Слой прибудет в конечный пункт через ~3 секунды.
Примечание: Если вы однажды уже прикрепили к слою скрипт, то нигде более этого делать не надо, они уже надёжно связаны. Например, у меня 2 кнопки. При нажатии на первую камера смещается так, чтобы было видно вторую. При нажатии на вторую камера ползёт обратно. В этом случае, я буду привязывать скрипт к слою (пункт 3) только один раз: в скрипте первой кнопки, хотя объявлять переменную придётся 2 раза. Кстати, если хотите, можно объявлять всего один раз, написав вместо "var" "global", т.е. получится:
Code
global l1=Scene.GetLayer("int_obj");
Затем, в скрипте второй кнопки просто "подключиться" к этой глобальной переменной, написав в самом-самом начале скрипта
Code
global l1;
Вот и всё =) Задавайте вопросы, с радостью отвечу!