Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 16-01-2006, 18:08   #1 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 134
Seltsamer Funktionsaufruf ?

Hallo!

Ich habe folgendes Problem:
Ich habe ein Funktion namens clump_about() :

Code:
function clump_about()
{
     ... 
     ...
}
Dann wird in einer Schleife die Funktion clump_about folgendermaßen aufgerufen:

Code:
for (var i = 0; i < kNumberGuys; ++i) 
{
	...
	mc.onEnterFrame = clump_about; 
	...
}
Zunächst einmal finde ich es ungewöhnlich dass clump_about hier ohne Klammern aufgerufen wird (und nicht etwa clump_about() ).
Ich würde an die Funktion gerne einen Parameter weitergeben, nur wird die Funktion dann nicht mehr aufgerufen. Im übrigen wird die Funktion schon dann nicht aufgerufen wenn ich

Code:
mc.onEnterFrame = clump_about();
schreibe. Ich habe die Datei als Anhang mitgeschickt und hoffe Ihr könnt mir hier weiterhelfen.

Viele Grüße,

Wassim
Angehängte Dateien
Dateityp: zip clumping.zip (8,8 KB, 2x aufgerufen)
Wassim ist offline   Mit Zitat antworten
Alt 16-01-2006, 18:15   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
mc.onEnterFrame = clump_about;
so ist clump_about ein zeiger (variable) auf die funktion. jedes onEnterFrame verzweigt dann zu dieser adresse.

mc.onEnterFrame = clump_about();
so ist clump_about eine funktion, die direkt einmal ausgeführt wird. onEnterFrame erhält das return-ergebnis (in diesem falle nichts) - und das macht onEnterFrame dann auch ;-)

-----------------
"..Ich würde an die Funktion gerne einen Parameter weitergeben.."
der funktionsaufrufer onEnterFrame vergibt keine parameter - deshalb kann/braucht deine funktion auch keine zu empfangen!
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (16-01-2006 um 18:19 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 16-01-2006, 18:25   #3 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 134
Danke für die schnelle Antwort!

Und wieder was gelernt. Das Problem ist, dass in der Funktion clump_about() das Zentrum definiert wird zu dem alle Bälle hin wollen.
Ich würde den Bällen aber allen unterschiedliche Punkte zuweisen zu denen sie fliegen.

Sowas wie

Code:
var x=250;
var y=350;

mc.onEnterFrame = clump_about(x,y);
wäre in dem Fall echt klasse. Habe ich sonst irgendeine Möglichkeit die Koordinaten an clump_about weiterzugeben?

Danke.

Viele Grüße,

Wassim
Wassim ist offline   Mit Zitat antworten
Alt 16-01-2006, 18:33   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
da gibt es wie immer viele möglichkeiten. z.b.
Code:
MovieClip.prototype.clump_about = function(x, y) {
	this.x = x;
	this.y = y;
	this.onEnterFrame = function() {
		trace(this+": "+x+" // "+y);
	};
};
//
ball1.clump_about(100, 300);
ball2.clump_about(200, 300);
ball3.clump_about(300, 300);
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (17-01-2006 um 00:54 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 16-01-2006, 22:35   #5 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 134
Vielen Dank!

Ich werde es gleich mal ausprobieren!

Gruß,

Wassim
Wassim ist offline   Mit Zitat antworten
Alt 17-01-2006, 02:02   #6 (permalink)
GelegenheitsUser
 
Registriert seit: Jul 2004
Ort: Berlin
Beiträge: 114
Es geht glaube ich auch ohne Prototype:

clump_about = function() {
trace(this.xpos);
trace(this.ypos);
}

....

mc.xpos = 100;
mc.ypos = 200;
mc.onEnterFrame = clump_about;
stnswz ist offline   Mit Zitat antworten
Alt 17-01-2006, 14:53   #7 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 134
Hallo!

Danke für die Tipps! Beide Möglichkeiten sind möglich. Nur habe ich nun das Problem, dass die Bälle nicht mehr auf die Funktion clump_about() ansprechen sobald die Bälle total still stehen. Erst wenn ich sie per Dragging ein wenig bewege, dann erst sprechen Sie wieder an.

Weiß jemand wie ich das Problem löse? Sie sollen sich IMMER abstoßen wenn sie sich zu nahe kommen.

Vielen Dank!

Gruß,

Wassim
Angehängte Dateien
Dateityp: zip Cars2.zip (9,9 KB, 3x aufgerufen)
Wassim ist offline   Mit Zitat antworten
Alt 17-01-2006, 16:14   #8 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
Code:
// Attraction to center
var dx = xaxis-this._x;
var dy = yaxis-this._y;
var dist = Math.sqrt(dx*dx+dy*dy);
if (dist==0)	dist=.1; // notlösung
weight += kCenterWeight;
var scale = kCenterWeight/dist;
fx += dx*scale;
fy += dy*scale;
wenn hier dist gleich null ist, dann ergibt die nachfolgende division müll und es tut sich nichts mehr.
besser wäre freilich, wenn du beim aufprall die gegnerische kugel anstossen würdest (elastischer stoss).
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 17-01-2006, 16:53   #9 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 134
Zunächst einmal: DU BIST GENIAL!!

Davon abgesehen: Werden die Kugeln nicht angestoßen bei meinem Beispiel?
Ist das ein großer Aufwand? Oder kennst Du ein Tutorial das mir damit weiterhelfen würde? Ich meine, es funzt zwar ganz gut mit Deiner "Notlösung", aber das mit dem elastischen Stoß würde ich gerne ausprobieren.

Vielen Dank nochmals!

Gruß,

Wassim
Wassim ist offline   Mit Zitat antworten
Alt 17-01-2006, 17:10   #10 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
"..elastischen Stoß.."
findest du in jeder billigen formelsammlung

http://www.seibsprogrammladen.de/fra...allistik/flash
nr.9
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 17-01-2006, 17:47   #11 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 134
Super!

Ich versuche das heute abend mal!

Danke vielmals!

Gruß,

Wassim
Wassim ist offline   Mit Zitat antworten
Alt 06-02-2006, 20:16   #12 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 134
Hallo!

Ich habe mit diesem Beispiel ein letztes Problem bei dem ich seit einiger Zeit GAR nicht weiter weiß. Ihr könnt Euch unter diesem Link ansehen wie "weit" ich bei diesem Projekt bin. Jeder Ball steht für einen Datensatz aus der Datenbank. Wenn Ihr am Anfang beispielsweise die Werte Baujahr: 2000, Preis: 19000 und Leistung: 163 eingebt, seht ihr wie die Bälle sich zu ihren Positionen bewegen. Soweit so gut. Ihr könnt aber auch sehen dass einige Kugeln links oben um bestimmte Positionen kämpfen die nahe bei einander sind. Nun meine Frage: seht Ihr eine Möglichkeit wie ich es schaffe dass die Bälle alle stehenbleiben sobald a) die Regler losgelassen sind, und b) die Bälle ihre Positionen so gut wie möglich erreicht haben? Der Notfallplan den ich habe ist der folgende: Sobald ein Regler losgelassen wird, läuft ein Countdown runter, und dann friert alles ein... bis ein Regler betätigt wird. Das ist leider eine unschöne und wenig elegante Lösung. Hat jemand einen besseren Vorschlag? Wäre für jeden Vorschlag dankbar.

Viele Grüße,

Wassim

PS: Ihr könnt die As. Datei runterladen. Da steht der Code zum Beispiel im Netz drin.
Angehängte Dateien
Dateityp: zip clumping.zip (3,7 KB, 4x aufgerufen)
Wassim ist offline   Mit Zitat antworten
Alt 06-02-2006, 23:00   #13 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
z.b.
Code:
if (globales_bewege_flag == true) {
	if (Math.abs(this.vx)+Math.abs(this.vy)>1) {
		this._x += this.vx;
		this._y += this.vy;
	}
}
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 06-02-2006, 23:59   #14 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 134
Code:
globales_bewege_flag == true
Danke für Deine Hilfe. Verstehe dennoch das folgende nicht:
Wann soll das flag gesetzt werden?

Viele Grüße,

Wassim
Wassim ist offline   Mit Zitat antworten
Alt 07-02-2006, 00:58   #15 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
du darfst auch ein bisschen mitdenken
"..wie ich es schaffe dass die Bälle alle stehenbleiben sobald.."

..sobald irgend etwas globales_bewege_flag auf false setzt werden keine koordinaten mehr zugewiesen. deshalb bleiben alle bälle stehen. wird das flag, von wem auch immer (z.b. "..die Regler losgelassen sind.."), wieder auf true gesetzt, dann bewegen sich die bälle wieder.

der name 'globales_bewege_flag' ist natürlich nur beispielhaft für eine variable, die global zugänglich ist.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
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 06:29 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele