Понедельник, 29.04.2024, 09:35 | Главная | Регистрация | Вход |
|
Полезные скрипты - Форум
Полезные скрипты
| |
Smitg9 | Дата: Воскресенье, 01.05.2011, 20:36 | Сообщение # 1 |
Подполковник
Группа: Администраторы
Сообщений: 109
Статус: Offline
| Вылаживайте сюда любые скрипты, которые на ваш взгяд могут быть полезными для других.
|
|
| |
Smitg9 | Дата: Воскресенье, 01.05.2011, 20:39 | Сообщение # 2 |
Подполковник
Группа: Администраторы
Сообщений: 109
Статус: Offline
| Итак я начну. Вращение мувиклипа вслед за мышкой: Для ActionScript 2: Code onEnterFrame=function() { hero._rotation=Math.atan2(_ymouse-hero._y,_xmouse-hero._x)/Math.PI*180+90; } Для ActionScript 3: Code addEventListener(Event.ENTER_FRAME, loop); function loop(e:Event):void{ hero.rotation=Math.atan2(mouseY-hero.y, mouseX-hero.x)/Math.PI*180+90; } Ctrl+Enter. Вуаля! Вертится!
|
|
| |
Smitg9 | Дата: Воскресенье, 01.05.2011, 20:40 | Сообщение # 3 |
Подполковник
Группа: Администраторы
Сообщений: 109
Статус: Offline
| ActionScript 2: Как узнать, вышел ли курсор за рамки ролика? Очень просто. Для этого в любом слое в первом кадре вставляем Dinamic Text и называем его info. Далее в первом кадре вставляем приведенный ниже код. Code _global.borderWatcher={};
AsBroadcaster.initialize(borderWatcher);
borderWatcher.init = function():Void {
var clip:MovieClip = _root.createEmptyMovieClip("list_clip"+Math.random(), 100000);
clip.lineStyle(1, 0, 0);
clip.beginFill(0, 0);
clip.moveTo(0, 0);
var xMax:Number = Stage.width, yMax:Number = Stage.height;
clip.lineTo(0, yMax), clip.lineTo(xMax, yMax), clip.lineTo(xMax, 0), clip.lineTo(0);
clip.endFill();
clip.useHandCursor = false;
clip.onRollOut = function():Void {
borderWatcher.broadcastMessage("onStageRollOut");
};
clip.onRollOver = function():Void {
borderWatcher.broadcastMessage("onStageRollOver");
};
};
borderWatcher.init();
//**********************************************************
borderWatcher.addListener(info);
info.onStageRollOut = function():Void {
this.text = "Указатель вышел за границы фильма";
};
info.onStageRollOver = function():Void {
this.text = "Указатель вошел в границы фильма";
}; ActionScript 3 В ActionScript 3 можно определить что мышка ушла за пределы флеш-ролика, используя событие mouseLeave для stage. Это событие происходит каждый раз, когда мышка покидает пределы ролика. Нет события mouseEnter, но можно использовать mouseMove для определения того, что мышка вернулась к нам. Простой пример использования нарисованного квадрата в качестве своего курсора. Code package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.ui.Mouse; public class Test extends Sprite { private var cursor:Sprite = new Sprite(); public function Test() { cursor.graphics.beginFill(0xFF); cursor.graphics.drawRect(0, 0, 25, 25); addChild(cursor); stage.addEventListener(Event.MOUSE_LEAVE, cursorHide); stage.addEventListener(MouseEvent.MOUSE_MOVE, cursorFollow); Mouse.hide(); } public function cursorHide(evt:Event):void { cursor.visible = false; } public function cursorFollow(evt:MouseEvent):void { if (!cursor.visible) cursor.visible = true; cursor.x = stage.mouseX; cursor.y = stage.mouseY; evt.updateAfterEvent(); } } } В этом примере с помошью кода рисуется красный квадрат и он становится невидимым в том случае если мышка покинула пределы флешки. Удачи
|
|
| |
Smitg9 | Дата: Воскресенье, 01.05.2011, 22:20 | Сообщение # 4 |
Подполковник
Группа: Администраторы
Сообщений: 109
Статус: Offline
| Перетаскиваемое окно. Нарисуй прямоугольник, преобразуй его в символ MovieClip(F8), и открой на редактирование (щелкнув по нему два раза). В этом клипе нарисуй что-то типа заголовка окна, выдели только этот заголовок и преобразуй его в символ(F8), только теперь не в MovieClip, а в Button (кнопка). Выйди из редактирования клипа, выдели его и назначь имя. Для этого выдели клип и нажми Ctrl+F3(Properties), там будет поле для ввода имени, в котором написано - вписывай туда "win" и нажимай Enter(Подтверлить Отлично! половина дела сделана . Теперь просто выдели кнопку сию и вызвав панель Actions(F9) впиши туда следующее : Code on (press) {//При нажатии мыши //на кнопке начать все это... //перетягивать. startDrag("win"); }//А когда отпускаешь перетягивание //останавливается on (release) { stopDrag(); } Можно попробовать и с обработчиком событий MovieClip'a "onClipEvent" с событием "keyDown", но это будет распространяться на весь Флеш_ролик. Исходник
|
|
| |
Smitg9 | Дата: Понедельник, 02.05.2011, 00:34 | Сообщение # 5 |
Подполковник
Группа: Администраторы
Сообщений: 109
Статус: Offline
| Хочу рассказать про симпатичный эффект, который реализуется достаточно просто, а выглядит на пять с плюсом, особенно в связке с надлежащим окружением. Подобные эффекты обычно реализуют с помошью битмапа и комбинации фильтров на нем. Это не сложно, требуется немного фантазии и «игры» с параметрами фильтров. Но настоящие герои всегда идут в обход. Сразу объясню почему. Во-первых, подобный прототип будет использоваться в реальном проекте, где вся сцена динамически изменяется перед эффектом, и за ним будет находится много объектов. Во-вторых, требуется высокая скорость работы всей флешки. При размере сцены 1280×700 пикселей, метод с применением битмапов не имеет никаких шансов получить приемлемый FPS на среднем компьютере. Итак, задача: нужно получить светящийся шлейф от движущегося объекта, если быть точнее — от источника света. Источник может перемещаться по всей сцене, может менять свой размер, поэтому толщина шлейфа тоже должна меняться. Причем желательно, чтобы эффект мог работать как в девятой версии флеш-плеера, так и в более старых, минимально в шестой (с частичной потерей функциональности). AS3 использовать не будем. Приступим к реализации. Сам шлейф будем рисовать программно, запоминая координаты движения объекта и используя функцию curveTo() для сглаживания траектории движения. Свечение, пожалуй, лучше сделать через GlowFilter() со средним качеством, так как симуляция свечения через многократное рисование шейпов будет медленнее.Будем писать прототип =) : Code MovieClip.prototype.Magic = function (len, w, fColor, gColor, ptr) { // на входе: // len - количество сегметов шлейфа // w - начальная толщина шлейфа в пикселах // fColor - цвет шлейфа // gColor - цвет свечения вокруг шлейфа (Glow) // ptr - муви-клип, за которым будет строиться магический шлеф. Если не задан, то за мышью. w *= .5; // запомним старые координаты начала шлейфа, они нам пригодятся для расчета // вектора движения и перпендикуляра к нему var oldX = this._xmouse; var oldY = this._ymouse; // используем координаты мышки, а если задан муви-клип, то его координаты if (ptr == undefined) { oldX = ptr._x; oldY = ptr._y; } // примерним два фильтра к клипу, в который будет рисовать шлейф. // BlurFilter немного размоет края шлейфа, чтобы придать реалистичности this.filters = new Array( new flash.filters.BlurFilter(2, 2, 1), new flash.filters.GlowFilter (gColor, 1, 25, 25, 3, 2) ); // в массиве crd будем хранить текущую и все предыдущии координаты шлейфа, // причем их кол-во не будет превышать длинный шлейфа len var crd = new Array(); // на событие перерисовки кадра "повесим" функцию рассчета необходимых переменных и само рисование this.onEnterFrame = function() { // создадим пустой объект, в нем будем хранить координаты // и дополнительные данные каждого узла шлейфа var o = new Object(); // используем координаты мышки, а если задан муви-клип, то его координаты if (ptr == undefined) { o.x = this._xmouse; o.y = this._ymouse; } else { o.x = ptr._x; o.y = ptr._y; } // рассчитаем угол, равный перпендикуляру к вектору движения, сохраним его в объекте o.a = Math.atan2(o.y-oldY, o.x-oldX)+Math.PI*.5; oldX = o.x; oldY = o.y; // поместим объект в массив и обрежем массив до максимальной длины шлейфа crd.push(o); if (crd.length>len) { crd.splice(0, 1); } // поместим длину массива координат во временную переменную, она немного ускорит // цикл перебора массива и будет использована несколько раз var l = crd.length; // рассчитаем координаты перпендикуляров в каждом узле (с конца шлейфа к его началу), // причем линейно будем увеличивать толщину шлейфа до максимальной (заданной через переменную w) for (var i = 0; i < l; i++) { // возьмем объект из массива var o = crd[i]; // k = коэффициент толщины шлейфа var k = w*i⁄l; // косинус и синус вектора движения нам нужен для рассчета координат перпендикуляров var cs = k*Math.cos(o.a); var ss = k*Math.sin(o.a); // собственно сам рассчет, x0 и y0 - правая сторона шлейфа, x1 и y1 - левая o.x0 = o.x+cs; o.y0 = o.y+ss; o.x1 = o.x-cs; o.y1 = o.y-ss; // немного уменьшим координату, дабы получить эффект "огня" - // плавного смещения всего шлейфа вверх, это добавит динамики нашему эффекту o.y *= .997; } // начнем рисование, используя цвет заливки, заданный на входе прототипа this.clear(); this.beginFill(fColor); // начнем рисование с правой стороны шлейфа (набор коодинат x0 и y0), передвинем текущую позицию // рисования в самый хвост this.moveTo(crd[0].x, crd[0].y); // переберем массив координат с первого до предпоследнего, соединим точки с помошью сплайна // (кривой Безье) // будем использовать "классический" метод рисования кривых, состоящих из нескольких сегментов for (var i = 1; i<(l-1); i++) { this.curveTo(crd[i].x0, crd[i].y0, (crd[i].x0+crd[i+1].x0)*.5, (crd[i].y0+crd[i+1].y0)*.5); } // завершим рисование правой стороны, проведя линию до начальной координаты шлейфа this.lineTo(crd[l-1].x, crd[l-1].y); // левую половину шлейфа нарисуем аналогично, только используя второй набор рассчитаных координат // x1 и y1 // чтобы рисуемая форма была корректно залита флешем, начальная и конечная координаты у обоих // половин должны совпадать! this.moveTo(crd[0].x, crd[0].y); for (var i = 1; i<(l-1); i++) { this.curveTo(crd[i].x1, crd[i].y1, (crd[i].x1+crd[i+1].x1)*.5, (crd[i].y1+crd[i+1].y1)*.5); } this.lineTo(crd[l-1].x, crd[l-1].y); // завершим рисование, форма шлейфа готова this.endFill(); }; }; // Осталась самая малость — создать пустой клип под шлейф и применить к нему прототип. // var mc = this.createEmptyMovieClip("MagicMc", 0); // mc.Magic(20, 8, 0xFF8080, 0xCC80CC); Архив с исходными файлами смотрите ниже. Исходник Автор:Михаил Востриков
|
|
| |
Smitg9 | Дата: Понедельник, 02.05.2011, 02:00 | Сообщение # 6 |
Подполковник
Группа: Администраторы
Сообщений: 109
Статус: Offline
| Загрузка внешней флешки: Code var loader:Loader = new Loader() var req = new URLRequest("test.jpg"); loader.load(req); addChild(loader);
|
|
| |
reckless | Дата: Вторник, 16.08.2011, 13:56 | Сообщение # 7 |
Группа: Гости
| хуйня
|
|
| |
Smitg9 | Дата: Вторник, 23.08.2011, 00:43 | Сообщение # 8 |
Подполковник
Группа: Администраторы
Сообщений: 109
Статус: Offline
| иди нахуй пидарбля
|
|
| |
Свой | Дата: Суббота, 27.08.2011, 02:31 | Сообщение # 9 |
Группа: Гости
| Quote (reckless) хуйня angry Quote (Smitg9) иди нахуй пидарбля angry Зачет!!!
|
|
| |
|
| |