Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-02-2006, 13:22   #1 (permalink)
Neuer User
 
Benutzerbild von lixx
 
Registriert seit: Feb 2006
Beiträge: 159
function einem mc zuweisen

hi leute!

habe folgendes problem und hoffe ihr könnt mir da weiter helfen.

ich habe eine art rollbalken in einem mc erzeugt der keinerlei as hat. das möchte ich mit einer globalen function jeweils einzeln zuweisen.
PHP-Code:
_global.functRollbalken = function(objTargetoutputTargetvalStartvalStepvalMax) {

    
objTarget.fader.onPress = function() {
        [...]
    }
    
objTarget.fader.onRelease = function() {
        [...]
    }

    [...]

hier soll dann die function dem mc zugewiesen werden.
PHP-Code:
derRollbalkenMC vertBarController(derRollbalkenMCoutputTarget01400); 
auch das macht er noch mit und funzt eigentlich ganz gut.
PHP-Code:
derRollbalkenMC = new vertBarController(derRollbalkenMCoutputTarget01400); 
das problem das ich nun habe ist, sobald sich zwei solcher balken auf dem screen befinden, und man bei einem "rollt", rollt der zweite gleich mit

der instanzname der beiden balken ist unterschiedlich und befinden sich auch nicht auf der gleichen instanzebene.

kann mir da jemand weiterhelfen?
lixx ist offline   Mit Zitat antworten
Alt 26-02-2006, 14:12   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
ich werde aus deinen frakmenten nicht so ganz schlau.
das sind die prinzipiellen möglichkeiten:
Code:
// variante 1
// ein objekt erzeugen, mit einer variablen, einer integrierten funktion
// und der zuweissung einer funktion
_root.fSub = function(a) {
	this.wert -= a;
	return this.wert;
};
test1_obj = {wert:13};
test1_obj.fAdd = function(a) {
	this.wert += a;
	return this.wert;
};
test1_obj.fSub = _root.fSub;
// testen
trace(test1_obj.fAdd(5));
trace(test1_obj.fSub(8));
//
//
// variante 2
// aufruf per call bzw. per apply
_root.fGetName = function() {
	return this._name;
};
_root.createEmptyMovieClip("hose", 1);
_root.createEmptyMovieClip("hemd", 2);
// testen
trace(_root.fGetName.call(_root.hose));
trace(_root.fGetName.call(_root.hemd));
//
//
// variante 3
// per prototype
MovieClip.prototype._konto = 3000;
MovieClip.prototype.fEinzahlung = function(_einzahlung) {
	this._konto+=_einzahlung;
	return this._konto
};
_root.createEmptyMovieClip("Sparbuch1", 1);
_root.createEmptyMovieClip("Sparbuch2", 2);
// testen
trace(Sparbuch1.fEinzahlung(30));
trace(Sparbuch2.fEinzahlung(50));
trace(Sparbuch1.fEinzahlung(100));
//
//
// variante 4
// OOPs mit class ...
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (26-02-2006 um 14:17 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 26-02-2006, 15:51   #3 (permalink)
Neuer User
 
Benutzerbild von lixx
 
Registriert seit: Feb 2006
Beiträge: 159
danke für die schnelle antwort!

einiges von dem habe ich bereits probiert und mit prototype kenn ich mich nicht ganz so gut aus. was funzt ist, wenn man der function ein objekt voranstellt. also:
PHP-Code:
_global.myObj = new Object();
_global.myObj.functRollbalken = function(objTargetoutputTargetvalStartvalStepvalMax) {

    
objTarget.fader.onPress = function() {
        [...]
    }
    
objTarget.fader.onRelease = function() {
        [...]
    }

    [...]

und das ganze aufruft mit
PHP-Code:
// "derRollbalkenMC" ist der mc; "_derRollbalkenMC" ist mehr oder weniger ein schatten.
_derRollbalkenMC = new myObj();
_derRollbalkenMC.functRollbalken(derRollbalkenMC, ...);

// der zweite rollbalken
_derRollbalkenMC2 = new myObj();
_derRollbalkenMC2.functRollbalken(derRollbalkenMC2, ...); 
was hier geschiet ist, dass man das objekt "_global.myObj" zwei neuen objekten als kopie zuweist (mit den genauen ausdrücken bin ich leider noch nicht soweit ) und diese dann unabhängig voneinander ihre funktionen auf dem objekt ausführen, das als erster parameter übergeben wird. klappt super.

aber vielleicht kann mir jemand den unterschied zwischen den beiden varianten erklären. in der oberen (erster artikel) wird mir mit trace(objTarget) oder "this" der angesprochene mc, auf den ich z.b. gerade klicke zwar richtig angezeigt aber die aktion wird auf beiden mc's ausgeführt.
lixx ist offline   Mit Zitat antworten
Alt 26-02-2006, 17:53   #4 (permalink)
Neuer User
 
Benutzerbild von lixx
 
Registriert seit: Feb 2006
Beiträge: 159
JUHU! hab's nun selbst lösen können. während der bewegung des einen rollbalken ist eine variable gesetzt worden, die zeigte, dass er sich eben gerade bewegt und ist offenbar global gewesen. so "glaubte" der zweite rollbalken, dass auch er gemeint war

kurz um: alle varianten funzten, nur war da eben diese tückische variable

aber in dem fall zwängt sich mir eine weitere frage auf: wenn man nun z.b. die variable "slideByClick" wie folgt setzt ...
PHP-Code:
    rollBalken.bar.onReleaseOutside = function() {
        
slideByClick true;
    } 
... dann sollte doch diese den pfad "rollBalken.bar.slideByClick" haben, oder?
lixx ist offline   Mit Zitat antworten
Alt 26-02-2006, 18:18   #5 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
dann teste doch mal meine beispiele, die sind extra ganz simpel und einfach gehalten und funktionieren ;-)

ob mit oder ohne objekt, das objTarget muss raus und durch this ersetzt werden. this ist elementar wichtig!
Code:
_global.myObj = new Object(); 
_global.myObj.functRollbalken = function(outputTarget, valStart, valStep, valMax) { 
   this.fader.onPress = function() {  [...]  } 
   this.fader.onRelease = function() { [...]  } 
   [...] 
}
"..zwei neuen objekten als kopie zuweist.."
nein, nie! wenn, dann umgekehrt. die funktion wird den objekten zugewissen. beispiel
Code:
function fTest(){trace(this);}
_root.A_mc.onEnterFrame=fTest;
_root.B_mc.onEnterFrame=fTest;
_root.C_mc.onEnterFrame=fTest;
call (steht doch aber auch in der doku/hilfe von flash):
function.call(_mcA, parameter);
function.call(_mcB, parameter);
hier wird 'function' aufgerufen, als wenn es ein teil von _mcA bzw. _mcB wäre, wobei (wichtig!) das this in der function stellvertretend für das _mcA bzw. _mcB ist.

MovieClip.prototype.xxxxx
wenn ein MovieClip erzeugt wird, dann erhält es diese eigenschaften mit. kann man dann benützen, wie alle anderen eigenschaften eines mc's: _x, _y, _rotation, usw.

deine fragmente sind (sorry) irgendwie käse, da passt nichts zusammen. schau dir das nochmals an, vielleicht fällt ja dann der cent?
Code:
// rollbalkenX_mc
// +-- schatten_mc
// +-- fader_mc
//
var rollbalken_array = [_root.rollbalken1_mc, _root.rollbalken2_mc];
//
// allen rollbalken das selbe programm zuweissen:
for (var i in rollbalken_array) {
	var r = rollbalken_array[i];
	r.fader_mc.onPress = function() {
		this._alpha++;
	};
	r.fader_mc.onRelease = fader_mc.onReleaseOutside=function () {
		this._alpha--;
	};
	r.schatten_mc.onEnterFrame = function() {
		// this ist hier schatten_mc
		// und this._parent ist das r 
		// r == _root.rollbalken1_mc oder _root.rollbalken2_mc
		this._x = this._parent._x+5;
		this._y = this._parent._y+7;
	};
	r.fNurAlsBeispiel = function(_wert) {
		// hier ist this das r. einfach trace'n. dann siehst du ja wer was ist.
		trace(this);
		this._x += _wert;
	};
}
//
rollbalken1_mc.fNurAlsBeispiel(33);
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (26-02-2006 um 18:22 Uhr)
hgseib 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 13:28 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele