Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   применение одного и того же кода к разным мувикам (http://www.flasher.ru/forum/showthread.php?t=131636)

kassini 25.10.2009 03:36

применение одного и того же кода к разным мувикам
 
Подозреваю, что вопрос не очень сложный, но не смог нормально сформулировать для поиска. Поэтому попытаюсь объяснить здесь, что я хочу:
Есть меню из надписей (кнопок-мувиков). Нужно, чтобы однажды написанный код анимации (например, изменение размера мувика при наведении) автоматически применялся для всех кнопок в списке. Захотел изменить анимацию всех кнопок - поменял этот "исходный код" и каждая кнопочка, соответственно, поменяла свое поведение.
Как я понимаю, тут нужна динамическая подмена имени в этом "исходном коде" на имя (instance name) кнопки, на которую в данный момент наведен курсор, но не знаю, как этого добиться. Помогите, плз! :wacko:

Добавлено через 1 час 37 минут
спасибо, кажется, уже разобрался )

fessor 25.10.2009 15:45

могу предложить свой вариант
Код AS1/AS2:

function animateButton (someButt:MovieClip){
}

и юзать эту функцию к разным кнопкам по их нажатию, вотъ

Dumpil 26.12.2009 17:41

у меня похожая проблема
у меня есть 20 кнопок
я хочу что бы при наведении на любую из них она увеличивалась на 10% к примеру

function ab (bot:MovieClip){
bot._xscale+=10;
bot._yscale+=10;
}
как теперь вызвать функцию именно в момент наведения на кнопку ?

mooncar 26.12.2009 18:09

Немного по-другому:
Код AS1/AS2:

for (i = 1; i <= 20; i++) {
  _root['bot' + i].onRollOver = ab;
}
 
function ab (){
  this._xscale += 10;
  this._yscale + =10;
}

Если кнопки не на _root, то замените путь.
Оформите в посте код тегами AS и не склеивайте операторы, выражения и прочие элементы - код делается неудобочитаемым - и для вас , и для остальных.
К тому же быстрее он работать от этого не станет. :)

VVall 26.12.2009 18:35

Цитата:

Сообщение от mooncar (Сообщение 875428)
не склеивайте операторы, выражения и прочие элементы - код делается неудобочитаемым - и для вас , и для остальных.

Мне, наоборот, сильно мешают все эти лишние пробелы где попало. Что делать?

Dumpil 26.12.2009 18:44

спасибо, я пока что начинающий и мое представление о ас составляют крупицы познаний с прошлого + то в чем ща разобрался ) поэтому правильность написания кода это воще космос )
я так понял что в вашем коде для кнопок от 1й до 20й (bot1, bot2 ... bot20) будет выполянтья функция аб
а если все кнопки лежат в мувиклипе main где поменятьеться путь ?

mooncar 26.12.2009 18:46

Как что делать? Если на люди код не выносите, пишите весь код в одну строчку, где это возможно, как некоторые HTML-параноики :)
Если код на публику выносится, лучше, чтобы он был читаемым.
Так больше вероятность получения помощи по вопросу.
Тэги, кстати, тоже не для модераторов введены, а для пользователей форума.
Например, когда вижу нечто вроде for(i=1;i<10;i++){, и так много строк, сразу разбираться желание пропадает.

Добавлено через 46 секунд
Цитата:

Сообщение от Dumpil (Сообщение 875437)
а если все кнопки лежат в мувиклипе main где поменятьеться путь ?

Код AS1/AS2:

for (i = 1; i <= 20; i++) {
  main['bot' + i].onRollOver = ab;
}


udaaff 26.12.2009 18:51

Цитата:

Сообщение от VVall (Сообщение 875435)
Мне, наоборот, сильно мешают все эти лишние пробелы где попало. Что делать?

А где попало и не надо ставить. Есть четкие конвенции по оформлению кода. Довольно логичные причем =)

Пробел не ставится между унарным оператором и операндом. Бинарные и тернарные операторы нужно отделять пробелами, иначе читается это все просто отвратительно.

VVall 26.12.2009 19:01

Цитата:

Сообщение от udaaff (Сообщение 875441)
Есть четкие конвенции по оформлению кода. Довольно логичные причем =)

Ссылку, если можно. Пока я таких не встречал, в каждой конторе были свои многостраничные соглашения по оформлению кода. На мой взгляд, ручное их соблюдение - это огромная трата времени впустую, форматирование кода должно быть автоматизировано.

Dumpil 26.12.2009 19:04

Код AS1/AS2:

for (i = 1; i <= 20; i++) {
  main['bot' + i].onRollOver = ab;
  main['bot' + i].onRollOut = ab2;
}
 
function ab (){
  this._xscale = + 110;
  this._yscale = + 110;
}
 
function ab2 (){
  this._xscale = + 100;
  this._yscale = + 100;
}

чуть добавил кода и получился нужный эфект ) теперь кнопки перебираються как на пианино ) спасибо что не прошли мимо )

udaaff 26.12.2009 19:31

Цитата:

Сообщение от VVall (Сообщение 875443)
Ссылку, если можно. На мой взгляд, ручное их соблюдение - это огромная трата времени впустую, форматирование кода должно быть автоматизировано.

http://opensource.adobe.com/wiki/dis...ng+Conventions Конвенции по AS3, но для AS2 тоже сгодятся.

Цитата:

На мой взгляд, ручное их соблюдение - это огромная трата времени впустую, форматирование кода должно быть автоматизировано.
Нет никакой траты времени. Абсолютно. Наоборот, порядок в коде -- это экономия времени.

Автоформатирование нужно лишь в том случае, если к вам в руки попадает чужой, плохо оформленный код.

VVall 26.12.2009 19:42

А вы читали, что написано по вашей ссылке? Эти "чёткие конвенции" - точно такой-же местный стандарт, какие я видел раньше, в данном случае для компонентов отдельно взятого фреймворка. И там во введении сказано, что часть стандартов взята с потолка.

Никакой траты времени? Говоря только о пробелах: сравните размер файла с пробелами и без. Исходя из этого и из максимальной скорости нажатия на пробел (самую неудобную клавишу, между прочим) можно посчитать, сколько именно занимает эта "никакая трата" на то, что можно сделать нажатием одной клавиши.

udaaff 26.12.2009 19:59

Цитата:

А вы читали, что написано по вашей ссылке? Эти "чёткие конвенции" - точно такой-же местный стандарт, какие я видел раньше, в данном случае для компонентов отдельно взятого фреймворка. И там во введении сказано, что часть стандартов взята с потолка.
А где по вашему должны быть прописаны конвенции, чтобы быть неместным стандартом? В конституции российской федерации?

Цитата:

Никакой траты времени? Говоря только о пробелах: сравните размер файла с пробелами и без. Исходя из этого и из максимальной скорости нажатия на пробел (самую неудобную клавишу, между прочим) можно посчитать, сколько именно занимает эта "никакая трата" на то, что можно сделать нажатием одной клавиши.
Если у вас это отнимает время, могу лишь посоветовать научиться хорошо печать. А время в основном будет уходить на разбор этого кода, а не на набор. Вы все-таки не машинисткой работаете, объемы тут поменьше.
И вот, к примеру, вы же расставили в своем посте пробелы после знаков препинания =). Много времени у вас на это ушло? А читается все нормально и не режет глаз =)

Hauts 26.12.2009 20:05

Цитата:

Сообщение от VVall (Сообщение 875443)
причем =)

На мой взгляд, ручное их соблюдение - это огромная трата времени впустую, форматирование кода должно быть автоматизировано.[/quote]

Нажмите Ctrl + Shift + F в окне действий, отформатирует.

mooncar 26.12.2009 20:05

Пожалуйста.
Я не про += говорил. :) А про приклейку цифр главным образом.

Добавлено через 1 минуту
Цитата:

Сообщение от Hauts (Сообщение 875456)
Нажмите Ctrl + Shift + F в окне действий, отформатирует.

У меня часто бывает по 1000 - 2000 строк. Никогда автоформат не смог их съесть. :)

На все 100 согласен с udaaff - аккуратное написание кода должно получаться само собой, при написании кода.
Экономит кучу времени по зрительной навигации в больших массивах строк, полезность этого несоизмерима с затратами на нажатие пробела.
К тому же, когда нет пробелов, элементарные конструкции кода превращаются порою в таких монстров, что страшно смотреть.
Тогда самому же будет удобнее, например, покопаться в своем же коде годичной давности.
С ужасом смотрю сейчас свои строки 2-х летней давности (мои первые работы).

Hauts 26.12.2009 20:22

У меня нормально форматирует, без проблем. Flash CS3.

Два года назад - первые работы? Отличный результат изучения флэша за два года.

udaaff 26.12.2009 20:26

В 9, кажется, изначально баг был с автоформатом. Сейчас, вроде, все нормально.

mooncar 26.12.2009 20:33

Цитата:

Сообщение от udaaff (Сообщение 875465)
В 9, кажется, изначально баг был с автоформатом. Сейчас, вроде, все нормально.

У меня CS3 (9-ка). Видимо, этот баг и проявляется.

Hauts 26.12.2009 20:35

У меня баг тоже есть. Причем я заметил некоторые закономерности. В большинстве случаев помагает ставить ";" в конце строк.

Dumpil 27.12.2009 13:37

есть надоработочка
при увеличении кнопки она теряеться за другими
попробывал использовать getNextHighestDepth() - не получаеться (
Код AS1/AS2:

function ab (){
  this.getNextHighestDepth();
  this._xscale = + 110;
  this._yscale = + 110;
}


mooncar 27.12.2009 13:51

Это от непонимания того, что делает getNextHighestDepth(). А этот метод просто-напросто выдает инфу о том, какой следующий уровень свободен.
А ставит на нужный уровень уже метод swapDepths()
Поэтому сделайте так:
Код AS1/AS2:

//найдем свободный уровень внутри main - он будет выше всех занятых
var topLevel:Number = main.getNextHighestDepth();
 
function ab (){
  this._xscale = 110; //плюсы тут ни к чему
  this._yscale = 110;
  this.swapDepths(topLevel); //очередная кнопка встает на найденный уровень, который заведомо выше всех
}


udaaff 27.12.2009 13:56

Лучше менять местами текущий мувик с наивысшим. А то так глубины могут закончится, если долго и упорно кликать.

mooncar 27.12.2009 14:01

udaaff, в моем примере не закончатся :)
Просто поочередно занимается один и тот же найденный свободный обособленный уровень, изначально не занятый.

Dumpil 27.12.2009 14:18

не работает (
нужно ли в клипе main добавить еще один слой ?
все кнопки в клипе main лежат в одном фрейме на одном слое.

Добавлено через 1 минуту
Цитата:

Сообщение от udaaff (Сообщение 875555)
Лучше менять местами текущий мувик с наивысшим. А то так глубины могут закончится, если долго и упорно кликать.

где должен находиться наивыший ? в руте ?

mooncar 27.12.2009 14:23

Вложений: 1
Должно работать. Никаких слоев не нужно добавлять. То, что происходит на _root, никакого отношения не имеет ни к чему, у вас же все в main - и кнопки, и уровень свободный находится и занимается.
Вероятно, что-то делаете не так. См. рабочий пример.

PS. Не путайте слои в среде разработки флеша и глубины объектов в готовом swf.

Dumpil 27.12.2009 14:57

Цитата:

Сообщение от mooncar (Сообщение 875565)
Должно работать. Никаких слоев не нужно добавлять. То, что происходит на _root, никакого отношения не имеет ни к чему, у вас же все в main - и кнопки, и уровень свободный находится и занимается.
Вероятно, что-то делаете не так. См. рабочий пример.

PS. Не путайте слои в среде разработки флеша и глубины объектов в готовом swf.

http://filestore.com.ua/?d=D3C87EB49
не могу понять что не так
возможно потому что в кнопках битмап и есть анимация

mooncar 27.12.2009 15:05

Не забывайте, что не у всех CS4 стоит.

Dumpil 27.12.2009 22:26

Какая версия у вас ? Если сохранять через сайв эз то можно только CS3 (
Цитата:

MovieClip.swapDepths

Синтаксис

anyMovieClip.swapDepths(depth);
anyMovieClip.swapDepths(target);

Аргументы

target Мувиклип, который должен обменять уровень своего местонахождения с уровнем клипа, заданным в anyMovieClip. Оба мувиклипа должны принадлежать одному и тому же родительскому клипу (находиться на одной линейке Прим. редактора)

depth Номер уровня, на который будет перемещен anyMovieClip.

Описание

Метод; обменивает порядок расположения, или Z-порядок (уровень глубины) данного мувиклипа с клипом, указанным в аргументе target или с клипом, который в данный момент занимает уровень depth, заданный в аргументе. Оба мувиклипа должны принадлежать к одному и тому же родительскому клипу. Обмен уровнями создает эффект перемещения одного клипа за или под другой. Если в момент вызова этого метода мувиклип находится в состоянии анимации "tweening", последняя останавливается.
скорее всего проблема вот здесь.

Добавлено через 25 минут
вродь разобрался проблема в том что к типу "button" это свойство не работает (

mooncar 28.12.2009 00:21

Кнопки (Класс Button) не используйте - от них одна головная боль.

Dumpil 28.12.2009 00:26

ну я уже это понял ) просто теперь прийдеться все кнопки переделать в мувиклип а потом их сделать с помощью - ас кнопками )
нашел тут пример как по мне не оч понятный )
http://demiart.ru/forum/index.php?showtopic=54011
кстати я так понял там где наш счечик отсчитывает кнопки можно вставить скрипт для того что бы каждый мувиклип превращался в кнопку (соответсвенно подготовив его - вставив 3 кадра), верно ?


Часовой пояс GMT +4, время: 16:28.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.