![]() |
Название дублированных movieclip - как лучше?
Привет,
Понимаю, что вопрос элементарный, но у меня уже 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; |
Переменная Ntest находящаяся в корне сцены получает название mc, в котором находится кнопка.
Ntest - динамическая строка в корне сцены mc(1,2,3,4,5,...) - любой из дублированных клипов внутри mc кнопка на кнопке эта строка При наведении на любой из продублированных клипов, переменная в корне получает название клипа mc, на который мы навели. |
MovieClip._name
|
О! Точно, была такая функция :)
_root.Ntest = this._name; Но всё равно надо из этого как-то получить только порядковый номер (только цифру)! Тоесть из имени "mc1" надо вычесть "mc", чтобы получить "1". У меня это пока не получилось. Как это сделать? Может проще уж сразу создать внутри продублированных mc переменную Name - куда записывать эту цифру ? |
молодой человек а вы вообще хелп читали? про класс String что нибудь слышали?
|
читал, читал.
получается либо складывать строки, либо удалять с конца. но удалить из начала - не получается. |
значит ты плохо читал.
|
Каждый читает как может. Я гораздо лучше понимаю на примере, даже без каких-либо объяснений, чем длительную (юридически правильную :) писанину по английски. А help'e примеров очень мало.
Вот ты - можешь ответить на мой вопрос, но, видимо, не хочешь... Зачем тогда тратишь общее время? :-/ |
Добавлю, что может лучше не строить вавилон с вычислением номера mc, а просто передать это значение переменной во внутрь mc ?
|
это бред ради названия клипа вырезать строки.
ты лучше заведи массив, в котором будут храниться все ссылки на кнопки\мувики или чего там те надо.. for(var i=how_much_duplicates_i_need; i; i--){ _root.duplicates_array[i] = 2duplicate_mc.duplicateMovieClip("name", i); } |
KidsKilla
Да, мне тоже так казалось, поэтому я и завёл разговор о варианте 1 - переменной внутри каждого mc, которая хранит его номер в чистом виде. Вообще, планируется, что это будет очень малачая часть очень сложного проекта, поэтому хотелось бы программить самодостаточные объекты и скрипты, которые в дальнейшем не будут ни на что завязаны, как в случае с массивом. Массив надо будет помнить и холить. Это лишний геморой. Поэтому может всё же можно как-то реализовать вариант1 ? |
я, чесговоря нихрена не понял из тв-во поста.
для большей модульности и гибкости юзай объекты как хранилища данных, а для общей инфы по всему мувику юзай _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; итп. |
гыгы
Да фигли тут непонятного??? Вопрос элементарный. Как из основной сцены создать и задать значение переменной внутри mc ? Строки: set (_root.mc1.Name, 1); или _root.mc1.Name = 1; Не работают. Как правильно? |
ты задаешь вопрос так что тебя никто не понимает. скорее всего проблема в твоих комуникативных качествах попробуй их развивать.
я все еще не понял что ты ту делаешь...по идее и так и так правильно. |
Вложений: 1
всё просто (см.файл)
надо в продублированных клипах завести переменную, которая будет хранить их номер. теперь, надеюсь, все поймут? |
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 - ее значение... |
кстати в дублируемом обявлять переменную впрнципе и не нада..))) ;-)
|
спасибо большое за подробные ответы.
только вы бы для начала исходничек посмотрели - у меня там именно так всё и сделано... но не работает :( |
вот берет последнюю букву-цифру из thename
k=Number(thename.substr(-1,1)); если две то -2,2 |
чтобы узнать две или одну - надо ставить проверку на длину имени??? :-/
|
можешь сначала проверить не на длину а на наличие буквы
(-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); |
dilsh
Спасибо за подсказку! Всё работает, вот немного доработал для разной длины имени: Цитата:
P.S. Пока писал, ты уже ответил :D Всё равно - может можно как-то код упростить до одной строки? Кстати, а нет функции, которая бы просто из всей строки выбирала только цифры??? ;) |
Код:
var val:Number = ( this._name.length==6) ? 1:2; |
я бы не сказал, что это проще :-/
в моём варианте все функции простые - 2 сравнения, 1 действие. в этом же всё выглядит страшно и непонятно %) да и действий не меньше. Огого, с каждой минутой всё краше %))) По-сути кол-во сравнений только одно, но колво действий больше из-за необходимости умножения и Math.abs. Но всё равно спасибо за вариант - буду знать как проводить сравнение в одну строку. Повторюсь: Кстати, может есть функция, которая бы просто из всей строки выбирала только цифры??? |
лучше пользуйся примером 22
он независимо от длины берет одну или 2 последние цифры на твой вопрос насчет только цифр ответа не знаю может и есть |
dilsh
Понял. Ещё раз спасибо. ============================ Повторюсь: Кстати, может есть функция, которая бы просто из всей строки выбирала только цифры??? ============================ Кстати, а почему в моём исходнике не получается продублированным клипам назначить переменную??? Кто-нибудь смотрел? |
Цитата:
З.Ы. Самый большой фак - если не обьявить нужную переменную в руте... Иногда такой гемор получаецца!!! )) :p |
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: |
спасибо большое, действительно работает! :)
но, поймите правильно, я бьюсь на за изысканность, уникальность и крутизну скрипта, а за его скорость - чем проще и быстрее - тем лучше! поэтому всё же может хоть кто-нибудь посмотрит исходник и скажет как там в продублированных клипах назначить переменную??? это будет быстрее чем высчитывать номер из названия? |
Ну сколько раз можно повторять??? В дублируемый суешь на первый кадр 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; //Твое значение } ВСЕ! Удачи! ;) |
Напоминает:
Цитата:
|
товарищ у тя и так там все по порядку идет
зачем брать цифры из названия не пойму вот его исходник Код:
for (Temp=1; Temp<=PointsN; Temp++) {так ты ему уже дал имя, необязательно его отдельно еще присваивать в команде duplicateMovieClip(point, TempName, Temp); TempName - это и есть name твоего дупль муви |
да цифры потом нужны будут, блин, далеко после постороения и дублирования клипа. почему неполучается переменную создать внутри продублированных мувиков?
|
когда дублируешь клипы, то, наверняка используешь цикл!
Если не используешь, то... стоило бы 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) |
очень краткий вопрос- вы тут почти все отмороженные какие-то что-ли???
именно так и сделано в примере, который приаттачен к теме, но не работает!!!! |
Цитата:
извините я ща буду грубить похожу это у тебя мозги отмороженные во-первых когда просишь надо быть предельно вежливым во-вторых если бы ты хоть немножко пошевелил извилинами то мог бы используя любой совет уже закончить твою проблему в-третьих читай хелп, научись хоть немножно и потом спрашивай, здесь дают советы а не учат и вообще твой пример работает что ты еще хочешь? обращаться к своим муви? так они у тебя и так по порядку пронумерованы point1 point2 и тд вот и обращайся к ним "point"+любой_номер |
|
| Часовой пояс GMT +4, время: 03:30. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.