PDA

Просмотр полной версии : имя фрейма


ffffff
29.08.2005, 02:31
как можно получить имя фрема по её номеру? или номер по её имени. облазил весь флэщевый хелп, ничего подобного не нашёл :(

KidsKilla
29.08.2005, 15:35
никак. имена фреймов в свфке киляются.

Iv
30.08.2005, 03:58
номер по имени можно? типа того:

MovieClip.prototype.getNumberByLabel = function (label) {
var frame = this._currentframe
this.goToAndStop(label)
var label_frame = this._currentframe
this.goToAndStop(frame)
}

llllllllll
30.08.2005, 05:50
Можно на JSFL написать скриптец, который будет при публикации писать в каждый MC, включая основной таймлайн, объект labels, что-то вроде:

myMC.labels = {a:11,b:35,c:190};

ffffff
30.08.2005, 05:55
Можно на JSFL написать скриптец, который будет при публикации писать в каждый MC, включая основной таймлайн, объект labels, что-то вроде:

myMC.labels = {a:11,b:35,c:190};


на такое я не способен :)) про JSFL слышыал, но ещё не вникал, что это такое...


2 BitSky

MovieClip.prototype.getNumberByLabel = function (label) {
var frame = this._currentframe
this.goToAndStop(label)
var label_frame = this._currentframe
this.goToAndStop(frame)
}


спасибо за решение. но оно немного не подходит... из-за переходов...

Iv
30.08.2005, 06:07
а переходов и не будет.

ffffff
30.08.2005, 06:10
а как же this.goToAndStop(label)?

просто в кадре с этим лэйблом могу бвть экшены или вообще роли будет проигроваться? ммм? всего этого не будет? я тода не понимаю суть прототипов...

Iv
30.08.2005, 06:12
твоя правда.
будут гады :)

Iv
30.08.2005, 06:16
я писал на ruflash:

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

написал JSFL для автоматической раздачи.
это мой первый опыт, сильно не ругайте :)

как юзать:

1. выделяем любой кадр в любом слое
2. вызываем команду add_anchors

в самый верх добавятся два слоя: слой якорей и слой скриптов.
якоря будут поименованы как a1, a2 и т.д. в соответствии с номерами
кадров.
в каждый кадр встанет скрипт вида
this._anchor=номер кадра

соответственно, если понадобится обработчик события перехода на этот
якорь, просто делаем пользовательское свойство, пример:

this.addProperty("_anchor", function () {
return this.current_anchor;
}, function (val) {
this.current_anchor = val;
_root.anyHandler(val);
});


вот собственно код JSFL. Создайте новый JSFL документ, скопируйте и
воткните скрипт (ниже), сохраните под именем add_anchors.jsfl в папке
C:\Documents and Settings\[USER NAME]
\Local Settings\Application Data
\Macromedia\Flash MX 2004\en\Configuration\Commands

и пользуйтесь на здоровье.




var anchors_timeline = fl.getDocumentDOM().getTimeline()
var frames_number = anchors_timeline.getSelectedFrames();
frames_number=frames_number[frames_number.length-1]
var anchors_layer_num = anchors_timeline.addNewLayer("anchors", "normal", true )
anchors_timeline.convertToKeyframes(0, frames_number)
var scripts_layer_num = anchors_timeline.addNewLayer("anchors scripts", "normal", false)
anchors_timeline.convertToKeyframes(0, frames_number)
for (var i=0; i<frames_number; i++) {
anchors_timeline.setSelectedLayers(scripts_layer_num)
anchors_timeline.setSelectedFrames(i, i, true)
anchors_timeline.setFrameProperty('actionScript', 'this._anchor='+(i+1));
anchors_timeline.setSelectedLayers(anchors_layer_num)
anchors_timeline.setSelectedFrames(i, i, true)
anchors_timeline.setFrameProperty('name', 'a'+(i+1));
anchors_timeline.setFrameProperty('labelType', 'anchor');
}

ffffff
30.08.2005, 06:36
Давай дружить я ты мне будешь по флэшу подсказывать я я многое занаю про linux, *bsd. настройка всевозможных сервисов, глубокое знание php... mysql. interbase/firebird.... :))

llllllllll
30.08.2005, 06:58
Писал когда то вот это:


while(fl.getDocumentDOM().timelines[0] != fl.getDocumentDOM().getTimeline())
{
fl.getDocumentDOM().exitEditMode();
}

var AsString = "labels = {";

var document = flash.getDocumentDOM();
var timeline = document.getTimeline();
var layers = timeline.layers;

for(var lr in layers)
{
var layer = layers[lr];

for(var fr = 0; fr < layer.frameCount; fr++)
{
var frame = layer.frames[fr];

if(frame.labelType == "name")
{
AsString += frame.name + ":" + fr + ",";
fr += frame.duration - 1;
}
}
}

AsString = AsString.substr(0, AsString.length - 1) + "};"

var tempLayerIndex = timeline.addNewLayer("tempLayer", "normal" , true);

timeline.layers[tempLayerIndex].frames[0].actionScript = AsString;

document.testMovie();

timeline.deleteLayer(tempLayerIndex);


Но доделывать не захотелось, так как пользы не много ...