Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 31-01-2006, 09:41   #1 (permalink)
HelpMeGoInsane
 
Benutzerbild von matten
 
Registriert seit: Nov 2001
Beiträge: 45
variablenübergabe MovieClip-Button

Hallo Forum,

ich habe ein kleines Verständnisproblem und hoffe mal, daß mir jemand das kurz erklären kann:

In meinem Class Skript deklariere ich eine Variable var menuInit:Boolean;. In der konstruktorfunktion setze ich die dann auf true. Dann habe ich meine Buttonfunktion, die beim releasen und wenn menuInit == true ist, Aktionen aufrufen soll. Aber irgendwie kommt menuInit nicht in der Buttonfunktion an. Was mache ich da falsch?

Hier nochmal der Code:

HTML-Code:
class StandardButton extends MovieClip {
	
	var hitAreaName:String;
	var backgroundName:String;
	var menuInit:Boolean;
	static var myObjectPath:String;
	
	function StandardButton(myName:String, myX:Number, myY:Number, myMenu:String, myBackgroundMarker:Number, myDestinationMC:MovieClip, myMenuType:String) {

	this.menuInit = true;	
	hitAreaName =  myName + "_hitArea";
	
	
	_root.adressBlockMC.attachMovie("hitAreaMC", hitAreaName, _root.adressBlockMC.getNextHighestDepth());
	_root.adressBlockMC[hitAreaName]._alpha = 0;
	_root.adressBlockMC[hitAreaName]._x = myX - 3;
	_root.adressBlockMC[hitAreaName]._y = myY - 3;

	_root.adressBlockMC.attachMovie(myName, myName, _root.adressBlockMC.getNextHighestDepth());
	_root.adressBlockMC[myName]._x = myX;
	_root.adressBlockMC[myName]._y = myY;
	
	_root.adressBlockMC[hitAreaName]._width = _root.adressBlockMC[myName]._width + 6;
	
	_root.adressBlockMC[hitAreaName].onRollOver = function() {
		_root.adressBlockMC[myName].gotoAndStop(2);
		this._alpha = 80;
	}
		
	_root.adressBlockMC[hitAreaName].onRollOut = function() {
		_root.adressBlockMC[myName].gotoAndStop(1);
		this._alpha = 0;
	}
	
	_root.adressBlockMC[hitAreaName].onRelease = function() {		
		
		
		if(_root.showcaseMenuButton.menuInit == true) {
			
			trace("MenuInit: " + this.menuInit);
			_root.adressBlockMC.projectCanvasMC.removeMovieClip();
			_root.adressBlockMC.showcaseMenuMC.removeMovieClip();
			_root.maskContainer.removeMovieClip();
			
			this.menuInit = false;
			StandardButton.showMyMenu(myMenu, myMenuType);
			
			
			
		}
		
		_root.background.rotatePanorama(myBackgroundMarker, myDestinationMC);
	}
	
	}
Falls jemand noch ein Tutorial weiß, in dem mal gut erklärt ist, wann man this und wann man absolute pfade im zusammenhang mit as2 benutzt würde ich mich über den link freuen.
Vielen Dank schon mal!
Matten
matten ist offline   Mit Zitat antworten
Alt 31-01-2006, 09:54   #2 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.272
Ich frage mich, warum Du Klassen benutzt, wenn darin in den _root referenziert wird. Versuche doch mal deiner Klasse den entsprechenden MovieClip (Button) als Referenz zu übergeben, dann ist die Klasse auch wiederverwendbar, was Sinn und Zweck der Sache ist.

Zu deinem Problem. Suche mal nach Delegate oder Scoping. Du setzt die Variable nicht im richtigen Kontext.
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com
André Michelle ist offline   Mit Zitat antworten
Alt 31-01-2006, 10:45   #3 (permalink)
HelpMeGoInsane
 
Benutzerbild von matten
 
Registriert seit: Nov 2001
Beiträge: 45
Danke für Deine Antwort. Ich bin mir nicht sicher was Du hinsichtlich der Wiederverwendbarkeit meinst, mit diesem Skript kann ich ja so viele Buttons machen wie ich will (die liegen halt alle in dem angegebenen Movieclip, was aber für mich ok ist). Aber wenn es anders vorteilhafter ist, dann würde ich es natürlich so machen...

Falls Du die Minute hast, würde ich mich freuen, wenn Du mir nen kurzen Verbesserungsvorschlag machst, insbesondere die von Dir angesprochene Übergabe des MCs an die Klasse habe ich noch nicht kapiert.

Dank und Gruß,
Matten
matten ist offline   Mit Zitat antworten
Alt 31-01-2006, 15:39   #4 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.272
Du erbst zum Beispiel von MovieClip, ohne das du die Methoden der MovieClip Klasse brauchst.

Und wiederverwendbar ist deine Klasse nur im _root Kontext.

Wenn du es so aufbaust, dann hast du mehr Narrenfreiheit:

Code:
import mx.blabla.Delegate // kenne den Pfad nicht aufwendig

class StandardButton
{
	private var property: String = "Ich bin im richtigen Scope";

	public function StandardButton( button: MovieClip )
	{
		button.onPress = Delegate.create( this, onButtonPress );
	}
	
	private function onButtonPress(): Void
	{
		trace( "property: " + property );
	}
}

var button: MovieClip = whereeveryouare.attachMovie( 'linkageId', 'instanceName', whereeveryouare.nextHighestDepth() );

var stardardButton: StandardButton = new StandardButton( button );



// oder:

class StandardButton extends MovieClip
{
	private var property: String = "Ich bin im richtigen Scope";

	private function onLoad()
	{
		onPress = onButtonPress;
	}
	
	private function onButtonPress(): Void
	{
		trace( "property: " + property );
	}
}

Object.registerClass( 'linkageId', StandardButton );

var stardardButton: StandardButton = StandardButton( whereeveryouare.attachMovie( 'linkageId', 'instanceName', whereeveryouare.nextHighestDepth() ) );
Ziel bei Klassen ist es ja, sie möglichst ohne straffen Kontext zu stricken, damit du sie überall und zu jeder Zeit einsetzen kannst. Dazu solltest du dein Projekt in möglichst kleine logische Bausteine unterteilen. Es könnte ja sein, dass du dein Projekt anders aufbauen musst und dein jetziger _root nicht mehr da liegt, wo du ihn jetzt definierst.
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com
André Michelle ist offline   Mit Zitat antworten
Alt 31-01-2006, 16:34   #5 (permalink)
HelpMeGoInsane
 
Benutzerbild von matten
 
Registriert seit: Nov 2001
Beiträge: 45
Hallo André,
vielen Dank für Deine Mühe. Ich werde es mir mal anschauen, wahrscheinlich ist ein wichtiges Novum für mich Object.registerClass().

Hau rein,
Matten
matten 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 11:13 Uhr.

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


Copyright ©1999 – 2014 Marc Thiele