Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-09-2006, 21:31   #1 (permalink)
dreizeiler
 
Benutzerbild von mojave
 
Registriert seit: Sep 2004
Ort: Berlin
Beiträge: 1.411
[STUFF] ButtonManager

die klasse stellt einen lösungsansatz dar, in einer seite verwendete buttons zu managen. im grunde geht es zum momentanen stand einfach darum zentral die buttonzustände zu verwalten.
das heißt wenn ein button aktiviert wird, der vorher aktive button auf inaktiv gesetzt wird.
oder zum beispiel um abzufragen, ob ein button sich im aktiven zustand befindet um seine aktion bei weiterem drücken nicht nocheinmal auszulösen.

[STUFF] deswegen weil ich die fertige klasse hier zur verfügung stellen werde.

nach dem aktuellen stand muss jedoch jeder button eine boolsche variable isActive bereitstellen. das finde ich doof und desewgen meine frage:

es besteht in flash ja die möglichkeit einfach von aussen variablen in einem mc zu deklarieren. genau das wollte ich mir zu nutze machen und den ButtonManager diese var setzen lassen um weitere programmierung in der Buttonklasse zu ersparen bzw. zu vereinfachen. was haltet ihr davon?

Der ButtonManager ist als Singelton realisiert.
da es ja durchaus mehrere menüs auf einer seite geben kann bietet er die möglichkeit 'virtuelle menüs' anzulegen, denen dann jeweils die buttons zugeordnet werden. der button selbst muss sein menü nicht kennen.

hier die klasse in ihrer rohversion. kommt noch mehr funktionalität. selbst ideen? nochmal gefragt: einfach so dreist sein jedem button aus dem manager heraus eine varialbe zu deklarieren?

ps. sorry für den vielen text, gänzlich schlechte zeit für solch einen post

ButtonManager: (für neuere version siehe folgebeiträge)

PHP-Code:
class de.sonntagsfarben.utils.ButtonManager
{
    private static var 
instance ButtonManager;
    
    private static var 
aButtons:Array;
    private static var 
oMenus:Object;
    private static var 
STANDARD_MENU_ID:String 'standard';
    
//---------------------------------------------------------------
    // constructor
    //---------------------------------------------------------------
    
private function ButtonManager ()    {
        
aButtons = [];
        
oMenus = {};
        
trace ("instanz von ButtonManager");
    }
    

    
//---------------------------------------------------------------
    // public functions
    //---------------------------------------------------------------
    
public  function createMenu(menu_id:String):Boolean{
        
trace('ButtonManager: createMenu('+menu_id+')')
        if(
typeof(oMenus[menu_id]) == 'object') return false;
        
oMenus[menu_id] = [];
        return 
true;
    }
    
    
    
    public  function 
addButton(btn:MovieClipmenu_id:String):Boolean{
        
trace('ButtonManager: addButton('+btn+', '+menu_id+')');
        
menu_id menu_id || STANDARD_MENU_ID;
        for(var 
i in oMenus[menu_id]){
            if(
btn == oMenus[menu_id][i]) return false;
        }
        
//erster ansatz zum initialisieren der var aus dem ButtonManager
        
btn.btnManager_activeState false;
        
oMenus[menu_id].push(btn);
        return 
true;        
    }
    
    public  function  
removeButton(btn:MovieClipmenu_id:String):Boolean{
        
trace('ButtonManager: removeButton('+btn+')');
        
menu_id menu_id || STANDARD_MENU_ID;
        for(var 
i in oMenus[menu_id]){
            if(
btn == oMenus[menu_id][i]) {
                
oMenus[menu_id].splice(i,1);
                return 
true;
            }
        }
        return 
false;        
    }
    
    
    public  function 
setButtonActive(btn:MovieClip):Void{
        
trace('ButtonManager: setButtonActive('+btn+')');
        
// kontrolle fehlt
        
var currentMenu:Array;
        
        for(var 
a in oMenus){
            for(var 
b in oMenus[a]){
                if(
btn == oMenus[a][b]) {
                    
currentMenu oMenus[a];
                }
            }
        }
        
        if(
currentMenu.length==0) return;
        
        for(var 
c in currentMenu){
            
currentMenu[c].isActive false
        
}
        
btn.isActive true;
    }
    
    public function 
getActiveState(btn:MovieClip):Boolean{
        return 
btn.isActive;
    }    
    
    public static function 
getInstance (){
        if(
instance == null)
            
instance = new ButtonManager();
        return 
instance;
    }

usage:
PHP-Code:
import de.sonntagsfarben.utils.ButtonManager;

//einfach hinzufügen, ohne menü anzugeben : für nur eine navi geeignet
ButtonManager.getInstance().addButton(btn1);
ButtonManager.getInstance().addButton(btn2);
ButtonManager.getInstance().addButton(btn3);


// virtuelle menüs erzeugen:
ButtonManager.getInstance().createMenu('menu1');
ButtonManager.getInstance().addButton(btn4,'menu1');
ButtonManager.getInstance().addButton(btn5,'menu1');
ButtonManager.getInstance().addButton(btn6,'menu1');


ButtonManager.getInstance().createMenu('menu2');
ButtonManager.getInstance().addButton(btn7,'menu1');
ButtonManager.getInstance().addButton(btn8,'menu1');
ButtonManager.getInstance().addButton(btn9,'menu1'); 
mögliches ButtonScript
PHP-Code:
class EinButton .....

public var 
isActive:Boolean false
//unschön. wird vom buttonmanager gesetzt.
//möchte variable komplett im manager deklarieren, initialisieren und handlen.

private function onRelease(){
    
ButtonManager.getInstance().setButtonActive(this);

neuere versionen siehe unten...

Geändert von mojave (23-09-2006 um 03:17 Uhr)
mojave ist offline   Mit Zitat antworten
Alt 23-09-2006, 14:01   #2 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Die Variable in den Buttons selber zu setzen ist schlecht, besser wäre ein Array im ButtonManager was die Zustände der Buttons speichert.
Da aber immer nur ein Button aktiv sein kann, brauchst du kein Array sondern nur eine Variable in der du eine Referenz auf den aktiven Button speicherst.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 24-09-2006, 08:24   #3 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Wenn du sauber bleiben willst, musst du die Variable schon irgendwo deklarieren. Oder eben doch im Manager verwalten. rendner[i]s Vorschlag finde ich da gar nicht verkehrt.
mfg. r
bokel ist offline   Mit Zitat antworten
Alt 26-09-2006, 20:24   #4 (permalink)
dreizeiler
 
Benutzerbild von mojave
 
Registriert seit: Sep 2004
Ort: Berlin
Beiträge: 1.411
ja das ist eine gute idee. eine methode getActiveButton():MovieClip liefert dann den momentan aktiven button.

super danke

edit: wobei, da sich ja menüs anlegen lassen müsste ich dieses auch als parameter an die methode übergeben.
so viel umstand wollte ich eigentlich vermeiden. es müsste dann so aussehen:

PHP-Code:
ButtonManager.getInstance().getActiveButton('meinMenu');
//oder
ButtonManager.getInstance().getActiveButton(ButtonManager.getInstance().getMenu(btnInstanz)); 

Geändert von mojave (26-09-2006 um 20:31 Uhr)
mojave ist offline   Mit Zitat antworten
Alt 26-09-2006, 20:34   #5 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Wenn in jedem Menu ein Button aktiv sein kann dann würde ich doch lieber die Variable die eine Referenz auf den aktiven Button speichert in die Klasse Menu packen.
Aber wozu dann einen ButtonManager, was soll der dann noch managen?
__________________
ERROR: Signature is too large

Geändert von rendner[i] (26-09-2006 um 20:35 Uhr)
rendner[i] ist offline   Mit Zitat antworten
Alt 09-11-2006, 20:04   #6 (permalink)
dreizeiler
 
Benutzerbild von mojave
 
Registriert seit: Sep 2004
Ort: Berlin
Beiträge: 1.411
kann mir das hier mal einer erklären ?!? http://tqdzp.1314bloger.com/archives/180126/
mojave ist offline   Mit Zitat antworten
Alt 09-11-2006, 22:09   #7 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 924
LOL, das Internet treibt komische Blüten. Sieht aus wie eine Farm von automatisch erstellten Blogs, wahrscheinlich um das Googleranking zu beeinflussen. So gesehen scheint dein Beitrag sehr wertvoll zu sein Was er natürlich sowieso ist.

mfg. h
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D
hazy fantazy ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 19:20 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele