Zurück   Flashforum > Flash > Flash Einsteiger

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-05-2011, 22:34   #1 (permalink)
Neuer User
 
Benutzerbild von Opi3
 
Registriert seit: Dec 2010
Beiträge: 363
In Classe werden Keyboard eingaben nicht erkannt

hallo,
ich wollte fragen warum in der Classe das ENTER_FRAME.Event ausgeführt wird, die KeyboardEvent's aber auf der strecke bleiben:
PHP-Code:
package 
{
    
import flash.events.Event;
    
import flash.events.TimerEvent;
    
import flash.utils.Timer;
    
import flash.events.KeyboardEvent;
    
import flash.text.TextField;
    
import flash.display.Sprite;

    public class 
FpsI extends Sprite
    
{
        public var 
rate:Number 0;
        private var 
anzahl:Number 0;
        private var 
timer:Timer;
        private var 
WOIS:Number;
        private var 
textFeld:TextField = new TextField();

        public function 
FpsI(WieOftInSecunde:Number)
        {
            
WOIS WieOftInSecunde;
            
addEventListener(Event.ENTER_FRAME,counter);
            
timer = new Timer(1000 WOIS,0);
            
timer.addEventListener("timer"timerHandler);
            
timer.start();
            
addEventListener(KeyboardEvent.KEY_DOWN,zeigen);
        }

        private function 
timerHandler(event:TimerEvent):void
        
{
            
rate anzahl;
            
anzahl 0;
            
textFeld.text "Fps: " rate;
            
trace("Fps: "rate);
        }

        private function 
counter(e:Event)
        {
            
anzahl +=  WOIS;
        }

        private function 
zeigen(e:KeyboardEvent)
        {
            
trace("zeigen");
            if (
e.keyCode == 17)
            {
                
addChild(textFeld);
                
removeEventListener(KeyboardEvent.KEY_DOWN,zeigen);
                
addEventListener(KeyboardEvent.KEY_UP,verstecken);
            }
        }

        private function 
verstecken(e:KeyboardEvent)
        {
            
trace("verstecken");
            
addEventListener(KeyboardEvent.KEY_DOWN,zeigen);
            
removeEventListener(KeyboardEvent.KEY_UP,verstecken);
            
removeChild(textFeld);
        }

    }

anbei:
ich habe noch nicht so viel Erfahrung mit classen,
wenn ich also einen fatalen Fehler(im Aufbau, u.s.w) würde ich mich über Aufklärung freuen.

Viele Grüße Opi3
Wenn es wieder so ein "ÜbermüdungsFehler" ist tut es mir Leid das ich euch die Zeit gestohlen habe.
__________________
Es gibt 7 Milliarden Menschen und einer davon bin ich.

Eine Pizza mit r = z und dicke = a hat v = Pi*z*z*a;
Opi3 ist offline   Mit Zitat antworten
Alt 23-05-2011, 03:17   #2 (permalink)
Neuer User
 
Benutzerbild von andrelehnert
 
Registriert seit: Oct 2007
Ort: Kölle
Beiträge: 1.231
Du mußt diesen Eventlistener bei der Stage registrieren...

Du könntest beispielsweise eine referenz der stage an diese Klasse übergeben
oder den Listener direkt in der Dokumentenklasse registrieren und durch dessen EventHandler dann in deiner Klasse FpsI eine public function ausführen...

LG ANdré
__________________
Die Hoffnung stirbt zuletzt.
Aber sie stirbt.
andrelehnert ist offline   Mit Zitat antworten
Alt 23-05-2011, 05:38   #3 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.498
Nur so als Ergänzung: Das liegt am Focus. Wenn du den mc anklickst, dann sollten die KeyboardEvents auch funktionieren. Man will ja z. B. bei zwei Textfeldern nicht gleichzeitig in beide schreiben, sondern nur in das zuletzt gewählte.

Wenn das trotzdem immer sein soll, machst du das wie Andre sagte über die stage. Allerdings muss man dazu wissen, dass ein DisplayObject wie dein Sprite hier, die stage erst kennt, wenn du das Objekt mit addChild() auf die Bühne gesetzt hast (andernfallst hat es ja keine stage, genausowenig wie ein parent). Daher funktioniert das im Konstruktor noch nicht sondern erst später. Aber auch dafür gibt es Events.

Bsp. (wieder mal ungetestet):

PHP-Code:
package 
{
    
import flash.display.Sprite;
    
import flash.events.Event;
    
import flash.events.KeyboardEvent;

    public class 
EinBeispiel extends Sprite
    
{
        public function 
EinBeispiel (){
            
trace(stage);//kennt er noch nicht
            
addEventListener(Event.ADDED_TO_STAGEaddedToStagefalse0true);
        }
        private function 
addedToStage(e:Event):void{
            
removeEventListener(Event.ADDED_TO_STAGEaddedToStage);
            
trace(stage);//jetzt kennt er seine stage
            
stage.addEventListener(KeyboardEvent.KEY_DOWNkeyDownHandlerfalse0true);
        }
        private function 
keyDownHandler(e:KeyboardEvent):void{
            
trace(e.toString());
        }

    }

mfg

sx

Geändert von shin10 (23-05-2011 um 05:47 Uhr)
shin10 ist offline   Mit Zitat antworten
Alt 23-05-2011, 12:39   #4 (permalink)
Neuer User
 
Benutzerbild von Opi3
 
Registriert seit: Dec 2010
Beiträge: 363
Ich bedanke mich bei euch, vielleicht könnt ihr damit ja was anfangen:
PHP-Code:
package 
{

//by Opi3:

    
import flash.events.Event;
    
import flash.events.TimerEvent;
    
import flash.utils.Timer;
    
import flash.events.KeyboardEvent;
    
import flash.text.TextField;
    
import flash.display.Sprite;

    public class 
FpsI extends Sprite
    
{
        public var 
rate:Number 0;
        private var 
anzahl:Number 0;
        private var 
timer:Timer;
        private var 
WOIS:Number;
        private var 
textFeld:TextField = new TextField();

        public function 
FpsI(WieOftInSecunde:Number)
        {

            
WOIS WieOftInSecunde;
            
addEventListener(Event.ADDED_TO_STAGEaddedToStage);
        }

        private function 
addedToStage(e:Event):void
        
{
            
removeEventListener(Event.ADDED_TO_STAGEaddedToStage);
            
stage.addEventListener(Event.ENTER_FRAME,counter);
            
timer = new Timer(1000 WOIS,0);
            
timer.addEventListener("timer"timerHandler);
            
timer.start();
            
stage.addEventListener(KeyboardEvent.KEY_DOWN,zeigen);
        }

        private function 
timerHandler(event:TimerEvent):void
        
{
            
rate anzahl;
            
anzahl 0;
            
textFeld.text "Fps: " rate;
            
textFeld.10;
            
textFeld.10;
        }

        private function 
counter(e:Event)
        {
            
anzahl +=  WOIS;
        }

        private function 
zeigen(e:KeyboardEvent)
        {
            if (
e.keyCode == 17)
            {
                
stage.addChild(textFeld);
                
removeEventListener(KeyboardEvent.KEY_DOWN,zeigen);
                
stage.addEventListener(KeyboardEvent.KEY_UP,verstecken);
            }
        }

        private function 
verstecken(e:KeyboardEvent)
        {
            if (
e.keyCode == 17)
            {
                
stage.addEventListener(KeyboardEvent.KEY_DOWN,zeigen);
                
removeEventListener(KeyboardEvent.KEY_UP,verstecken);
                
stage.removeChild(textFeld);
            }
        }

    }

Auf jeden fall vielen Dank für die Hilfe.
Viele Grüße Opi3
__________________
Es gibt 7 Milliarden Menschen und einer davon bin ich.

Eine Pizza mit r = z und dicke = a hat v = Pi*z*z*a;

Geändert von Opi3 (23-05-2011 um 12:40 Uhr)
Opi3 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
as3, counter, fps, frame, rate

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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Flash CS5] TouchEvents werden nicht erkannt. Ali Flash Einsteiger 1 14-06-2010 09:53
cuepoints werden nicht korrekt erkannt bluevenom Flash 8 0 08-05-2009 08:46
Schlüsselbilder werden nicht erkannt??? achim2 Flash Einsteiger 1 16-09-2008 20:14
html tags werden nicht erkannt sina Flash MX 2004 39 02-09-2006 10:46
fonts werden nicht erkannt Treiber83 Flash MX 2004 4 27-11-2005 15:48


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele