• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 31-07-2010, 01:51   #1 (permalink)
Neuer User
 
Registriert seit: Jul 2010
Beiträge: 9
Animation mit KEY_DOWN ein mal starten.

hallo,

bin ein relativer AS3 neuling und habe folgendes problem:

ich habe einen spieler character, der aus 3 frames besteht. auf jedem frame ist eine movieclip mit einer animation - nach links laufen, nach rechts laufen und stehen. ich möchte jetzt, wenn ich nach rechts drücke, dass der spieler sich nach rechts bewegt und auf die "nach rechts lauf" animation hüpft. so weit funktioniert das auch, nur mit dem problem, dass wenn ich auf der taste bleibe, die animation zu ruckeln anfängt. das liegt an der wiederholrate der taste, d.h. jedes mal, wenn flash den tastendruck neu wahrnimmt, ist ein ruckler drin. ich hoffe, mein problem ist verständlich und irgendjemand hat eine lösung dafür.

hier mein code:

Code:
var keys = new Object();
keys[Keyboard.LEFT] = {down:false, dirx:-10};
keys[Keyboard.RIGHT] = {down:false, dirx:10};

stage.addEventListener (KeyboardEvent.KEY_DOWN, downKeys);
stage.addEventListener (KeyboardEvent.KEY_UP, upKeys);
stage.addEventListener (Event.ENTER_FRAME, runGame);

function downKeys (ev:KeyboardEvent) {
    if (keys[ev.keyCode] != null) {
        keys[ev.keyCode].down = true;
    }
	if(ev.keyCode == Keyboard.RIGHT){
		player.gotoAndStop('run_right');
	}
	if(ev.keyCode == Keyboard.LEFT){
		player.gotoAndStop('run_left');
	}
}

function upKeys (ev:KeyboardEvent) {
    if (keys[ev.keyCode] != null) {
        keys[ev.keyCode].down = false;
    }
}

function runGame (ev:Event){
	for each (var keyOb in keys) {
		if (keyOb.down == true && keyOb.dirx != 0) {
			player.x += keyOb.dirx;
		}
	}
}
ich würde ja sagen, ideal wäre folgendes: wenn z.b. "RIGHT" gedrückt wird, wird die animation nach rechts einmal gestartet und basta. die bewegung nach rechts findet dann im "ENTER_FRAME" statt...

vielen dank

lg,
der dodo
taekwondodo ist offline   Mit Zitat antworten
Alt 31-07-2010, 02:03   #2 (permalink)
Neuer User
 
Registriert seit: Oct 2009
Ort: Bremen
Beiträge: 147
Moin,

also generell: Wieso benutzt du gotoAndStop() wenn du eine Animation starten willst? Dann wohl doch eher gotoAndPlay()?!

Vorrausgesetzt dir ist egal in welche Richtung gerade animiert wird und du willst also nur wissen ob gerade eine Animation läuft. Da würde ich einen Boolean benutzen. Wenn die Animation fertig ist, wird noch ein Event dispatched und der Boolean wird wieder auf false gesetzt.
Danach kann dann jeder Tastendruck wieder registriert werden.

Geändert von DerTobi (31-07-2010 um 02:09 Uhr)
DerTobi ist offline   Mit Zitat antworten
Alt 31-07-2010, 10:38   #3 (permalink)
Neuer User
 
Registriert seit: Jul 2010
Beiträge: 9
hallo,

danke, erst mal, aber da hab ich wohl was nicht ganz klar erklärt

also, der player MC ist so aufgebaut, dass es mehrere keyframes gibt, auf denen jeweils ein MC liegt, der eine animation beinhaltet, z.b. einen walkcycle, rumstehen, etc. und ich möchte, dass wenn ich auf die taste nach rechts drücke, der player MC auf die "nach rechts"-animation springt, eben mit gotoAndStop()...

das mit einer boolean variable hab ich mir auch schon überlegt. das problem ist nur, wenn ich z.b. die boolean auf true setze und wieder in jedem frame abfrage, ob die true ist, hab ich genau das selbe problem wieder...

lg,
der dodo
taekwondodo ist offline   Mit Zitat antworten
Alt 01-08-2010, 03:33   #4 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.238
hi dodo,

ich denke du kannst dein problem auf diese art lösen. ich schätze es ist eigentlich selbsterklärend. drum sag ich gar nicht mehr dazu
PHP-Code:
var currentAnimation:String = new String("");
function 
downKeys (ev:KeyboardEvent) {
    var 
nextAnimation:String currentAnimation;
    if (
keys[ev.keyCode] != null) {
        
keys[ev.keyCode].down true;
    }
    if(
ev.keyCode == Keyboard.RIGHT){
        
nextAnimation 'run_right';
    }
    if(
ev.keyCode == Keyboard.LEFT){
        
nextAnimation 'run_left';
    }

    
//animation wird nur gestartet, wenn sich der wert geändert hat
    
if(currentAnimation != nextAnimation){
        
player.gotoAndStop(currentAnimation);
    }

mfg

sx
__________________

flintfabrik.de
shin10 ist gerade online   Mit Zitat antworten
Alt 01-08-2010, 19:13   #5 (permalink)
Neuer User
 
Registriert seit: Jul 2010
Beiträge: 9
shin, danke für den vorschlag, werd ich gleich probieren, sobald ich dazu komm, schaut aber vielversprechend aus... was fehlt (vermute ich mal so) ist
Code:
if(currentAnimation != nextAnimation){ 
        player.gotoAndStop(currentAnimation); 
        currentAnimation = nextAnimation;
}
danke nochmal,
der dodo
taekwondodo ist offline   Mit Zitat antworten
Alt 01-08-2010, 19:26   #6 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.238
Zitat:
was fehlt (vermute ich mal so) ist
ehehehe, bestanden!
war halt schon später
__________________

flintfabrik.de
shin10 ist gerade online   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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Probleme mit KEY_DOWN meeAgain ActionScript 3 1 24-01-2010 20:07
tastenkombination aus zwei KEY_DOWN ? paulhey ActionScript 3 1 18-01-2010 15:43
KeyboardEvent.KEY_DOWN ohne dauerfeuer VIR²L ActionScript 3 11 05-12-2007 19:40
Animation von cd starten Baccu Flash MX 2004 1 04-01-2006 12:54
Animation starten keizersosze Flash MX 5 05-10-2005 13:51


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:24 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele