Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   Название дублированных movieclip - как лучше? (http://www.flasher.ru/forum/showthread.php?t=66477)

TryToBeASuperStar 07.07.2005 13:06

Название дублированных 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" ???


Надеюсь на ваше терпение и всё такое :)
Заранее спасибо.

Nirth 07.07.2005 13:08

нифига не понял.
Код:

_root.Ntest = this;
что ты этой (и подобными этой) строчкой хочешь сделать?

TryToBeASuperStar 07.07.2005 13:14

Переменная Ntest находящаяся в корне сцены получает название mc, в котором находится кнопка.

Ntest - динамическая строка в корне сцены
mc(1,2,3,4,5,...) - любой из дублированных клипов
внутри mc кнопка
на кнопке эта строка

При наведении на любой из продублированных клипов, переменная в корне получает название клипа mc, на который мы навели.

Nirth 07.07.2005 13:15

MovieClip._name

TryToBeASuperStar 07.07.2005 13:19

О! Точно, была такая функция :)

_root.Ntest = this._name;


Но всё равно надо из этого как-то получить только порядковый номер (только цифру)! Тоесть из имени "mc1" надо вычесть "mc", чтобы получить "1". У меня это пока не получилось. Как это сделать?

Может проще уж сразу создать внутри продублированных mc переменную Name - куда записывать эту цифру ?

Nirth 07.07.2005 13:20

молодой человек а вы вообще хелп читали? про класс String что нибудь слышали?

TryToBeASuperStar 07.07.2005 13:21

читал, читал.

получается либо складывать строки, либо удалять с конца. но удалить из начала - не получается.

Nirth 07.07.2005 13:23

значит ты плохо читал.

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;


Не работают.


Как правильно?

Nirth 07.07.2005 15:22

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

я все еще не понял что ты ту делаешь...по идее и так и так правильно.

TryToBeASuperStar 07.07.2005 16:10

Вложений: 1
всё просто (см.файл)

надо в продублированных клипах завести переменную, которая будет хранить их номер.

теперь, надеюсь, все поймут?

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 - ее значение...

MIX-er 07.07.2005 19:30

кстати в дублируемом обявлять переменную впрнципе и не нада..))) ;-)

TryToBeASuperStar 07.07.2005 19:49

спасибо большое за подробные ответы.

только вы бы для начала исходничек посмотрели - у меня там именно так всё и сделано... но не работает :(

dilsh 08.07.2005 00:47

вот берет последнюю букву-цифру из thename
k=Number(thename.substr(-1,1));
если две то -2,2

TryToBeASuperStar 08.07.2005 03:05

чтобы узнать две или одну - надо ставить проверку на длину имени??? :-/

dilsh 08.07.2005 12:57

можешь сначала проверить не на длину а на наличие буквы
(-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

Всё равно - может можно как-то код упростить до одной строки? Кстати, а нет функции, которая бы просто из всей строки выбирала только цифры??? ;)

Nirth 08.07.2005 13:10

Код:

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.

Но всё равно спасибо за вариант - буду знать как проводить сравнение в одну строку.


Повторюсь: Кстати, может есть функция, которая бы просто из всей строки выбирала только цифры???

dilsh 08.07.2005 13:29

лучше пользуйся примером 22
он независимо от длины берет одну или 2 последние цифры

на твой вопрос насчет только цифр ответа не знаю
может и есть

TryToBeASuperStar 08.07.2005 13:41

dilsh
Понял. Ещё раз спасибо.

============================

Повторюсь: Кстати, может есть функция, которая бы просто из всей строки выбирала только цифры???

============================

Кстати, а почему в моём исходнике не получается продублированным клипам назначить переменную??? Кто-нибудь смотрел?

K.A.T.A.F.A.L.K.E.R 08.07.2005 17:38

Цитата:

Сообщение от MIX-er
кстати в дублируемом обявлять переменную впрнципе и не нада..))) ;-)

В 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

Напоминает:
Цитата:

- Мальчик, ты что, тормоз???
- Меня зовут Вася...
- Как назначать переменную, Вася???
- Я не тормоз...
Типа ты бы исходничек-то поглядел.

dilsh 11.07.2005 21:19

товарищ у тя и так там все по порядку идет
зачем брать цифры из названия не пойму

вот его исходник
Код:

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

да цифры потом нужны будут, блин, далеко после постороения и дублирования клипа. почему неполучается переменную создать внутри продублированных мувиков?

kost@ 25.07.2005 14:33

когда дублируешь клипы, то, наверняка используешь цикл!
Если не используешь, то... стоило бы 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

очень краткий вопрос- вы тут почти все отмороженные какие-то что-ли???

именно так и сделано в примере, который приаттачен к теме, но не работает!!!!

dilsh 27.07.2005 13:39

Цитата:

Сообщение от TryToBeASuperStar
очень краткий вопрос- вы тут почти все отмороженные какие-то что-ли???

именно так и сделано в примере, который приаттачен к теме, но не работает!!!!


извините я ща буду грубить

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

и вообще твой пример работает что ты еще хочешь?
обращаться к своим муви?
так они у тебя и так по порядку пронумерованы point1 point2 и тд
вот и обращайся к ним "point"+любой_номер

TryToBeASuperStar 11.08.2005 19:55

Пздц http://forum.ixbt.com/rolleyes.gif


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

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