Objekte anhand ihrer Bewgungsrichtung unterschiedlich ablenken

  • GM 8

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

  • Objekte anhand ihrer Bewgungsrichtung unterschiedlich ablenken

    Hallo Community,

    Ich habe mir vor einer ganzen Weile schon den Game Maker 8.0 heruntergeladen, um eine Spielidee zu verwirklichen, es allerdings aufgegeben, da ich damals nicht gerade der schnellste im Lernen war.

    Jetzt, rund ein Jahr später, hab ich mich vor ein paar Tagen wieder an den Game Maker gesetzt mit dem Ziel, diesmal wirklich etwas zu vollbringen, allerdings stellt sich mir ein Problem in den Weg.


    Das Spiel an dem ich arbeite beruht darauf, dass sich zwei Partien mittels einer Laserstation in einem rundenbasierendem Kampf gegenseitig bekämpfen, indem sie Spiegel im Raum platzieren, an denen ihre Laser in einem 90° Winkel abgelenkt werden.

    Hier ein Screenshot:

    Man sieht, das die Laser-Punkte, die von der unteren Station gefeuert werden, nach rechts abgeleitet werden und dort ist mein Hund begraben, denn die Punkte werden nichtnur von unten nach rechts abgeleitet, sondern immer.


    Mein Einziges Problem ist eigentlich, dass ich nicht weiß, wie ich die Richtungs-variable des Laser-Objekts bei Kollision mit dem Spiegel durch einen Code verändere. (Dass Wert 0 (Bewegung nach rechts) in Wert 270 (Bewegung nach oben) umgewandelt, und Wert 270 in Wert 0 umgewandelt wird usw.)


    Ich habe bereits nach einem Tutorial gesucht, das erklärt, wie man eine Variable erstellt, aber nichts gefunden, dass mir weiterhelfen könnte.

    Ich hoffe mal sehr, dass mir jemand helfen kann :)

    PS: Hallo allerseits, ich bin neu im Forum :D
    Im Internet weiß niemand, dass du ein Truthahn bist.
  • Hi,

    ...dann hast du etwas falsch gemacht...
    im hausgemachten example geht es wunderbar - beispiel heisst "hit the ball", wenn du es nicht findest im prog-ordner unter examples, hab ich es mal angehängt...

    viel erfolg,OC
    Dateien
    • hit the ball.gm6

      (26,57 kB, 130 mal heruntergeladen, zuletzt: )
    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
    (Albert Einstein)
  • Oder du erstellst zwei Laser spiegel einer / und den anderen \

    Wenn das Laserstrahlobject mit / kollidiert, fragt es die Richtung ab und stellt je nach richtung die neue ein.

    GML-Quellcode

    1. if place_meeting(x,y,obj_spiegel)
    2. {
    3. if direction = 90
    4. exit
    5. {
    6. direction = 0
    7. }
    8. if direction = 270
    9. {
    10. direction = 180
    11. exit
    12. }
    13. //und umgekehrt
    14. }
    15. //und für das andere Spiegel objekt
    Alles anzeigen

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Zu Larsi und OraCom :

    Ich glaube, ich hab mich mit "180° Drehung" etwas blöd ausgedrückt. Ich habe damit gemeint, das der Laserpunkt einfach nur zurückgeworfen wird (so wie der Ball in OraCom's gm6 Datei), statt aber wie gewünscht in einem 90° Winkel abzuprallen (siehe Abbildung im Startpost)


    Zu Aku Ryou:

    Ich habe jetzt versucht, den Code per "Collision Event with object laser > Execute a pice of code" auszuführen, allerdings wird nur der Codeabschnitt für "if direction = 90 exit {direction=0} ausgeführt.

    Hier ist der genaue Code(angehängt an mirrorleft), mit dem was ich daran geändert habe:

    GML-Quellcode

    1. if place_meeting(x,y,mirrorleft)
    2. if direction = 90
    3. exit
    4. {
    5. direction = 0
    6. }
    7. if direction = 270
    8. exit
    9. {
    10. direction = 180
    11. }
    12. if direction = 0
    13. exit
    14. {
    15. direction = 90
    16. }
    17. if direction = 180
    18. exit
    19. {
    20. direction = 270
    21. }
    Alles anzeigen


    Mirrorleft entspricht dabei /.

    Das Problem, dass nur der erste Teil gewertet wird ist schonmal bei einem anderen Codefragment mit dem ich experimentiert habe aufgetreten. Es könnte aber auch sein, dass der Code einfach nur einmal ausgeführt wird, und dann nichtmehr...

    Edit: Bei uns im Haus herrscht eine 22 Uhr- Internetstöpselzieh Regelung, deshalb werde ich erst morgen wieder vorbeischauen könnten. Gute nacht :sleeping:
    Im Internet weiß niemand, dass du ein Truthahn bist.

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

  • also die ganzen exits sind da föllig fehl am platz damit beendest du jedesmal den code wieder

    die müssen wenn dann in die klammer unter das direktion, oder arbeite besser mit else if da brauchst du das blöde exit gar nicht mehr

    GML-Quellcode

    1. if place_meeting(x,y,mirrorleft)
    2. if direction = 90
    3. {
    4. direction = 0
    5. }
    6. else if direction = 270
    7. {
    8. direction = 180
    9. }
    10. else if direction = 0
    11. {
    12. direction = 90
    13. }
    14. else if direction = 180
    15. {
    16. direction = 270
    17. }
    18. exit //obwohl du dir das bestimmt auch schenken kannst
    Alles anzeigen
    Mein aktuelles Projekt: Twiggels Tower Defence :para: :shifty:
    Mittlerweile: Green and Grey
  • Jop sorry, das mitexit war ein Fehler, eigtl wollte ich nach jeder if abfrage ein exit setzen, aber das hätte nicht hingehauen...

    GML-Quellcode

    1. if bla = 1
    2. {
    3. do this
    4. exit
    5. }
    6. //damit der strahl zeit hat um vom Mirror davonzukommen ohne das seine direction noch weiter verändert wird.


    Das WICHTIGE sind die Directionwechsel. Kmmt der strahl von unten kann er nur nach rechts abprallen und wenn er von oben kommt nur nach links, kommt er von Links dann nur nach oben, und von rechts nur nach unten. Für das andere Objekt dementsprechend auch. Das sind einfach ein paar ifs.

    Also so sollts gehen.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • So, habs jetzt endlich mithilfe des Codes hinbekommen :D

    Muss dazu sagen, dass der Code (aus irgendwelchen Gründen) beim Spiegel nicht funktioniert hat, sondern nur beim Laserobjekt. Möglicherweise hab ich da was falsch gemacht, aber es funktioniert und das ist ja das wichtigste. :D


    Hier mit dem genauen Code und der Ingameansicht(Die Spielansicht und das im Hintergrund sind übrigens zwei seprate Dateien, also nicht wundern wieso es unten funktioniert, obwohl oben der "Collision Event with object mirror right" fehlt)



    Ich war nochnie so glücklich, einen kleinen Punkt über den Bildschirm wandern zu sehen.

    Danke, Leute :D
    Im Internet weiß niemand, dass du ein Truthahn bist.