Bounce hat die Oberhand

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

  • Bounce hat die Oberhand

    Hallo.

    Ich habe ein Problem. Ich habe einen Raum und einen Ball. Der Ball ist wie ein Flummi und knallt gegen jede Mauer. aber man soll den Ball noch etwas lenken können, wie wenn der Ball gegen die linke Mauer fliegt, man nach links drückt, und er wieder gegen die Mauer fliegt. Ich habe alles soweit hinbekommen, außer die Sache mit Bounce. Ich habe das drag&Drop Bounce benutzt, sodass er gegen die Wände knallt, aber wenn man das benutzt, hat man keine Steuerung mehr im Spiel sobald man sich einmal gegen eine Wand abstößt. Er prallt nur noch stumpf ab. Hat jemand eine bessere Möglichkeit als Bounce?

    Wär nett wenn ihr helfen könntet

    HIer ist das Spiel mit dem Problem:

    jumb_ball.zip
    They´ll take you in a land of Mysteries and Magic to defence it from the darkness...
  • beim collision-event gibst du folgenden code dazu:

    GML-Quellcode

    1. speed/=2
    oder sonst ein beliebiger wert

    ich würde zudem empfehlen, im step event x durch hspeed zu ersetzen.
    dazu müsste man aber die maximale horizontale speed definieren:

    GML-Quellcode

    1. if hspeed>10 hspeed=10; if hspeed<-10 hspeed=-10;

    am besten machst du dies aber mit im create event definierten variablen:
    create event:

    GML-Quellcode

    1. h_beschleunigung=1
    2. hspeed_max=10

    step_event:

    GML-Quellcode

    1. if (keyboard_check(vk_left))
    2. hspeed -= h_beschleunigung
    3. if (keyboard_check(vk_right))
    4. hspeed += h_beschleunigung
    5. if hspeed>hspeed_max then hspeed=hspeed_max
    6. else if hspeed<-hspeed_max then hspeed=-hspeed_max

    Damit wirst du später, beim ändern von etwa der maximalen hspeed viel weniger arbeit haben, da du nur eine variable verändern musst.

    somit wird der ball allerdings nicht unendlich lange hüpfen, sondern geschwindigkeit verlieren.

    Mit direction kannst du jedenfalls die Richtung bestimmen. Geht aber nur via GML.

    Mehr weiss ich leider momentan auch nicht.

    get auch mit d&d ;)
    "das war meine letzte flamewar PM an dich ."

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von blubberblub ()

  • hspeed ist nicht besser, aber meiner meinung nach etwas einfacher.
    mit x+=4 erhälst du eine konstante geschwindigkeit(eben nichtmal), das gefühl ist aber besser, wenn der ball langsam beschleunigt und dann erst auf seine maximale speed kommt.

    ohne hspeed müsstest du das so machen:

    x+=acceleration

    acceleration+=1

    übrigens ist zu beachten, dass du meiner erfahrung nach die speed nicht mehr korrekt abfragen kannst, da positionsänderungen etwa über x+=4 nicht von hspeed, vspeed
    und speed beachtet werden(glaub ich zumindest..).
    "das war meine letzte flamewar PM an dich ."
  • blubberblub schrieb:

    übrigens ist zu beachten, dass du meiner erfahrung nach die speed nicht mehr korrekt abfragen kannst, da positionsänderungen etwa über x+=4 nicht von hspeed, vspeed
    und speed beachtet werden(glaub ich zumindest..).
    Das ist richtig. Da du dem Objekt nur neue Koordinaten zuweist, unabhängig von Geschwindigkeit und Richtung.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Ich habe hier etwas geschrieben, das die 'Hilfe-mein-Objekt-steckt-seitlich-in-der-Wand' Probleme loesen sollte:

    [ Collision with block ]

    GML-Quellcode

    1. move_contact_solid(direction,speed);
    2. if (place_meeting(x+hspeed,y,other)) || (place_meeting(x-hspeed,y,other))
    3. hspeed = 0;
    4. if (place_meeting(x,y+vspeed,other)) || (place_meeting(x,y-vspeed,other))
    5. vspeed = 0;


    Sonst bleibt man naemlich gerne in Waenden stecken, da man nicht einfach

    GML-Quellcode

    1. if (place_meeting(x+3,y,other))

    oder so schreiben kann. ;)
  • Wie genau fragt place_meeting eigentlich ab?
    Bei zu grosser Speed hilft das vermutlich nichts mehr.

    GML-Quellcode

    1. for (i=1;i<hspeed;i+=1) {
    2. if (place_meeting(x+i,y,other)) || (place_meeting(x-i,y,other)) {
    3. hspeed = 0;
    4. break;
    5. }
    6. }


    Halt weniger performant.
    Btw was war eigentlich nochmal das Thema? :P
    "das war meine letzte flamewar PM an dich ."
  • Eigentlich bei place_meeting nicht nötig.
    Das Sprite wird an die Stelle gesetzt, die du angibst. Dann wird geprüft ob es eine Kollision gibt. Die Funktion gibt True oder False aus...
    PULSE

    Zweispieler [||||||||||]
    Einspieler [||||||||||]

    [Die Entgrater ist auf Eis gelegt]
  • Benutzer online 1

    1 Besucher