Bewegung per Array - Problem

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Bewegung per Array - Problem

    Hallo!
    Ich verstehe nicht ganz was an folgenden Zeilen falsch sein soll. Ich habe noch nie mit einem Array zur Bewegung gearbeitet, jedenfalls außerhalb der Konsole....
    Kann wer helfen und es mir erklären? Die Gedanken die ich hatte stehen in den Kommentaren.

    Quellcode

    1. //Hochtaste -> True auf nächstes Kästchen
    2. if(Game.GetInput().IsKeyDown(sf::Key::Up))
    3. {
    4. //Wenn y<1 dann keine Kästchen übrig also Programm für 5sek. einfrieren
    5. if(y-1<=0)
    6. {
    7. y=1; //zurücksetzen
    8. }
    9. //Wenn y>1 dann momentanen Standt auf das nächste Kästchen setzen und nächsten Standt auf true
    10. else
    11. {
    12. Karte[y][x].Besetzt = false; //Alte Markierung auf false, damit es sich nicht doppelt.
    13. Karte[y-1][x].Besetzt = true; //Neue Markierung auf true, damit sie sichtbar und gesetzt wird.
    14. }
    15. }
    16. //Rechtstaste -> True auf nächstes Kästchen
    17. if(Game.GetInput().IsKeyDown(sf::Key::Right))
    18. {
    19. //Wenn x>3 dann keine Kästchen übrig also Programm für 5sek. einfrieren
    20. if(x+1>=3)
    21. {
    22. x=3; //zurücksetzen
    23. }
    24. //Wenn x<3 dann momentanen Standt auf das nächste Kästchen setzen und nächsten Standt auf true
    25. else
    26. {
    27. Karte[y][x].Besetzt = false; //Alte Markierung auf false, damit es sich nicht doppelt.
    28. Karte[y][x+1].Besetzt = true; //Neue Markierung auf true, damit sie sichtbar und gesetzt wird.
    29. }
    30. }
    31. //Linkstaste -> True auf nächstes Kästchen
    32. if(Game.GetInput().IsKeyDown(sf::Key::Left))
    33. {
    34. //Wenn x<1 dann keine Kästchen übrig also Programm für 5sek. einfrieren
    35. if(x-1<=0)
    36. {
    37. x=1; //zurücksetzen
    38. }
    39. //Wenn x>1 dann momentanen Standt auf das nächste Kästchen setzen und nächsten Standt auf true
    40. else
    41. {
    42. Karte[y][x].Besetzt = false; //Alte Markierung auf false, damit es sich nicht doppelt.
    43. Karte[y][x-1].Besetzt = true; //Neue Markierung auf true, damit sie sichtbar und gesetzt wird.
    44. }
    45. }
    46. if(Game.GetInput().IsKeyDown(sf::Key::Down))
    47. {
    48. //Wenn y>3 dann keine Kästchen übrig also Programm für 5sek. einfrieren
    49. if(y+1>=3)
    50. {
    51. y=3; //zurücksetzen
    52. }
    53. //Wenn x<3 dann momentanen Standt auf das nächste Kästchen setzen und nächsten Standt auf true
    54. else
    55. {
    56. Karte[y][x].Besetzt = false; //Alte Markierung auf false, damit es sich nicht doppelt.
    57. Karte[y+1][x].Besetzt = true; //Neue Markierung auf true, damit sie sichtbar und gesetzt wird.
    58. }
    59. }
    Alles anzeigen


    MfG
    Check
  • Aus deiner beschreibung geht zwar nicht hervor was jetzt das Problem ist, odr was da überhaupt wirklich passieren soll...
    Sieht für mich aber nach nem typischen keydown-anfänger-fehler aus...
    Versuch mal IsKeyHit statt IsKeyDown, das sollte dein Problem wahrscheinlich beheben

    EDIT:

    Ok, das scheints in SFML nicht zu geben bemerk ich grad...
    am besten du baust dir da selber ne klasse, die nen keyhit simuliert!
    Weil KeyDown is ja immer wahr solange man draufbleibt, keyhit ist es nur eine abfrage lang, danach sperrt es sich selbst bist die taste wieder los gelassen wird.
  • Du benutz doch einen event loop in dienem Spiel, verwende auch diesen um deine Tasten abzufragen das ist auch dafür gedacht.
    GetInput ist nur dafür gedacht um, ich nens mal nen "Low-Level" zugriff auf die Eingabegeräte zu bekommen, die du eigentlich nicht brauchst.

    // Edit: Mit GetInput kannst du nur den aktuellen Status der Tastatur abfragen. Und da dien Rechner ziemlcih schnell ist und bei solch einer Abfrage wird dein KeyDown abfrage merhmals durchgeführt inerhalb von wenigen ms.

    Quellcode

    1. while(Game.GetEvent(Event))
    2. {
    3. if(Event.Type == sf::Event::Closed)
    4. Game.Close();
    5. else
    6. if (Event.Type == sf::Event::KeyPressed)
    7. {
    8. switch (Event.KeyEvent)
    9. {
    10. Key::Code::Down:
    11. ...
    12. }
    13. }
    14. }
    Alles anzeigen


    Mfg Rushh0ur