Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 23-07-2005, 20:17   #1 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
onKeyDown + onKeyUp ( für ein Spiel )

Ich programmiere gerade ein kleines Spielchen, wo man im richtigen Moment die entsprechende Pfeiltaste drücken muss.

Muss man sich so vorstellen das die Pfeile von links ins Bild laufen und wenn die Pfeile sich im Rahmen befinden sollte man die entsprechende Taste drücken ( BeispielBild unten ).

Nun hab ich aber das Problem, das das momentan mit "onKeyDown" läuft, was aber nicht so praktisch ist, da man schon die entsprechende Taste betätigen kann bevor der Pfeil in der Box ist, noch schlimmer ist wenn mehrere gleiche Pfeile hintereinander kommen da man da gar nicht erst die Taste loslassen muss um sich die Punkte einzuheimsen.

Also müsste ich ne Mischung zwischen "onKeyDown" und "onKeyUp" nehmen.
Mein Ansatz zur Problemlösung währe jetzt folgender:
- ne Variable anlegen in der gespeichert wird, ob bevor dem "betreten" der Box die Taste nicht gedrückt war
- abfragen ob sich Pfeil in der Box befindet
- abfragen ob richtige Taste betätigt wurde und ob sie nicht vorher betätigt war
- Variable "reseten"

Nun möchte ich aber später noch, wenn Pfeil mittig in der Box ( plus/minus Toleranz ) und entsprechende Taste betätigt wurde mehr Punkte vergeben.
Aber das würde dann bestimmt ziemlich umständlich zu programmieren sein.
Da ich im Moment die Pfeile aus der Bibliothek in einen MC ( dient als Container ) attachen und die Abstände der Pfeile in einem Array speichere.
Im verlaufe des Spiels frage ich die x-koordinate des mc's ab und vergleiche diese mit dem Inhalt das Arrays und erfahre somit ob sich ein Pfeil in der Box befindet.

Und bevor ich mich in den Aufwand stürze, wollte ich mal fragen ob nicht einer nen besseren Ansatz hat um dieses KeyProblem zu lösen.
Oder prinzipiell einer einen anderen Ansatz vorschlagen würde.
Angehängte Grafiken
Dateityp: gif game001.gif (1,1 KB, 28x aufgerufen)
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 23-07-2005, 22:38   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
hat alles vor und nachteile. gerade für reaktions-spiele ist methode 2 besser.
ActionScript:
  1. // gibt es mehr als diese beiden möglichkeiten?
  2. //
  3. // events kommen nur wenn sie ausgelöst wurden
  4. // oder später, wenn flash gerade schufftet :-(
  5. // gilt für alle tasten
  6. // man kann mehrere KeyListen machen
  7. // und die nach bedarf an und abmelden
  8. space_down = false;
  9. KeyListe = new Object();
  10. KeyListe.onKeyDown = function() {
  11.     trace('onKeyDown');
  12.     if (Key.isDown(Key.SPACE)) {
  13.         trace('SPACE is down');
  14.         var space_down = true;
  15.     }
  16. };
  17. KeyListe.onKeyUp = function() {
  18.     trace('onKeyUp');
  19.     if (Key.isDown(Key.SPACE)) {
  20.         trace('SPACE is up');
  21.         var space_down = false;
  22.     }
  23. };
  24. Key.addListener(KeyListe);
  25. //
  26. // direkt im code wird ständig abgefragt,
  27. // steht dafür dann zur verfügung, wenn
  28. // 'ich' das brauche.
  29. // geht nur mit einzelnen tasten
  30. // up ist, wenn nicht down
  31. _root.onEnterFrame = function() {
  32.     if (Key.isDown(Key.SPACE)) {
  33.         trace('SPACE in onEnterFrame');
  34.     }
  35. };
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (23-07-2005 um 22:41 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 24-07-2005, 12:25   #3 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Ja, das ist schon klar, blos ich muss ja für alle 4 Tasten ( oben, unten, links und rechts ) die Abfrage machen.
Heißt also das ich zuerst abfrage ob sich ein Pfeil kurz vor der Box befindet und dann prüfe ob Taste noch nicht gedrückt wurde.
Danach muss ich dann prüfen ob Taste , wenn Pfeil sich in der Box befindet, gedrückt wurde.
Also muss ich das doch so umständlich lösen, hmmm....naja da werd ich mich mal an die Arbeit machen.

Trotzdem Danke.
__________________
ERROR: Signature is too large

Geändert von rendner[i] (24-07-2005 um 12:55 Uhr)
rendner[i] ist offline   Mit Zitat antworten
Alt 24-07-2005, 13:31   #4 (permalink)
poke
 
Registriert seit: Dec 2002
Ort: Iserlohn [NRW]
Beiträge: 2.304
hmm, du bewegst die Pfeile ja sowieso per onEnterFrame oder mit nem Interval. Am praktischten wäre es deswegen, gleich in diesem Interval den Status abzufragen. Also in etwa so:

ActionScript:
  1. _root.onEnterFrame = function()
  2. {
  3. // pfeile bewegen
  4.  
  5. // abfrage 1: Pfeil im Kasten (beispiel 'links')
  6. if ( pfeil[3]._x < 100 && pfeil[3]._x > 50 ) // bsp. Pfeil im Kasten
  7. {
  8. if ( Key.isDown( Key.LEFT )
  9. {
  10. if ( leftKeyStat == false )
  11. {
  12. leftKeyStat = true;
  13. // Klick gilt, da Taste vorher nicht aktiv.
  14. // Punkteberechnung, etc..
  15. }
  16. }
  17. }
  18. else // Pfeil nicht im Kasten - keine Punkte
  19. {
  20. if ( Key.isDown( Key.LEFT )
  21. {
  22. leftKeyStat = true;
  23. }
  24. else
  25. {
  26. leftKeyStat = false;
  27. }
  28.  
  29. // etc.
  30.  
  31. }
  32. }

also so in etwa ^^ hoffentlich wird das Prinzip deutlich
pokepika ist offline   Mit Zitat antworten
Alt 24-07-2005, 14:47   #5 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
@ pokepika:

Genauso ( so ähnlich ) wollt ich es auch machen, und habs schon fast umgesetzt.

Danke euch trotzdem, damit dürfte das "Problem" gelöst sein.
__________________
ERROR: Signature is too large
rendner[i] 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 23:45 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele