Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы (http://www.flasher.ru/forum/forumdisplay.php?f=10)
-   -   ПОМОГИТЕ: с созданием динамического меню (http://www.flasher.ru/forum/showthread.php?t=61589)

B0Bka 07.08.2004 01:41

ПОМОГИТЕ: с созданием динамического меню
 
вопрос такой:
есть в библиотеке мувик item (который состоит из залитой области и textfield'a)

делаю так:
размножаю его в пустой мувик (emty)

_root.emty.attachMovie("item", "item1", 1);
_root.emty.item1._x=0;
_root.emty.item1._y=0;
_root.emty.item1._width=50;
_root.emty.item1._height=20;
_root.emty.item1.txtms.text="File";

потом следующий:

_root.emty.attachMovie("item", "item2", 2);
_root.emty.item2._x=_root.emty.item1._width;
_root.emty.item2._y=0;
_root.emty.item2._width=50;
_root.emty.item2._height=20;
_root.emty.item2.txtms.text="Goto";

потом для каждого:

_root.emty.item1.onRollOver = function() {
if (prss1==1){
dellAll(); //убить все подменю
focused=true;
create1(); //создать подменю для первого пункта
}
}

_root.emty.item1.onRollOut = function() {
focused=false;
}

_root.emty.item1.onPress = function() {
if (prss1==0){
trace("select 0");
focused=true;
trace("focused "+focused);
prss1=1;
create1();
}
else if (prss1==1){
trace("select 1");
dellAll();
prss1=0;
}
}


короче геморой полный когда этих меню куча :(
можно ли как-нибудь динамически построить?

и как сделать функции .onPress .onRollOut .onRollOver для всех пунктов?

и еще вопрос: у пунктов различный текст в текстфилде, приходилось изменять размер объектов как:
_root.emty.item2._width=50;
_root.emty.item2._height=20;
но тогда он начинает неправильно позиционироваться через ._x и ._y

artfla$her 07.08.2004 01:53

Извини, не совсем понял всех твоих вопросов (просто башка забита другим сейчас). Размножить кнопки можно через цикл. Вот пример

for (var i=0; i<count; i++){
clip = "item"+i;
_root.emty.attachMovie("item", clip, i);
//далее для кнопки все свойства проставляешь

_root[clip].onPress = function(){
//твой код
}
//и далее все обработчики наведения, отжатия и тп.

}

Надеюсь, идею уловил? ;) Кстати, ты и так в своем примере строишь динамически меню :)

Текст фиелд имеет свойство autoSize - отвечает за автомасштабирование поля. Возможные значения - "left" или true, "right", "center", false или "none". Эксперементируй! :)

B0Bka 07.08.2004 02:04

Цитата:

Оригинал написал(а) artfla$her
... skip
да понял... попробую, спасибо за оперативность

на счет текстфилда:
я имел ввиду не состояние текстового поля, а то что если я изменил размеры аттаченого мувика то он вставляется не туда куда я сообщаю ему координатами:
_root.empty.item14._x=FROM_LEFT;
_root.empty.item14._y=FROM_TOP;
а вот если не менять размеры, то вставляется все нормально

и еще маленький вопрос:
как во время вставки мувика передать ему координаты?
что-то типа: _root.men.attachMovie("item", "item14", 14, {x, y});
но что-то не работает, напомните плиз, а то я забыл

artfla$her 07.08.2004 02:14

_root.men.attachMovie("item", "item14", 14, {_x: 100, _y:50, _alpha: 90, _width: 70});

Третьим параметром, вообще говоря, в методе attachMovie передается клип, с которого аттачируемый мувик перенял бы все свойства (кроме _name, конечно). Но т.к. этот третий параметр по сути имеет объектный тип, то можно в качестве его значений передать объект {}, где указать все нужные свойства через запятую, а двоеточием отделяются значения.

Штрек 07.08.2004 02:18

Цитата:

Оригинал написал(а) B0Bka

на счет текстфилда:
я имел ввиду не состояние текстового поля, а то что если я изменил размеры аттаченого мувика то он вставляется не туда куда я сообщаю ему координатами:
_root.empty.item14._x=FROM_LEFT;
_root.empty.item14._y=FROM_TOP;
а вот если не менять размеры, то вставляется все нормально

myMovieClip.localToGlobal(point)

Цитата:

Оригинал написал(а) B0Bka
и еще маленький вопрос:
как во время вставки мувика передать ему координаты?
что-то типа: _root.men.attachMovie("item", "item14", 14, {x, y});
но что-то не работает, напомните плиз, а то я забыл

_root.men.attachMovie("item", "item14", 14, {_x:100, _y:200,_alpha:50}); //и тд.

B0Bka 07.08.2004 02:49

Цитата:

Оригинал написал(а) artfla$her
Извини, не совсем понял всех твоих вопросов (просто башка забита другим сейчас). Размножить кнопки можно через цикл. Вот пример

for (var i=0; i<count; i++){
clip = "item"+i;
_root.emty.attachMovie("item", clip, i);
//далее для кнопки все свойства проставляешь

_root[clip].onPress = function(){
//твой код
}
//и далее все обработчики наведения, отжатия и тп.

}

вот тут у меня одна проблема:
у тебя написана функция _root[clip].onPress = function(){
в цикле, но ведь это сработает только для последнего элемента, т.е. для всех пунктов меню будет то действие, которое было установлено для последнего
или я что-то не так понял?

artfla$her 08.08.2004 00:04

Почему? По-порядку берутся имена клипов - clip0, clip1, clip2, clipN. Для каждого из них создается их собственный обработчик события onPress. Да, если ты напишешь однозначный код в этом обработчике, то для всех кнопок будет одно и тоже действие. Но ведь можно сделать, например, так -
funcArray = ["function1", "function2", "functionN"];

В цикле - this.myFunc = funcArray[i];
Далее в обработчике OnPress делаешь строчку
_root[this.myFunc]();

Таким образом при нажатии на кнопку будет выполняться конкретная (именно ЕЕ) функция. Пользуйся созданными свойствами объектов - они никогда не подводят. (пример с функцией, конечно, не совсем удобен, но я имею в виду не только функции)

B0Bka 08.08.2004 01:46

Вложений: 1
нет, ты не понял вопроса:

смотри пишу следующее:

function press_func1(){
trace("function press_func1()");
}
function press_func2(){
trace("function press_func2()");
}
function press_func3(){
trace("function press_func3()");
}

var up=0;
for (var i=0; i<3; i++){
clip = "item"+i;
_root.attachMovie("item", clip, i);

up=up+50;
_root[clip]._y=up;
_root[clip]._x=50;
_root[clip].onPress = function(){
var rrr="press_func"+i;
_root[rrr]();
}
}

и без разницы на какой клип жмешь, в любом случае выводит
"function press_func3()"

попробуй, исходник прилагается

artfla$her 08.08.2004 02:00

Вложений: 1
_

silin 08.08.2004 02:25

Вложений: 1
2 B0Bka
если ты передашь (когда аттчишь) мувику еще одну переменную _root.attachMovie("item", clip, i,{i:i});
и воспользуюшся ею в onPress (var rrr="press_func"+(this.i+1);), то все встанет на свои места


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

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