Flashhilfe.de - Flash Community

Variablen aus onEnterFrame-Funktion zurückgeben [Flash CS3]

Forum > Flash Entwicklung > Variablen aus onEnterFrame-Funktion zurückgeben

 


AntwortenRegistrieren Seite1

 16.11.2007, 11:07 
Benutzerbild von Heavy
Beiträge: 247
Wohnort: Berlin
Registriert: Apr 2003

Variablen aus onEnterFrame-Funktion zurückgeben
Boa ich dreh noch durch.....

idie Variable die ich zurückgeben will wird in Debug (List Variables) als
vorhanden und auch wertig angezeigt, aber trotzdem komm ich im Film
nicht an die Varable ran. Ich verstah dass auch grad nicht mehr, hab
schon sämtliche Zuweisungen umgestellt und ausprobiert, aber ich kriegt
die Varable nicht zurück auf meien Hauptzeitleiste....

hier der Code

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
_global.mitteX = holder._x;
_global.mitteY = holder._y;
_global.dir =1;
_global.frameSpeed;
var bewegeId:Number;
var frameCount:Number = 1;

this.robotMenu.stop();

function frameFunc(){
   var newFrameSpeed:Number;
   createEmptyMovieClip("distanceControl",getNextHighestDepth());
   distanceControl.onEnterFrame = function()
   {
      var frameSpeed:Number;
      var aktXPos:Number = _xmouse; //a2
      var aktYPos:Number = _ymouse; //b2
      var ursprungX:Number = _global.mitteX;//a2
      var ursprungY:Number = _global.mitteY;//b2
      var delta_a = aktXPos - ursprungX;
      var delta_b = aktYPos - ursprungY;
      var distance = Math.sqrt(Math.pow(delta_a,2)+Math.pow(delta_b,2));
      distance = Math.round(distance);
      if(distance >= 150){
         this.frameSpeed = 27;
         //_global.frameSpeed = frameSpeed;
      }else if (distance >= 100 &&  distance < 150){
         this.frameSpeed = 27*2;
         //_global.frameSpeed = frameSpeed;
      }else if (distance >= 50 && distnace < 100){
         this.frameSpeed = 27*3;
         //_global.frameSpeed = frameSpeed;
      }else if (distance >= 25 && distance < 50){
         this.frameSpeed =27*4;
         //_global.frameSpeed = frameSpeed;
      }else{
         this.frameSpeed = 27*5;
         //_global.frameSpeed = frameSpeed;
      }
   }
   
   trace("out_Func:  "+_global.frameSpeed);
   return distanceControl.frameSpeed;
}

newFramerate = frameFunc();
bewegeId = setInterval(motion, newFramerate);


...wie Ihr seht hab ich auch versucht den Wert in der _global.Variable zu
speichern, aber it funtzt einfach nicht. da muss doch irgendwo soon ganz
kleiner Mieser Fehlerteufel drinn sein....

bitte helft.
Danke
deHeavy
Geändert von Heavy am 16.11.07 um 11:07 Uhr

 16.11.2007, 19:01Re1
Benutzerbild von Heavy
Beiträge: 247
Wohnort: Berlin
Registriert: Apr 2003

Themenautor/in

Ähh... hallo?

hat sich jemand schon hiermit befassen wollen/können?

 16.11.2007, 20:18Re2
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

Hi,
ich weiss garnicht, ob dieses Konstrukt überhaupt funktioniert. Ein wenig kann ich nachvollziehen, was du da vorhast.
Gibt denn das trace was vernünftiges aus?

 
nicht sichtbar bei eingeloggten Mitgliedern
 16.11.2007, 22:02Re3
Benutzerbild von Heavy
Beiträge: 247
Wohnort: Berlin
Registriert: Apr 2003

Themenautor/in

Also, wenn ich direkt aus der if Else schleife trace, dann krieg ich den Wert.
Genauso, wenn ich in der onEnterFrame-Function trace ist alles ok und super.

das trace was jetzt da steht ist undefind, aber da es ja in der Funktion funktioniert,
und auch im Ausgabefenster steht,wenn ich mir die Varablen des Films anschaue, weiß ich es geht, nur krieg ichs nicht aus der funktion raus und versteh ich nicht wie wo der Fehler ist...

also die schleifen funktionieren, aber aus der onEnterFrame krieg ich die Variable
nicht selbst zurück zur intervalFunktion...
Geändert von Heavy am 16.11.07 um 22:11 Uhr

 16.11.2007, 22:57Re4
Benutzerbild von mathis
Beiträge: 1443
Wohnort: bei Kiel
Registriert: Aug 2005

mh, vielleicht nicht allzu schön,
aber versuche doch das onEnterFrame manuell aufzurufen.
Also nachdem die Funktion definiert ist (bei Zeile 42):
ActionScript:
1distanceControl.onEnterFrame();


mathis

 17.11.2007, 10:37Re5
Benutzerbild von Heavy
Beiträge: 247
Wohnort: Berlin
Registriert: Apr 2003

Themenautor/in

Hey Danke Mathis, ein Ansatz,Juhu 8]

Aber muss ich dann nicht oben auch noch was ändern, zB. in der Zeile
nach createEmptyMC, wo ich die Funktion jetzt aufrufe?

weil die ja eigentlich gleich los raaast,
da ja onEnterFrame und die bedingungen
gleich erfüllt sind.

und du sagtest, nicht schön, vermutlich meinst du nicht elegant und AS-Like?!

wie würdest Du dass denn schicker/einfacher machen? ähh eleganter. 8]

 
nicht sichtbar bei eingeloggten Mitgliedern1&1 Webhosting
 18.11.2007, 00:41Re6
Benutzerbild von mathis
Beiträge: 1443
Wohnort: bei Kiel
Registriert: Aug 2005

Nein, das onEnterFrame rast eben nicht sofort los, sondern erst nach einer kurzen Zeit.

zum Testen:
ActionScript:
1
2
3
4
onEnterFrame = function () {
   a = 5;
};
trace(a); // -> undefined
ActionScript:
1
2
3
4
5
onEnterFrame = function () {
   a = 5;
};
onEnterFrame();
trace(a); // -> 5

Wie man das elegent lösen könnte kann ich jetzt ohne Weiteres nicht sagen.
mathis

 18.11.2007, 22:56Re7
Benutzerbild von Heavy
Beiträge: 247
Wohnort: Berlin
Registriert: Apr 2003

Themenautor/in

Heay mathis 8]

danke für deine Hilfe, jetzt krieg ich die Werte zurück die ich wollte.
Wie du gezeigt hast, läuft onEnterFrame nicht gleich los.

Leide funktioniert das ganze doch nicht so wie ich es mir vorgestellt habe.
Jetzt wird zwar die Variable weiter gegeben, aber die Schleife wird ja
irgendwie nur einmal aufgerufen, und läuft nicht im Hintergrund weiter, um
ständig die MousePos an set interval zu übermitteln.

werd mal versuchen das irgendwie umzustellen, um dann eine dauerhafte
Abfrage zu gewährleisten, letztenendes will ich ja die mouse immer abfragen
und dann damit setIntervall füttern.

trotzdem thx.

 19.11.2007, 15:58Re8
Benutzerbild von mathis
Beiträge: 1443
Wohnort: bei Kiel
Registriert: Aug 2005

Ah, jetzt verstehe ich erst was du vorhast.

Ich würde es so strukturieren.
ActionScript:
1
2
3
4
5
6
7
8
9
10
function motion():Void {
   // motion ausführen
   setTimeout(this, "motion", frameFunc());
}
function frameFunc():Number {
   var frameSpeed:Number;
   // frameSpeed berechnen
   return frameSpeed;
}
motion();

mathis

 
Themen
Ähnliche Beiträge zum Thema
_alpha änderung verlangsamen? [Flash 9] 11.01.2010 - partisanentity
 
AntwortenRegistrieren Seite1

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.
Partner Webseiten: DesignerInAction.de   Designnation.de   Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   PSD-Tutorials.de   Tutorials.de

Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2012 Sebastian Wichmann - Flashhilfe.de