Objekt mit Maus bewegen klappt nicht

  • Allgemein

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

  • Objekt mit Maus bewegen klappt nicht

    Hallo liebe GM Community,

    ich bin noch ganz neu auf dem Gebiet und "probier" mich aktuell mal etwas rum. Derzeit versuch ich grad mal ein kleines Jump&Run zu machen was - für meine wenigen Kentnisse - schon erstaunlich gut läuft.

    Ich habe unter anderm mein Spielerojekt was mit den Pfeiltasten Rects und Links animiert halt nach Rechts oder Links läuft. Funktioniert soweit super.

    Jedoch möchte ich die Steuerung nicht nur über die Pfeiltasten machen sondern über "Bild"-Pfeile, welche auf der GUI angezeigt werden (Bild-Pfeil Links, Bild-Pfeil rechts). Wenn ich also mit der Maus auf das Objekt Pfeil Rechts klicke soll der Spieler genauso rechts laufen als wenn ich die rechte Pfeiltaste auf der Tastatur klicken würde... irgendwie klappt das aber nicht. Die Bewegung meines Spielers ist animiert und wenn ich mit der Maus den "Bild"Pfeil anklicke beginnt er auch die Laufanimation, aber die Bewegung dazu nicht :(

    Ich weiss nicht warum... hier mal der Code vom Spieler Objekt.

    Step Event:

    GML-Quellcode

    1. // Startgeschwindigkeit 0
    2. hspeed = 0
    3. //Bewegung Player Rechts & Links
    4. if keyboard_check(vk_right)
    5. {
    6. hspeed += 4
    7. sprite_index = spr_player_ani_move_right
    8. image_index = x/20 // Animation Geschwindigkeit Player
    9. }
    10. if keyboard_check_released(vk_right)
    11. {
    12. sprite_index = spr_player_ani_idle_right
    13. image_index = 0
    14. image_speed = 0.15
    15. }
    16. if keyboard_check(vk_left)
    17. {
    18. hspeed -= 4
    19. sprite_index = spr_player_ani_move_left
    20. image_index = x/20 // Animation Geschwindigkeit Player
    21. }
    22. if keyboard_check_released(vk_left)
    23. {
    24. sprite_index = spr_player_ani_idle_left
    25. image_index = 0
    26. image_speed = 0.15
    27. }
    Alles anzeigen


    Hier sieht man ja ganz klar drücke ich auf dem Keyboard rechts läuft der Player auch nach rechts mit entsprechender Animation.

    Nun hier der Versuch das ganze auf den Bild Pfeil umzusetzen.

    Event Left pressed:

    GML-Quellcode

    1. with obj_player do
    2. {
    3. hspeed += 4
    4. sprite_index = spr_player_ani_move_right
    5. image_index = x/20
    6. }


    Event Left released:

    GML-Quellcode

    1. with obj_player do
    2. {
    3. hspeed += 0
    4. sprite_index = spr_player_ani_idle_right
    5. image_index = 0
    6. image_speed = 0.15
    7. }


    Klicke ich mit der Maus nun auf den Pfeil macht er die Animation vom Spielerobjekt, aber das hspeed scheint er komplett zu ignorieren.

    Hab ich einen Fehler gemacht? Ich sehe als Neuling im Code eigentlich kein Problem :(

    Vielen Dank und LG

    Mirko
  • Hm ok auf der einen Seite ergibt das Sinn... aber! Müsste dann sich nicht auch die Spielfigur bewegen wenn ich ununterbrochen den Pfeil anklicke? Also zwar immer nur 4 Pixel aber wenn ich halt 50 mal klicke bin ich ja auch schon 200 Pixel weit gekommen....

    Bin grad auf Arbeit und kann's nicht testen, meine aber das schon probiert zu haben mit vielen vielen Klicks, ob da was passiert....

    Edit:
    So zuhause getestet und schon fast vermutet - bringt nichts :(

    Mit Left Button spielt er das Event genau einmal ab - also nur ein Sprite lang und stoppt dann, egal wie lange ich die Maus gedrückt halte. Von Bewegung fehlt auch jede Spur.

    Mit Left Pressed spielt er wenigstens die ganze Spriteanimation durchgehend ab, solange ich die Maus gedrückt halte. Demnach muss das richtig sein. Auch bewegt er sich nicht die 4 Pixel weit.... gerade getestet... kann hundert mal klicken - Objekt rührt sich keinen Millimeter.

    Dasselbe Prinzip habe ich auch für den Jump gemacht - und dort funktioniert es wunderbar, daher kann ich das Fehlverhalten absolut nicht nachvollziehen...

    Hier der Code vom Jumpbefehl der auf einem anderen Pfeil gelegt wurde:

    Event Left pressed:

    GML-Quellcode

    1. with obj_player do
    2. if place_free (x,y+10) == false
    3. {
    4. vspeed -= 9
    5. audio_play_sound(sound_player_jump,1,0)
    6. }


    Im Prinzip also der gleiche Code. Jump geht, Bewegung rechts / links geht nicht.

    Warum????

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von mirko2002 ()

  • Das einzige was mir noch in den sinn kommt, du benutzt event left pressed?

    Versuch das ganze mal im Step event des Spielers zu setzen, wie auch deine Keyboard befehle.

    GML-Quellcode

    1. //Bewegung Player Rechts
    2. if mouse_button_check(mb_left) && place_meeting(mouse.x,mouse.y,obj_PfeilRechts) // oder wie dein Pfeilobjekt heißt
    3. {
    4. hspeed += 4
    5. sprite_index = spr_player_ani_move_right
    6. image_index = x/20 // Animation Geschwindigkeit Player
    7. }


    Nicht getestet.

    Gruß Bartl
    Drei Arten von Männern versagen im Verstehen der Frauen:
    junge Männer, Männer mittleren Alters und alte Männer.

    irisches Sprichwort
  • Probiere mal Folgendes.
    Lösche mal die "with obj_player do" Befehle und schreibe dafür in dein Pfeil-Step-Event:

    SQL-Abfrage

    1. if distance_to_point(mouse_x,mouse_y)=0 && mouse_check_button(mb_left))
    2. {
    3. obj_player.hspeed += 4
    4. obj_player.sprite_index = spr_player_ani_move_right
    5. obj_player.image_index = x/20 // Animation Geschwindigkeit Player
    6. }


    distance_to_point ist vllt nicht der passende Ausdruck. Du kannst duch mal mit place_meeting(), collision_point(), usw rumspielen.

    Gruß
  • Bartlbey schrieb:

    Das einzige was mir noch in den sinn kommt, du benutzt event left pressed?

    Versuch das ganze mal im Step event des Spielers zu setzen, wie auch deine Keyboard befehle.

    GML-Quellcode

    1. //Bewegung Player Rechts
    2. if mouse_button_check(mb_left) && place_meeting(mouse.x,mouse.y,obj_PfeilRechts) // oder wie dein Pfeilobjekt heißt
    3. {
    4. hspeed += 4
    5. sprite_index = spr_player_ani_move_right
    6. image_index = x/20 // Animation Geschwindigkeit Player
    7. }


    Nicht getestet.

    Gruß Bartl


    Ah genau hier kommen wir der Sache näher :) :) :)

    Hab mal aus den Pfeilobjekten alles rausgelöscht und wie vorgeschlagen in das Step-Event des Players gemacht und siehe da.... er läuft :) (auch wenn der Code oben einige Fehler enthielt die ich ausmerzen musste :) )

    Läuft sogar so wie er auch soll... ich bin begeistert ^^

    Hab noch paar Probleme das er erkennt wo welcher Pfeil als Objekt steht... irgendwie überlappt wohl der Jump Pfeil den Rechts Pfeil so, dass wenn ich jumpe er auch gleichzeitig den Rechtspfeil mit anklickt (obowhl ja mit der Maus gar nicht drüber) und er dann nach rechts springt.... aber ich denke das bekomm ich selber irgendwie in den Griff...

    Auf jeden Fall vielen Dank für die Hilfestellung.... jetzt kann ich endlich an anderen Baustellen weitermachen und muss mir darüber nicht den Kopf weiter zerbrechen ;)
  • Korrekt ;)

    Eine Frage hätte ich gerade noch - gehört zwar nicht mehr direkt zum eigentlichen Problem (das wurde ja mit den letzten Post "behoben") aber nur deswegen einen neuen Beitrag eröffnen... ich weiss nicht ;)

    Die Pfeile die ich nun anklicke damit der Spieler sich bewegt werden über ein Draw Event gezeichnet und bewegen sich mit dem Raum mit, wenn der Spieler zum Beispiel rechts oder links den Rand des Raumes errreicht hat. Wie man es halt von jedem üblichen Jump&Run kennt.

    Die Klicks auf diese Objekte realisiere ich ja nun wie oben geklärt über das Step-Event vom Player.

    GML-Quellcode

    1. if mouse_check_button(1) && place_meeting(mouse_x,mouse_y,obj_arrow_right)


    Die Bewegung der Objekte erfolgt ebenso korrekt... laufe ich also rechts "aus dem Raum raus" bleiben die Bewegungspfeile sichtbar - müssen sie ja auch sonst könnte man sie ja nicht mehr verwenden sobald der Raum sich einmal bewegt hat und sie ausser Sicht kommen / sich aus dem Raum schieben. Aber die möglichen "Klicks" bleiben nicht auf den Objekten. Ist grad schwer zu erklären.

    Also - ich starte den Raum wo die Pfeile ja schon an ihren festen Positionen stehen. Hier kann ich nun die Pfeile klicken wie ich mag und der Spieler agiert entsprechend. Laufe ich nun nach rechts den Raum entlang und dieser schiebt sich dann nach links dann kommen die Pfeile zwar mit - aber die Stelle auf die ich klicken kann damit der Pfeil reagiert bleibt an der alten Originalposition - sprich diese "klickbare" Fläche bewegt sich nicht wie der Pfeil selber mit dem Raum mit und werden somit komplett sinnlos. Ich hab dann also, sobald der Raum verschoben ist Pfeile die nicht mehr anklickbar sind (nicht reagieren) dafür aber Stellen wo vorher mal die Pfeile waren und dort der Klick nun reagiert wenn ich dort auf gut Glück rumklicke.

    Mit der kleinen Codezeilen oben dachte ich diese klickbare Fläche wäre direkt an das Objekt gekoppelt - wozu gebe ich schliesslich den Objektnamen mit an?

    Hat hier nochmal jemand Rat?

    Ich hab noch ein paar weitere Fragen... aber ich will erstmal ein Thema nach und nach abklären bevor ich mich weiteren Dingen widme die ich erst noch lernen/verstehen muss :)

    Gruss
    Mirko
  • Hallo Mirko,

    schön dass ich helfen konnte.

    Ich wüsste 2 Ansätze wie du dieses Problem lösen kannst.

    1. Du kannst anstelle des Pfeiles einfach abfragen ob sich die Maus rechts vom Spieler befindet und dann nach rechtslaufen

    GML-Quellcode

    1. if mouse_x > player.x && mouse_button_check(mb_left)

    Hat nur den Nachteil, dass die Pfeile sinnfrei wären :P

    2. Die Position der Pfeile wird nur im Draw event angepasst (ich vermute du benutzt Draw GUI), jedoch nicht die Position der Pfeile. Dies müsstest du dann im Step event vornehmen. (Codeausschnitt wäre hier hilfreich)

    Step Event rechter Pfeil

    GML-Quellcode

    1. x = player.x + 20 //Für den rechten Pfeil

    Somit befindet sich der rechte Pfeil immer 20 pixel vor dem Spieler.

    Gruß Bartl
    Drei Arten von Männern versagen im Verstehen der Frauen:
    junge Männer, Männer mittleren Alters und alte Männer.

    irisches Sprichwort
  • Hm Bartlbey danke für die weitere Hilfe...

    ich habs jetzt mit virtual_key gelöst.... dieser liegt letzendlich über dem Pfeil-Objekt und bewegt sich nicht mit dem Raum mit da er eine feste GUI-Position hat.
    Da muss ich mich nicht mit den View-Einstellungen rumschlagen und macht ebenfalls genau das was es soll ;)

    Vielen Dank nochmal :)

    Ich habe noch ein weiteres Anliegen aber das eröffne ich heut Abend in einem weiteren Thread, dass hat nichts mehr mit dem jetzigen Problem zu tun :)