Просмотр полной версии : Название дублированных movieclip - как лучше?
TryToBeASuperStar
07.07.2005, 13:06
Привет,
Понимаю, что вопрос элементарный, но у меня уже 3 часа оба варианта не получаются... %(((
Вариант1
Передача номера дублированного mc в переменную, которая находится внутри него.
Внутри цикла дублирования mc, где Temp - номер цикла, а TempName = "mc" + Temp; а Name - переменная внутри продублированного клипа, надо передать значение Temp в Name.
пробовал много вариантов:
set (_root.TempName.Name, Temp);
_root.TempName.Name = Temp;
и др.
в самом mc есть кнопка, на которой:
on(rollOver){
_root.Ntest = this.Name;
}
Не получается.
Вариант2
Вычисление номера путём отсекания ненужной части названия mc.
На кнопке, которая находится внутри mc написал:
on(rollOver){
_root.Ntest = this;
}
после чего
Ntest = _level0.mc1
как из это строки получить только цифру "1" ???
Надеюсь на ваше терпение и всё такое :)
Заранее спасибо.
нифига не понял.
_root.Ntest = this;
что ты этой (и подобными этой) строчкой хочешь сделать?
TryToBeASuperStar
07.07.2005, 13:14
Переменная Ntest находящаяся в корне сцены получает название mc, в котором находится кнопка.
Ntest - динамическая строка в корне сцены
mc(1,2,3,4,5,...) - любой из дублированных клипов
внутри mc кнопка
на кнопке эта строка
При наведении на любой из продублированных клипов, переменная в корне получает название клипа mc, на который мы навели.
TryToBeASuperStar
07.07.2005, 13:19
О! Точно, была такая функция :)
_root.Ntest = this._name;
Но всё равно надо из этого как-то получить только порядковый номер (только цифру)! Тоесть из имени "mc1" надо вычесть "mc", чтобы получить "1". У меня это пока не получилось. Как это сделать?
Может проще уж сразу создать внутри продублированных mc переменную Name - куда записывать эту цифру ?
молодой человек а вы вообще хелп читали? про класс String что нибудь слышали?
TryToBeASuperStar
07.07.2005, 13:21
читал, читал.
получается либо складывать строки, либо удалять с конца. но удалить из начала - не получается.
TryToBeASuperStar
07.07.2005, 13:30
Каждый читает как может. Я гораздо лучше понимаю на примере, даже без каких-либо объяснений, чем длительную (юридически правильную :) писанину по английски. А help'e примеров очень мало.
Вот ты - можешь ответить на мой вопрос, но, видимо, не хочешь...
Зачем тогда тратишь общее время? :-/
TryToBeASuperStar
07.07.2005, 13:32
Добавлю, что может лучше не строить вавилон с вычислением номера mc, а просто передать это значение переменной во внутрь mc ?
KidsKilla
07.07.2005, 13:34
это бред ради названия клипа вырезать строки.
ты лучше заведи массив, в котором будут храниться все ссылки на кнопки\мувики или чего там те надо..
for(var i=how_much_duplicates_i_need; i; i--){
_root.duplicates_array[i] = 2duplicate_mc.duplicateMovieClip("name", i);
}
TryToBeASuperStar
07.07.2005, 13:49
KidsKilla
Да, мне тоже так казалось, поэтому я и завёл разговор о варианте 1 - переменной внутри каждого mc, которая хранит его номер в чистом виде.
Вообще, планируется, что это будет очень малачая часть очень сложного проекта, поэтому хотелось бы программить самодостаточные объекты и скрипты, которые в дальнейшем не будут ни на что завязаны, как в случае с массивом. Массив надо будет помнить и холить. Это лишний геморой. Поэтому может всё же можно как-то реализовать вариант1 ?
KidsKilla
07.07.2005, 14:07
я, чесговоря нихрена не понял из тв-во поста.
для большей модульности и гибкости юзай объекты как хранилища данных, а для общей инфы по всему мувику юзай _global (_root, если 5й флеш.)
_global.overal.moduleslist_array = new Array();
_global.myModule = new Object();
_global.myModule.innerClips_array = new Array();
_global.myModule.x;
_global.myModule.speed;
_global.myModule.size;
итп.
TryToBeASuperStar
07.07.2005, 15:06
гыгы
Да фигли тут непонятного???
Вопрос элементарный.
Как из основной сцены создать и задать значение переменной внутри mc ?
Строки:
set (_root.mc1.Name, 1);
или
_root.mc1.Name = 1;
Не работают.
Как правильно?
ты задаешь вопрос так что тебя никто не понимает. скорее всего проблема в твоих комуникативных качествах попробуй их развивать.
я все еще не понял что ты ту делаешь...по идее и так и так правильно.
TryToBeASuperStar
07.07.2005, 16:10
всё просто (см.файл)
надо в продублированных клипах завести переменную, которая будет хранить их номер.
теперь, надеюсь, все поймут?
K.A.T.A.F.A.L.K.E.R
07.07.2005, 19:24
for(i=1;i<=100;i++){
duplicateMovieClip("BLABLABLA","PREFIX" add i,i);
clip = eval("PREFIX" add i);
clip.VARIABLE = VALUE; // (напр. clip.num = i;)
}
и в дублируемом мувике где-нить на первом кадре напиши var VARIABLE;
где BLABLABLA - имя дублируемого
PREFIX - приставка в имени дубликата
VARIABLE - имя переменной
VALUE - ее значение...
кстати в дублируемом обявлять переменную впрнципе и не нада..))) ;-)
TryToBeASuperStar
07.07.2005, 19:49
спасибо большое за подробные ответы.
только вы бы для начала исходничек посмотрели - у меня там именно так всё и сделано... но не работает :(
вот берет последнюю букву-цифру из thename
k=Number(thename.substr(-1,1));
если две то -2,2
TryToBeASuperStar
08.07.2005, 03:05
чтобы узнать две или одну - надо ставить проверку на длину имени??? :-/
можешь сначала проверить не на длину а на наличие буквы
(-2,1) берет передпоследнюю
лучше скопируй это на первый кадр (нового файла) и поиграйся
thename = "mc53";
trace((thename.substr(-2, 1)));
if (isNaN(thename.substr(-2, 1))) {
mynum = Number(thename.substr(-1, 1));
} else {
mynum = Number(thename.substr(-2, 2));
}
trace(mynum);
TryToBeASuperStar
08.07.2005, 13:05
dilsh
Спасибо за подсказку! Всё работает, вот немного доработал для разной длины имени:
NameLength = this._name.length;
if (NameLength == 6) {
_root.NPtest = Number(this._name.substr(-1,1));
}
if (NameLength == 7) {
_root.NPtest = Number(this._name.substr(-2,2));
}
}
Может можно это как-то ещё упростить?
P.S.
Пока писал, ты уже ответил :D
Всё равно - может можно как-то код упростить до одной строки? Кстати, а нет функции, которая бы просто из всей строки выбирала только цифры??? ;)
var val:Number = ( this._name.length==6) ? 1:2;
_root.NPtest=parseInt(this._name.substr(Math.abs(val)*(-1),Math.abs(val)));
TryToBeASuperStar
08.07.2005, 13:15
я бы не сказал, что это проще :-/
в моём варианте все функции простые - 2 сравнения, 1 действие.
в этом же всё выглядит страшно и непонятно %) да и действий не меньше.
Огого, с каждой минутой всё краше %)))
По-сути кол-во сравнений только одно, но колво действий больше из-за необходимости умножения и Math.abs.
Но всё равно спасибо за вариант - буду знать как проводить сравнение в одну строку.
Повторюсь: Кстати, может есть функция, которая бы просто из всей строки выбирала только цифры???
лучше пользуйся примером 22
он независимо от длины берет одну или 2 последние цифры
на твой вопрос насчет только цифр ответа не знаю
может и есть
TryToBeASuperStar
08.07.2005, 13:41
dilsh
Понял. Ещё раз спасибо.
============================
Повторюсь: Кстати, может есть функция, которая бы просто из всей строки выбирала только цифры???
============================
Кстати, а почему в моём исходнике не получается продублированным клипам назначить переменную??? Кто-нибудь смотрел?
K.A.T.A.F.A.L.K.E.R
08.07.2005, 17:38
кстати в дублируемом обявлять переменную впрнципе и не нада..))) ;-)
В MX не надо... А в MX 2004 в большинстве случаев без этого не работает... В AS2 строгости добавилось ;)
З.Ы. Самый большой фак - если не обьявить нужную переменную в руте... Иногда такой гемор получаецца!!! )) :p
K.A.T.A.F.A.L.K.E.R
08.07.2005, 17:59
function GetNums(TTG:String):String{
var tempStr:String = "";
var vals:String = "09";
for(i=0;i<TTG.length;i++){
if(TTG.charCodeAt(i)>=vals.charCodeAt(0) && TTG.charCodeAt(i)<=vals.charCodeAt(1))
tempStr+=TTG.charAt(i);
}
return(tempStr);
}
на тебе... )) Пишешь GetNums("HELLO123"); - получаешь 123 ;) :rolleyes:
TryToBeASuperStar
09.07.2005, 03:21
спасибо большое, действительно работает! :)
но, поймите правильно, я бьюсь на за изысканность, уникальность и крутизну скрипта, а за его скорость - чем проще и быстрее - тем лучше!
поэтому всё же может хоть кто-нибудь посмотрит исходник и скажет как там в продублированных клипах назначить переменную??? это будет быстрее чем высчитывать номер из названия?
K.A.T.A.F.A.L.K.E.R
10.07.2005, 00:08
Ну сколько раз можно повторять??? В дублируемый суешь на первый кадр var SomeVariable;
for(num=1;num<=100;num++){
//При дублировании
duplicateMovieClip("Имя дублируемого","SomeName" add num,num);
//А здесь - очень важная ВЕСЧ:
clip = eval("SomeName" add num);
//Теперь clip - это ни что иное как твой продублированный клип.
clip.SomeVariable = VALUE_OF_SOME_VARIABLE; //Твое значение
}
ВСЕ! Удачи! ;)
TryToBeASuperStar
11.07.2005, 21:05
Напоминает:- Мальчик, ты что, тормоз???
- Меня зовут Вася...
- Как назначать переменную, Вася???
- Я не тормоз...
Типа ты бы исходничек-то поглядел.
товарищ у тя и так там все по порядку идет
зачем брать цифры из названия не пойму
вот его исходник
for (Temp=1; Temp<=PointsN; Temp++) {
TempName = "point" + Temp;
duplicateMovieClip(point, TempName, Temp);
set (_root.point1.Name, Temp);
//_root.TempName.Name = Temp;
setProperty(TempName, _x, this["X" + Temp]);
setProperty(TempName, _y, this["Y" + Temp]);
TempTest=Temp;
};
и зачем тебе нужна 4я строка, ты что хочешь узнать имя продублированного муви?
так ты ему уже дал имя, необязательно его отдельно еще присваивать
в команде duplicateMovieClip(point, TempName, Temp);
TempName - это и есть name твоего дупль муви
TryToBeASuperStar
25.07.2005, 03:05
да цифры потом нужны будут, блин, далеко после постороения и дублирования клипа. почему неполучается переменную создать внутри продублированных мувиков?
когда дублируешь клипы, то, наверняка используешь цикл!
Если не используешь, то... стоило бы 80)
Так вот в том же цикле внутрь каждого клипа пихай переменную:
for(var i=1...; i++) {
...
// если из библиотеки аттачишь
this.attachMovie("clip","mc"+i,i)
// внутрь клипа MC помещаем переменную
this["mc"+i].clipNumber = i;
...
// Далее твой onRollOver будет работать так:
this["mc"+i].onRollOver = function() {
// где this - это твой дублированный клип...
_root.Ntest = this.clipNumber;
}
}
Идея понятна? А про String (в частности про substring(), что тебе и предлагалось) забудь (в данном случае)
Это линейное программирование - прошлый век 80)
TryToBeASuperStar
27.07.2005, 02:46
очень краткий вопрос- вы тут почти все отмороженные какие-то что-ли???
именно так и сделано в примере, который приаттачен к теме, но не работает!!!!
очень краткий вопрос- вы тут почти все отмороженные какие-то что-ли???
именно так и сделано в примере, который приаттачен к теме, но не работает!!!!
извините я ща буду грубить
похожу это у тебя мозги отмороженные
во-первых когда просишь надо быть предельно вежливым
во-вторых если бы ты хоть немножко пошевелил извилинами то мог бы используя любой совет уже закончить твою проблему
в-третьих читай хелп, научись хоть немножно и потом спрашивай, здесь дают советы а не учат
и вообще твой пример работает что ты еще хочешь?
обращаться к своим муви?
так они у тебя и так по порядку пронумерованы point1 point2 и тд
вот и обращайся к ним "point"+любой_номер
TryToBeASuperStar
11.08.2005, 19:55
Пздц http://forum.ixbt.com/rolleyes.gif
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.