Autor Zpráva
Jirsák
Profil *
Zdravím,

řeším následující situaci: připravuji rozbalovací menu - ale ne přes komponenty. Mám tedy připravený Button, na který, když kliknu, zobrazí se další tlačítka, která jsou schovaná v 1 MovieClipu. Zdroj může být například takovýto:

on (press) {
_root.menu_1._visible = true;
}


Problém, který řeším je následující:
Když se chci menu zbavit (jeho viditelnost vypnout), může to nastat, pokud kliknu na nějakou položku v menu. jako druhou variantu, jak se menu "zbavit"bych chtěl mít, aby se menu zneviditelnilo, když kliknu někam mimo "menu_1", respektive, když kliknu někam do plochy. Je možné to nějak vyřešit? Asi nějak ano, když to jde u komponenty Menu. :-)

Přemýšlel jsem, že bych přes celou plochu dal průhledné tlačítko, a když kliknu na něj, přestane být vidět co potřebuji. Ale to bych na ploše nemohl mít další tlačítka.

Další možnost, která mě napadala - použít onClipEvent (mouseDown), a dát tam podmínku, v které by se popisovalo, kde je MovieClip (menu_1) umístěno, jak je velké, a pokud by byla pozice myši mimo tuto plochu, tak by se vyvolala funkce:

_root.menu_1._visible = false;


Ale to mi přijde opět zbytečně komplikované.

Děkuji za výpomoc.
dredie
Profil
var myListener:Object = new Object();

myListener.onMouseDown = function ():Void {
myFunction();
};

Mouse.addListener(someListener);


var X:Number = this.menu1._x + menu1._height;
var Y:Number = this.menu1._x;
var W:Number = this.menu1._y + menu1._width;
var Z:Number = this.menu1._y;


function myFunction():Void {
if (this._xmouse > X || this._xmouse < Y || this._ymouse > W || this._ymouse < Z) {
menu1._visible=false;
}
}

nejsem si jisty, zda mam zcela spravne krajni hodnoty X,Y,W a Z, precejen to tukam z hlavy... ale tak nejak by to melo fungovat.

d.
Jirsák
Profil *
Tato varianta je o které jsem psal - že bych popsal MovieClip kde je a jak je velký, a po kliknutí mimo něj by se stala nějaká akce. Když si představím, že bych měl několik takových MovieClipů - několik různých menu - (třeba 10) a pro každé zvlášť bych měl takovou detekci, vidím, že by to bylo poměrně zdlouhavé. Myslel jsem, jestli třeba není nějaké "elegantní" řešení.

Každopádně děkuji i za tento skript.
Jirsák
Profil *
Tak už vím. Elegantní řešení je následující:
zcela do horní vrstvy přidám MovieClip, který bude přes celou plochu. Instance Name dám například "stage_mc". Pak na hlavní časovou osu přidám vrstvu pro skripty "AS". Zde napíšu:

stage_mc.onMouseDown = function () {
//co se má provést, když kliknu na plochu, například zmizení menu
_root.menu1._visible=false;
}


Pokud bych měl menu na ploše víc (třeba více úrovní), dám samozřejmě:

stage_mc.onMouseDown = function () {
//co se má provést, když kliknu na plochu, například zmizení menu a submenu
_root.menu1._visible=false;
_root.menu1_1._visible=false;
}


Jak jednoduché. :-)
dredie
Profil
Jirsák
v takovem pripade ti menu zmizi i kdyz kliknes nekam do nej. Take zamezis veskere ostatni interaktivite, ptze pokud das na ten MC pres celou plochu akci, tak zakryje vse co je pod nim (i kdyz bude s pruhlednou vyplni).

MovieClipů - několik různých menu - (třeba 10) a pro každé zvlášť bych měl takovou detekci, vidím, že by to bylo poměrně zdlouhavé.
No, staci pouze aktualizovat hodnoty X,Y,W,Z a to pouze tim stylem, ze das promenne pro vypocet krajnich hodnot a ty pouze zmenis podle toho, ktyery MC s menu je na scene, zbytek se vypocita sam.

Navic "stage_mc.onMouseDown: je dle meho nesmysl. onMouseDown je event pro listenery, ne pro MC. Tam bys mel pouzit onPress, popr. onRelease...

d.
XXX
Profil
Jirsák
Nechapu, proc ma menu zmizet az po kliknuti mimo nej. Daleko elegantnesi reseni je, aby menu zmizelo, kdyz z nej mysi odjedes. Tim padem ti staci pouzit zpracovatele udalosti onRollOut a mas vse vyreseno - jednoduse a elegantne ;)
XXX
Profil
dredie
v takovem pripade ti menu zmizi i kdyz kliknes nekam do nej
No tak prece to neviditelne tlacitko neda nad to menu :)) Staci, kdyz jej dat do vrstvy pod menu a vyhne se aspon tomu problemu, co popisujes ;)
dredie
Profil
XXX
pravda je ta, ze me to taky napadlo :D
XXX
Profil
dredie
No tak v tom pripade je vsechno v poradku ;) :-D
Jirsák
Profil *
Původně jsem nechtěl, aby menu zmizelo, když uživatel z něj sjede, protože jsou také uživatelé počítačů, kteří s myší moc neumí a pohybují se s ní plus mínus 100 pixelů, takže by se jim mohlo stát, že by omylem sjeli z menu, aniž by chtěli.

Řešení, o kterém jsme psal se mi líbilo. Ale zjistil jsem, že opravdu když kliknu i do menu, tak si ho tím "vymažu". I když "stage_mc" umístím do vrstvy až pod menu, tak když na něj kliknu, kvůli příkazu _root.menu1._visible=false; mi menu zmizí, a co je na něm za příkazy se neprovede. Je zajímavé, že na jiném tlačítku na ploše to funguje. Provede se co se provést má a zároveň menu zmizí. Tak to nechápu kde je zakopaný pes.
dredie
Profil
Jirsák
no ale kdyz umistis ten stage MC pod menu, nemuzes na nej prece skrz menu kliknout, tam bude jeste jiny problem....
Mokilu
Profil *
A mas "stage_mc" az pod vrstvou s tim menu co se zobrazi po kliknuti?
XXX
Profil
Jirsák
No jelikoz pises, ze ti jedno tlacitko funguje spravne a ostatni ne, videl bych to tak, ze pro ty ostatni zatim nemas nic prirazeno ve zpracovateli udalosti onRelease() tech tlacitek. Pokud mas totiz to neviditelne tlacitko pod tim menu, musi ti ty tlacitka fungovat. Pokud jim vsak nepriradis zadnou akci, bude automaticky reagovat tlacitko pod menu..

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: