2011-01-11 4 views
2

ich eine AS3 App Klasse zB haben (Pseudocode)Flex App: Framerate Eigenschaft ist NaN

public class MyApp extends Application 
{ 
     protected function onRender():void 
     { 
      trace("frameRate = "+frameRate); 
     } 
} 

und diese wird dann von der App MXML erweitert:

<MyApp width="100%" height="100%" frameRate="30" enterFrame="onRender()"> 
... 
</MyApp> 

Die App scheint zu sein, läuft mit der richtigen Geschwindigkeit, aber in MyApp.onRender() wird frameRate als NaN angesehen (auch im Debugger, wenn ich durchtrete). Warum ist das? Wie sollte Ich erhalte die FPS-Eigenschaft der Anwendung?

Antwort

1

Die Sprachreferenz hat diese Notiz für frameRate in der Anwendungsklasse:

Hinweis: Diese Eigenschaft kann nicht von Actionscript-Code festgelegt werden; Es muss in MXML-Code festgelegt werden.

Wenn Sie stage.frameRate in Ihrem Trace verwenden, sollte es die Framerate geben, die Sie der Anwendung zugewiesen haben. Möglicherweise müssen Sie eine try-catch Anweisung um die trace werfen, da die enterFrame Ereignis ausgelöst werden kann, bevor stage instanziiert wird.

+1

ja 'Stage.frameRate' funktioniert. Aber ich versuche nicht, es im AS3-Code zu setzen, sondern lese es nur ... also warum gibt der Getter NaN zurück? –

+0

Ich weiß es nicht genau. Die generierte Quelle zeigt, dass eine frameRate-Zuweisung in der Anwendung zu einer Anweisung [SWF (frameRate = Wert)] im AS wird. Meine Annahme wäre, dass, da Werte in Metadatenanweisungen nicht bindbar sind, frameRate keine echte Eigenschaft (mit einem Getter und Setter), sondern nur eine Kurzschrift für die [SWF()] -Anweisung ist. Daher hat es im AS3-Code keine Bedeutung, weder für das Setzen noch für das Holen. Aber ich rate mal wieder. – merv

+0

Ich habe gerade das gleiche Problem festgestellt. Möglicherweise möchten Sie wissen, dass Flash Builder 4 auch das Hervorheben (und Anzeigen der Hilfe-QuickInfo) für das Attribut frameRate verweigert. –