Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 28-06-2004, 15:09   #1 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Keylistener Mac OS & Windows inkompatibel

Hi zusammen,

ich baue gerade an einem Spiel in Flash. Inhalt ist einfach ein kleiner trashy Charakter, den man mittels Pfeiltasten in alle 4 Richtungen steuern kann und beim Drücken von Space einen Schlag ausführt.

Ich arbeite selbst mit Mac OS X 10.3.4 und einer Protastatur, nutze zum Testen den Apple Browser Safari der aktuellsten Version.

Mein Problem besteht darin, das irgendwie die Tasten zb unter Safari Mac einwandfrei funktionieren, unter Firefox hingegen wieder nicht.
Unter Windows funktioniert es zb gar nicht.
Woran liegt das?

Ich habe hier mal meinen Codesnip, der sich um die Steuerung kümmert…

Den gleichen Listener benutze ich übrigens auch auf der Mainpage… dort war ursprünglich die ESCape Taste zum Auslösen einer Aktion vorgesehen… funktionierte aber nicht unter Windows. Die Space Taste hingegen ist plattformunabhängig, wie mir scheint.

PHP-Code:
//Actionscript 1.0

LftDwn=new Object();
LftUp=new Object();
Key.addListener(LftDwn);
LftDwn.onKeyDown = function() 
    {
    if (
Key.isDown(Key.LEFT)) 
        {    
        
Key.removeListener(LftDwn);
        
Key.addListener(LftUp);
        
_root.character.gotoAndStop('left');
        
_root.character._x=_global.character_x-20;
        }
    };
LftUp.onKeyUp=function() 
    {
    
Key.addListener(LftDwn);
    
Key.removeListener(LftUp);
    
_root.character.gotoAndStop('center');
    
_global.character_x=getProperty(_root.character_x);
    };
    
RgtDwn=new Object();
RgtUp=new Object();
Key.addListener(RgtDwn);
RgtDwn.onKeyDown = function() 
    {
    if (
Key.isDown(Key.RIGHT)) 
        {        
        
Key.removeListener(RgtDwn);
        
Key.addListener(RgtUp);
        
_root.character.gotoAndStop('right');
        
_root.character._x=_global.character_x+20;
        }
    };
RgtUp.onKeyUp=function() 
    {
    
Key.addListener(RgtDwn);
    
Key.removeListener(RgtUp);
    
_root.character.gotoAndStop('center');
    
_global.character_x=getProperty(_root.character_x);
    };

UpDwn=new Object();
UpUp=new Object();
Key.addListener(UpDwn);
UpDwn.onKeyDown = function() 
    {
    if (
Key.isDown(Key.UP)) 
        {        
        
Key.removeListener(UpDwn);
        
Key.addListener(UpUp);
        
_root.character.gotoAndStop('up');
        
_root.character._y=_global.character_y-20;
        }
    };
UpUp.onKeyUp=function() 
    {
    
Key.addListener(UpDwn);
    
Key.removeListener(UpUp);
    
_root.character.gotoAndStop('center');
    
_global.character_y=getProperty(_root.character_y);
    };
    
DwnDwn=new Object();
DwnUp=new Object();
Key.addListener(DwnDwn);
DwnDwn.onKeyDown = function() 
    {
    if (
Key.isDown(Key.DOWN)) 
        {        
        
Key.removeListener(DwnDwn);
        
Key.addListener(DwnUp);
        
_root.character.gotoAndStop('down');
        
_root.character._y=_global.character_y+20;
        }
    };
DwnUp.onKeyUp=function() 
    {
    
Key.addListener(DwnDwn);
    
Key.removeListener(DwnUp);
    
_root.character.gotoAndStop('center');
    
_global.character_y=getProperty(_root.character_y);
    }; 
Warum ist das so?

Meine zweite Frage wäre, ob ich in einem Keylistener zb auch eine Tastenkombination bestimmen kann.
Z.b. für eine diagonale Bewegung. Triggered werden sollte dann zb nur bei Pfeil-Oben und Pfeil Rechts in Kombination. Oder wenn man Space für den Schlag drückt und dabei eine Richtungstaste ebenfalls gedrückt hält, eine bestimmte Aktion aufruft.

Geht so etwas?


Liebe Grüße

Yves
  Mit Zitat antworten
Alt 28-06-2004, 15:37   #2 (permalink)
a.k.a maddin79
 
Benutzerbild von madflanderz
 
Registriert seit: Jul 2003
Ort: berlin f-hain
Beiträge: 1.693
nimm doch einfach nur einen keyListener für alle tasten anstatt so viele, und eine tastenkombination kann man auch einfach abfragen.

PHP-Code:

keyListener
=new Object(); 

keyListener.onKeyDown = function() 
    { 
    if (
Key.isDown(Key.LEFT)) 
        {     
        
// some action
        

    
    if (
Key.isDown(Key.LEFT)) 
        {            
        
// some action
        

    
    
// für combos
    
if (Key.isDown(Key.LEFT) && Key.isDown(Key.UP)) 
        {            
        
// some action
        


    };
    
    
keyListener.onKeyUp=function() 
    { 
    
// wozu den listener löschen???
    
};
    
    
Key.addListener(keyListener); 
madflanderz ist offline   Mit Zitat antworten
Alt 28-06-2004, 18:09   #3 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Hi,

vielen Dank für deine Verbesserungsvorschläge.

Das Löschen von Objekten & co hab ich mir irgendwie angewöhnt, muss hier natürlich nicht, das es ja quasi ein hin- und her ist.

Weisst du auch etwas über mein „Kompatibilitätsproblem“?


Liebe Grüße

Yves
  Mit Zitat antworten
Alt 29-06-2004, 08:17   #4 (permalink)
a.k.a maddin79
 
Benutzerbild von madflanderz
 
Registriert seit: Jul 2003
Ort: berlin f-hain
Beiträge: 1.693
moinsen,

vielleicht liegts auch daran, daß dein film noch nicht den fokus der seite hat und du erst in den film reinklicken mußt bevor die steuerung funktioniert ????
madflanderz ist offline   Mit Zitat antworten
Alt 29-06-2004, 12:05   #5 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
An meinem Script sollte es also auf keinen Fall liegen?

An dem Focus liegt es leider nicht…
  Mit Zitat antworten
Alt 27-02-2008, 11:48   #6 (permalink)
Neuer User
 
Benutzerbild von swiged
 
Registriert seit: Nov 2007
Beiträge: 56
mac-win problem

hi, habe leider keine antwort auf dein problem, stattdessen komm ich mit einem neuen problem daher: passte verhältnismäßig gut in den thread, allerdings umgekehrt.
arbeite unter windows, das vorneweg. habe einen kreisel erstellt, der sich bewegen und rotieren soll. entsprechend der tastendrücke. spriche wenn ich die linke pfeiltaste drücke soll er nach links laufen bis ich sie los lasse. drücke ich w oder s soll er sich um seine x-achse drehen und zwar so lange bis ich diese los lasse. soweit klappt das auch, allerdings nur bei unix und win systemen. beim mac kann man die entsprechenden tasten bis zum sant nimmerlandstag gedrückt halten und es wird nichts passieren. jeder erneute druck erzeugt ein wenig rotation.
hier die entsprechende implementierung:
Code:
var keyListener:Object = new Object();
this.onEnterFrame = function(){
      	if(Key.isDown(Key.UP))cam1.y += 5;
        if(Key.isDown(Key.DOWN))cam1.y -= 5;
				
	if(Key.isDown(Key.LEFT)) cam1.x +=5;
	if(Key.isDown(Key.RIGHT)) cam1.x -=5;
		
		//Rotation
		keyListener.onKeyDown = function() {
			if (Key.getCode() == 83){
				setRotX(rotX, g/100);
		 		g+= 5;
				}
			if (Key.getCode() == 87){
				setRotX(rotX, g/100);
		 		g-= 5;
				}
			if (Key.getCode() == 65){
				setRotY(rotY, f/100);
		 		f+= 5;
				}
			if (Key.getCode() == 68){
				setRotY(rotY, f/100);
		 		f-= 5;
				}
			if (Key.getCode() == 81){
				setRotZ(rotZ, h/100);
		 		h-= 5;
				}
			if (Key.getCode() == 69){
				setRotZ(rotZ, h/100);
		 		h+= 5;
				}
			if (Key.getCode() == 84){
				cam1.z +=5;
				}
			if (Key.getCode() == 90){
				cam1.z -= 5;
				}
		}
		Key.addListener(keyListener);
}
Angehängte Dateien
Dateityp: rar vertices.rar (1,9 KB, 1x aufgerufen)
swiged ist offline   Mit Zitat antworten
Alt 27-02-2008, 12:06   #7 (permalink)
Der Wunderhund
 
Benutzerbild von gaspode
 
Registriert seit: Jun 2002
Ort: Hattingen
Beiträge: 10.515
Bei mir gehts, zumindest im Flashplayer.

MAC OS 10.4.10

gruß, gaspode
gaspode ist offline   Mit Zitat antworten
Alt 27-02-2008, 12:20   #8 (permalink)
Neuer User
 
Benutzerbild von swiged
 
Registriert seit: Nov 2007
Beiträge: 56
geht es hier denn auch? fall snciht, könnte ich den fehler schon etwas eingrenzen. http://swiged.no-ip.org/apache2-default/vertices.html
swiged ist offline   Mit Zitat antworten
Alt 27-02-2008, 12:27   #9 (permalink)
Der Wunderhund
 
Benutzerbild von gaspode
 
Registriert seit: Jun 2002
Ort: Hattingen
Beiträge: 10.515
Ja geht auch.

Browser: Safari 3.0.4

gruß, gaspode
gaspode ist offline   Mit Zitat antworten
Alt 27-02-2008, 13:44   #10 (permalink)
Neuer User
 
Benutzerbild von swiged
 
Registriert seit: Nov 2007
Beiträge: 56
super danke. dann ein letztes mal noch: kannst du es evtl mit firefox versuchen, falls du den zufällig drauf hast?
swiged ist offline   Mit Zitat antworten
Alt 27-02-2008, 14:02   #11 (permalink)
Der Wunderhund
 
Benutzerbild von gaspode
 
Registriert seit: Jun 2002
Ort: Hattingen
Beiträge: 10.515
In Firefox funktionieren die Pfeiltasten.
Bei W und S funktionieren nur Einzelschritte.

gruß, gaspode
gaspode ist offline   Mit Zitat antworten
Alt 27-02-2008, 14:18   #12 (permalink)
Neuer User
 
Benutzerbild von swiged
 
Registriert seit: Nov 2007
Beiträge: 56
gut, vielen dank. dann weiß ich dass es am firefox liegt wenn er aufm mac läuft.
weiß evtl jemand woran das leigen könnte? ist der keylistener falsch implementiert oder begreift firefox da einfach was nicht?
swiged ist offline   Mit Zitat antworten
Alt 27-02-2008, 14:21   #13 (permalink)
Der Wunderhund
 
Benutzerbild von gaspode
 
Registriert seit: Jun 2002
Ort: Hattingen
Beiträge: 10.515
Ich würde es genau umgekehrt machen, also den
onEnterFrame in den onKeyDown und bei onKeyUp
würde ich den onEnterFrame wieder löschen (oder
zumindest irgendwie deaktiveren). So definierst
Du ja den onKeyDown immer wieder neu.

gruß, gaspode
gaspode ist offline   Mit Zitat antworten
Alt 27-02-2008, 15:32   #14 (permalink)
Neuer User
 
Benutzerbild von swiged
 
Registriert seit: Nov 2007
Beiträge: 56
super, werd das mal versuchen. vielen dank für die mühe
swiged ist offline   Mit Zitat antworten
Alt 29-02-2008, 13:21   #15 (permalink)
Neuer User
 
Registriert seit: Nov 2002
Beiträge: 7
Steuerung mit Pfeiltasten funktioniert nicht im Firefox

Hallo,

in meinem Film funktioniert die Steuerung mit den Pfeiltasten nur im IE, nicht aber im FF. Habe gehofft in den vorherigen Diskussionen eine Antwort auf die Frage zu bekommen, aber leider wurden sie nicht bis zum Ende weiter geführt, bzw. es gab noch keine Lösung.

Gibt es mittlerweile eigentlich neue Erkenntnisse? Die Steuerung ist glaube ich sehr einfach:


with(_root.figur){
if(Key.isDown(Key.DOWN)){
_y+=1;
}
else if(Key.isDown(Key.UP)){
_y-=1;
}
else if(Key.isDown(Key.RIGHT)){
_x+=1;
}
else if(Key.isDown(Key.LEFT)){
_x-=1;
}

Wäre toll. Vielen Dank schonmal!
Jutta
xenai 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 18:25 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele