"bounce" funktioniert nur von oben und unten, nicht von der Seite ?

  • GM 8

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

  • "bounce" funktioniert nur von oben und unten, nicht von der Seite ?

    Hallo Experten im Forum
    Habe mal wieder das leidige Thema "bounce" Bin noch ziemlich neu auf dem Gebiet des GM8.
    Kämpfe jetzt schon mittlerweile 2 Wochen mit bounce.
    :motz:
    Alles was im Forum steht durchgesehen, aber nicht so das richtige gefunden. Daher meine Frage.

    Habe ein Problem mit dem Seitlichen "bouncen". :headtouch:
    Wenn mein Ball meine Steine trifft, egal ob er von oben oder von unten kommt, prallt er wieder von diesen ab, und löscht diese.
    Nun zu meinem Problem:
    Wie bekommt man das hin, dass der Ball, auch wenn er von der Seite an den Stein prallt, wieder abprallt. Er fährt einfach in die Steine rein und löscht diese.

    Habe es schon mit move_towards_point(x,y,sp)probiert, was mir aber auch nicht weiter hilft, wie Trunx es unten beschrieben hat.



    //////////////////////Ball-Richtung nach links oben////////////
    if direction = 135
    {
    if collision_point(x-16,y,obj_Stein_Tuerkis,1,1)
    {
    move_towards_point(x+5,x-5,sp5)
    direction = 45;
    }
    }
    //////////////////////Ball-Richtung nach rechts oben////////////
    if direction = 45
    {
    if collision_point(x+16,y,obj_Stein_Tuerkis,1,1)
    {
    move_towards_point(x-5,y-5,sp5)
    direction = 135;
    }
    }
    //////////////////////Ball-Richtung nach links unten////////////
    if direction = 225
    {
    if collision_point(x-16,y,obj_Stein_Tuerkis,1,1)
    {
    move_towards_point(x+5,y+5,sp5)
    direction = 315;
    }
    }
    //////////////////////Ball-Richtung nach rechts unten////////////
    if direction = 315
    {
    if collision_point(x+16,y,obj_Stein_Tuerkis,1,1)
    {
    move_towards_point(x-5,y+5,sp5)
    direction = 225;
    }
    }
    Bin echt bald am verzweifeln. ;(
    für Tipps aller Art würde ich mich sehr freuen.

    Bedanke mich schon mal im Voraus für
    alle Antworten.

    mfg
    ALOC



    Diesen Text habe ich nochmal edit. da er schlecht zu lesen war.

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

  • Hallo McGamemake


    Erst mal Danke für die
    schnelle Antwort. ;)


    Das steht schon bei mir
    drin. :headtouch:


    Das funktioniert aber nicht an der
    Seite, sondern nur wenn der Ball von oben oder von unten gegen prallt.


    mfg


    ALOC
  • Hallo TrunX

    Erstmal danke für deine Antwort

    sorry, habe die GM Hilfe falsch verstanden.Dachte das man das Object in die Richtung versetzen kann. :huh:
    "Bewegt die Instanz mit der Geschwindigkeit (sp) zum Punkt(x,y)."



    Wie könnte man den sonst machen. Vielleicht einen kleinen Tipp.

    Also mit dem "bounce Event" geht es nicht von der Seite. Der Ball läuft in der vertikalen Richtung von alleine. Er wird nur
    mit den Pfeiltasten links und rechts gesteuert.

    mfg

    ALOC
  • Entferne erstmal, die "move_toward_point"s. DIe bewirken nichts anderes, als das sich das Objekt nach oben links auf die ecke zubewegt.
    Dann müsste es eigentlich klappen, wenn du mit direction und speed für die Bewegung arbeitest und diese Variablen nicht noch wo anders gesetzt werden.

    Finde deinen Code aber ziemlich umständlich. So würde ich es machen:

    GML-Quellcode

    1. if place_meeting(x+hspeed,y,obj_Stein_Tuerkis) //Wenn horizontale Kollision
    2. hspeed*=-1 //Horizontale Bewegung umkehren
    3. if place_meeting(x,y+vspeed,obj_Stein_Tuerkis) //Das selbe für die vertikale Kollision
    4. vspeed*=-1

    Sollte exakt das selbe bewirken, wie dein ellenlanger Code.
  • Hallo TrunX

    leider nicht. Jetzt löscht er die oberen und unteren nicht mehr. :headtouch:
    Klinke mich für heute aus.

    edit vom 07.02.2013
    Hallo Leute.

    Habe mich dafür entschlossen mein Project bald nieder zu legen, da ich es einfach nicht gebacken kriege.
    Mir raucht echt der Kopf. :motz:
    Ein Ball der ohne irgend einen Tastendruck, also von Haus aus, mit irgend einen winkel auf den Stein trifft, wird mit der "bounce" Funktion auch abprallen. Nur ich brauche das während eines Tastendruck. Das Problem ist wohl mein Tastendruck.

    Nochmal für alle:
    Wenn ich die linke Pfeiltaste drücke, dann bewegt sich der Ball nach links. Wenn er dann auf das obj_Stein_Tuerkis trifft, soll
    er den Stein löschen und bei gedrückter linken Pfeiltaste nach rechts für ca. 15 Pixel (Einfallswinkel = Ausfallswinkel) abprallen. Da die linke Pfeiltaste noch gedrückt ist soll er sich dann wieder nach links begeben.

    Wie bekommt man das hin. :headtouch:

    Vielleicht hat ja noch jemand einen kleinen Ansatz "Code" für mich.

    Ihr seid meine letzte Hoffnung :)

    mfg
    ALOC

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

  • Hallo Leute

    habe mich heute dazu entschlossen mein Project nieder zu legen, da es mit dem GM nicht umsetzbar ist.
    bedanke mich nochmals an allen Beteiligten die mir geholfen haben. :thumbup:

    PS: Vielleicht kennt ihr ja jemanden der die download Version von Diamond Fever für den Amiga Plus Computer besitzt.
    Die Version war bei der Ausgabe vom 03/99 bei der Amiga Plus Zeitschrift bei. Meine Version hatte einen Bug im Level 95. :motz:
    Deshalb wollte ich Diamond Fever nachproggen aber das funzt leider nicht mit dem GM. :heul:

    bis irgendwann :sauf:

    mfg
    ALOC
  • So schnell würde ich an deiner Stelle nicht das Handtuch werfen. Realistisches Abprallen ist bedeutend weniger kompliziert, als es auf den ersten Blick erscheint. In meinem Spiel löse ich das z.B. mit einer Fallunterscheidung, ob das zurückprallende Objekt an den horizontalen oder an den vertikalen Grenzen des Spielfeldes abprallt. Der Code sieht etwa so aus:

    GML-Quellcode

    1. // Abprallen mit Einfallwinkel=Ausfallwinkel
    2. if (y<=/*Obergrenze*/ || y>=/*Untergrenze*/) direction=tan(arctan(-direction));
    3. if (x<=/*Linker Rand*/ || x>=/*Rechter Rand*/) direction=180-direction;


    Erklärung dazu: Die horizontale Reflexion ist relativ einfach, weil gilt: sin(Einfallwinkel)=sin(Ausfallwinkel). Das lässt sich mit ner einfachen Umrechnung von dir=180-dir lösen.
    Die vertikale Reflexion ist nicht ganz so einfach, bietet aber mehrere Ansätze zur Lösung. Wenn man z.B. diese Reflexion einfach als einen Sonderfall der horizontalen Reflexion betrachten würde (und dementsprechend die direction-Variable umrechnet), wird die Formel zwar etwas länger, dafür aber evtl. verständlicher als das, was ich da gemacht hab.
    Mein Ansatz geht folgendermaßen:
    • Aus dem Matheunterricht kennt man ja noch die allgemeine Geradengleichung: y= m*x + t. Dieses m ist dabei nichts anderes als der Tangens eines bestimmten Winkels - nämlich des Winkels der Geraden zur x-Achse. Wenn man also eine Gerade an der x-Achse spiegeln will (und nichts anderes ist die vertikale Reflexion), muss man einfach nur dieses m mit -1 malnehmen.
    • Der Arcustangens ist die Umkehrfunktion des Tangens. Soll heißen: atan(tan(x)) = x und tan(atan(x)) = x. Diese unangenehmen Definitionslücken im Tangens lassen sich damit auch ganz prima schließen, weil atan(x) sich ihnen nur annähert, sie aber nie erreicht - egal, was man für x einsetzt.
    • Weil atan(x) so hübsch symmetrisch zum Nullpunkt ist, gilt die alte Regel: atan(-x) = -atan(x).
    • Dementsprechend gilt dann auch tan(-atan(x)) = -x bzw. tan(atan(-x)) = -x.
    • Betrachte dieses eben berechnete x jetzt einfach als das m in der allgemeinen Geradengleichung y=mx+t und fertig ist die Laube - vertikale Reflexion hingebastelt.


    Ich hoffe, das ist einigermaßen verständlich... Ich bin alles andere als ein versierter Mathematiker, dementsprechend können dir das in dem Gebiet erfahrenere Leute bestimmt besser erklären. Und vielleicht gibt's für die komplette Reflexionsgeschichte ungeachtet der direction sogar eine allgemeine Formel, auf die ich einfach nur nicht gekommen bin, wer weiß? ^^
    Jedenfalls ist ein solches Problem kein Grund, gleich die Flinte ins Korn zu werfen und dem GM auf immer und ewig abzuschwören. So manches Problem lässt sich viel einfacher lösen, als du vielleicht denkst.
  • Benutzer online 1

    1 Besucher