Kreuzung Game

  • GM 8

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

  • Kreuzung Game

    Hallo,

    ich bin neu hier und habe noch absolut keine Erfahrung im Programmieren oder mit Game Maker.

    Ich habe meine Spielidee schon mal in der Rubrik Spieldesign vorgestellt.

    Ich habe jetzt einmal angefangen zu programmieren. Es ist mir auch vollkommen klar, dass das hier im Vergleich zu den anderen Spielen ziemlich lächerlich wirkt, aber ich hoffe, dass mir der ein oder andere bei ein paar Problemen helfen kann!
    Das ist mein allererstes Projekt überhaupt!

    Ein paar Tutorials hab ich schon durchgemacht, aber dennoch habe ich niergends eine Antwort zu meinen Fragen gefunden.

    Kann mir eventuell jemand sagen, wie ich meinem Auto einen Wenderadius verpassen kann. Weil es wirkt doch ziemlich komisch, dass es sich nur auf der Stelle dreht!

    Achja: Ziel ist es zum Pfeil zu kommen, das gibt dann +100 Punkte und man beginnt wieder am Startpunkt!
    Crash mit anderen Autos gibt -100 Punkte und Respawn beim Sartpunkt.
    Crash mit Wand gibt keinen Abzug, aber auch wieder zurück zum Start.

    Noch eine Frage habe ich: wie kann ich machen, dass mein Auto wieder in der Position, die es ganz am Anfang hat, respawnet? Weil es "schaut" nach einem Respawn immer in die Richtung, die es beim Crash hat.

    Vielen Dank schonmal im Vorraus,

    Hier ist übrigens der Link: yoyogames.com/games/135202-kreuzung-game

    Ein Screenshot im Anhang

    GR3NouILL3

    P.S. Falls ich in der falschen Rubrik sein sollte, bitte einfach sagen, oder vllt gleich verschieben?
    Bilder
    • Screenshot01.JPG

      60,79 kB, 646×512, 215 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von GR3NouILL3 ()

  • hi
    gleich mal zu deinen fragen.
    wendekreis:
    du kannst beim lenken die bedingung stellen, dass der speed nicht 0 sein darf, oder einen gewissen wert überschreiten muss..
    also
    if speed > wert
    {
    kurve fahren
    }

    beim respawn musst du zusätzlich noch die direction wieder auf den startwert setzen.

    ich hoffe das löst deine probleme und wünsche dir viel spaß beim programmieren :)
  • P.S. Falls ich in der falschen Rubrik sein sollte, bitte einfach sagen, oder vllt gleich verschieben?


    ja, das thema ist in der falschen rubrik, es kommt zu die technischen fragen.

    Noch eine Frage habe ich: wie kann ich machen, dass mein Auto wieder in der Position, die es ganz am Anfang hat, respawnet? Weil es "schaut" nach einem Respawn immer in die Richtung, die es beim Crash hat.


    mach beim auto im room start event:

    GML-Quellcode

    1. startdir=direction;
    2. startx=x;
    3. starty=y;


    und beim respawnen:

    GML-Quellcode

    1. direction=startdir;
    2. image_angle=direction;
    3. x=startx;
    4. y=starty;


    hoffe habs richtig verstanden. ^^
  • Burhan82 schrieb:

    mach beim auto im room start event:

    GML-Quellcode

    1. startdir=direction;
    2. startx=x;
    3. starty=y;


    und beim respawnen:

    GML-Quellcode

    1. direction=startdir;
    2. image_angle=direction;
    3. x=startx;
    4. y=starty;


    hoffe habs richtig verstanden. ^^
    Hey danke,
    das hat super geklappt!

    Jetzt muss ich nur noch die Kommandos verstehen :P


    "du kannst beim lenken die bedingung stellen, dass der speed nicht 0 sein darf, oder einen gewissen wert überschreiten muss..
    also
    if speed > wert
    {
    kurve fahren
    }"


    Das klappt ja auch hervorragen! Vielen, vielen Dank. Sieht zwar grad bisschen kagge aus, weil es immer so abrupt alles ist, aber es hat mich schon ein ganzes Stückchen weiter gebracht. Zum Glück hatte ich mir das eine Tut durchgelesen, wo das mit dem If und so erklärt ist.
    Und so ein bisschen nachvollziehen kann ich das, ich ein bisschen mit den Variablen spiele, ist das ganze auch verständlich!

    Ich danke euch vielmals.

    Echt super Community hier!

    GR3NouILL3

    P.S. Ich hoffe ihr könnt den Thread noch geöffnet lassen, dass ich hier auch meine nächsten Fragen posten kann.

    Achja:

    Burhand:
    Warum 2 extra Variablen Definieren?
    Mann kann auch die:


    GML
    1
    2

    xstart
    ystart


    benutzten.


    Was meinst du denn damit?
  • xstart und xystart sind vorgefertigte variabeln die an jedem objekt die x und y koordinaten des objektes am anfang festlegt und sie hier speichert. die kannst du jederzeit abrufen, hat aber die gleiche aufgabe wie meine variante. ^^

    @Tice:
    Ja hast recht, naja aber erfüllt halt die gleiche aufgabe. :rolleyes:
  • ystart und xstart sind eingebaute Variablen, die die Position des jeweiligen Objektes am Anfang speichern. Die kann man jederzeit abrufen.

    Zu der Lenkung: ich hab mich mal theoretisch ein bisschen mit der Ackermannlenkung beschäftigt und hab folgende Formeln gefunden:
    Im create event definierst du einfach

    GML-Quellcode

    1. steer=0 //Lenkeinschlag
    2. angle=1 //max.Lenkeinschlag im Bogenmaß; sollte zwischen 0.3 und 1.5 liegen
    3. g=0.5 // gewichtsverteilung vorder/hinterachse

    und im step event

    GML-Quellcode

    1. steer=max(-1,min(1,steer+0.1*(keyboard_check(vk_right)-keyboard_check(vk_left))-0.05*sign(steer)))
    2. direction-=speed*sin(angle*steer)/(1.5*sqrt(1+sin(angle*steer)*sin(angle*steer)*(g*g-2*g)))


    dann hast du eine dosierbare Lenkung, die "wie in echt" lenkt. Allerdings hat das Auto so immer "ultragrip",d.h. es kan so schnell fahren wie es will und es wird in der Kurve niemals unter-oder übersteuern, sondern immer die Spur halten.der Faktor 1.5 bei steer ist übrigens eigentlich eine variable, nämlich der Abstand zwischen vorder-und Hinerachse, also kannst du den auch gern ändern

    P.S. Wenn du noch einen HUD-controller einbaust,kannst du noch ein Lenkrad mit dem aktuellen Lenkeinschlag anzeigen lassen,
    wenn du im draw event dieses controllers noch

    GML-Quellcode

    1. draw_sprite_ext(wheel,0,view_xview+50,view_yview+50,1,1,-car.steer*180,c_white,0.9)

    einfügst( Die Namen "Wheel" und "car" müssen dann entsprechend ersetzt werden)
    und den sprite im Anhang einbaust.
    Dateien
    • Lenkrad.zip

      (13,53 kB, 150 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von J-L ()

  • Hallo,

    erstmal wieder danke für eure Antworten.

    @Burhan82:

    einfach im Creation Event ein "Execute Code" rüberziehen und dan dann

    xstart
    ystart

    reinschreiben? Weil da kommt dann bei mir ein Fehler. Oder muss ich dann noch wo anders was ändern?

    Ich hatte ja wie gesagt im Create Event das da reingeschrieben in den Code:

    image_angle=0

    startdir=direction;
    startx=x;
    starty=y;

    Außerdem hab ich da noch "set the friction to 0,5"

    Bei Pfeiltaste nach oben steht: motion_set(image_angle,-5)
    und bei den Richtungen habe ich wie burhan82 es gesagt hat:

    if speed < -3
    {
    image_angle-=4
    }

    if speed > 2
    {
    image_angle+=4
    }


    Jetzt hast du, J-L mir diese neuen Sachen gesagt.

    Ich habe jetzt im Creation event alles rausgelöscht und das da reingeschrieben:

    steer=0
    angle=1
    g=0.5

    dann ein Step event erstellt und das da reingeschrieben:

    steer=max(-1,min(1,steer+0.1*(keyboard_check(vk_right)-keyboard_check(vk_left))-0.05*sign(steer)))
    direction-=speed*sin(angle*steer)/(1.5*sqrt(1+sin(angle*steer)*sin(angle*steer)*(g*g-2*g)))

    Wenn ich jetzt das Spiel starte, verhält sich das Auto genauso wie davor!
    Wenn ich die Up, Down, Right und Left Events lösche, macht mein Auto gar nichts mehr...

    Was mache ich falsch?

    Ich hoffe ihr könnt mir helfen,

    mfg,
    GR3NouILL3
  • also zu dem xstart/ystart: du musst natürlich hinschreiben, was der computer mit den beiden Variablen machen soll, also entsprchend ,wenn das auto den Zielpfeil berührt

    GML-Quellcode

    1. x=xstart y=ystart

    zu meiner Lenkung: du musst natürlcih das left und das right event löschen, allerdings hab ich dem auto ja kein Gas eingebaut. Wenndu also das up und das down event auch noch löschst musst du noch zum Beispiel

    GML-Quellcode

    1. motion_add(direction,2*(keyboard_check(vk_up)-keyboard_check(vk_down)))
    2. friction= speed*speed/200

    im step event dazufügen
  • Hey, das ist ja klasse.....daaaanke!

    Nächste Frage:

    Mein Auto fährt zwar Kurven, wenn ich deine Tips anwende, allerdings dreht sich mein Sprite nicht mit.
    Ich habe dann bei Add Event, Keyboard Left, bei dem Code geschrieben:

    if speed < -3
    {
    image_angle+=4
    }

    if speed > 2
    {
    image_angle-=4
    }

    Jetzt dreht sich mein Sprite, aber nicht in der gleichen Geschwindigkeit wie es die Kurve fährt. Woran könnte das liegen?

    MfG,
    GR3NouILL3
  • SO,

    dank der tollen Hilfe von euch, habe ich jetzt mal eine kleine Steuerung geschrieben.

    ihr findet das Beispiel im Download Link im ersten Post. Was haltet ihr davon?

    Ich habe diese jetzt nur mit if und else Bedingungen geschrieben.

    J-Ls Skript habe ich nicht verwenden können, da, selbst wenn ich es wie Tice sagt, umänder, sich das Auto irgendwie ganz komisch dreht.

    FIndet ihr die Steuerung noch zu blöd?

    MfG,
    GR3NouILL3
  • Hey danke,

    hab jetzt das mal ausprobiert und auch ein bisschen verstanden.

    Es ist halt echt sau schwer, von 0 anzufangen!

    Aber ist echt cool von euch, dass ihr mir helft!

    Ich melde mich dann wieder, falls ich wieder ein Problem haben sollte.

    Bis dann,
    GR3NouILL3

    //Edit:

    nach langem reinarbeiten sieht das Spiel nun so aus (Link wieder im ersten Beitrag)

    Was haltet ihr von den Auto-Sprites?
    Was haltet ihr von der Steuerung?
    Könnt ihr mir sagen, warum das Bild am unteren und rechten Bildrand so verzogen ist?

    Noch eine Frage:

    Wie würdet ihr das machen, dass das Auto beim Richtungswechsel kurz stehen bleibt. Also ich meine, wenn ich am vorwärtsfahren bin und dann Pfeiltaste down drücke, dann wird mein Auto ja langsamer, und sobald es Geschwindigkeit 0 erreicht hat, fährt es sofort in die andere Richtung. Das möchte ich unterbinden, und das Auto kurz für ein paar Millisekunden freezen. Weil jetzt ist es ziemlich schwer das Auto komplett zum Stillstand zu bekommen, da es immer sofort in die andere Richtung fährt nach Stillstand.
    Ich hoffe ihr versteht das Problem!

    MfG,
    GR3NouILL3

    Gibt es eigentlich ein Auto Tutorial? und ist es möglich, das Auto ab einer gewissen Geschwindigkeit "schliddern" zu lassen?
  • Also:
    1. Für den 1. Versuch ist die Steuerung von dem Auto echt nicht schlecht. Ist zwar n bissl langsam, aber warscheinlich so gewollt.
    2. Die Sprites sind nicht schlecht, haben aber wg der auflösung nen starken aliasingeffect, wenn du die drehst. Probier mal aus, bei den Autsprites ins Editiermenü zu gehen und dann "Smooth edges" anzuklicken. das sieht dann meist besser aus (finde ich zumindest)
    3. Das verzogene Bild hat zwei Gründe:
    1. Der Background ist kleiner als der Room. Dadurch ist rechts und unten jeweils ein Teil des Backgrounds nochmals zu sehen
    2. Die Straßen auf dem Background sind nicht genau waagrecht/senkrecht. Sie haben jeweils links/rechts und oberhalb/unterhalb der Kreuzung eine leicht andere position.

    Zu der Frage mit dem "Rückwärtsgang": ich würde vorschlagen ( ich weiß leider dein Steuerungscode nicht),dass du eine weiter Variable einbaust , die beim Vorwärtsfahren 0 ist(z.B. "back"). Du kannst nur rückwärtsfahren, wenn diese Varable 1 ist (d.h.bremsen kannst du immer, du must nur im keyboard_down event noch einfügen, dass nur dann "weiterbremsen" (also rückwärtsfahren) kannst, wenn "back" = 1 ).
    jetzt schreibst du noch im step event

    GML-Quellcode

    1. if(speed=0 && keyboard_check(vk_down)=0) back=1;

    und im keyboard_up event, dass "back" 0 wird, wenn das auto sich wieder vorwärts bewegt.

    Ergebnis: du musst vorm rückwärtsfahren erneut unten drücken.Wenn der wagen steht, bewegt er sich rückwärts.

    Zum "Sliden": Kommt drauf an, obs einfach nur so oder wirklich realistisch sein soll.
  • Hey,
    erstmal danke für deine Antwort.

    Das mit dem verzerrten Bild hat einwandfrei geklappt!

    Ich habe das mit dem Rückwärtsgang jetzt auch soweit ich konnte umgesetzt. Schau dir das mal an, das habe ich im Step Event. (Ich habe keine Up, Down, Left, Right Events!)

    GML-Quellcode

    1. var back;
    2. back = 0;
    3. if (keyboard_check(vk_up) && speed > -6) {speed-=0.8}
    4. if speed < 0 back = 0
    5. if (speed=0 && keyboard_check(vk_down)=0) {back=1};
    6. if (keyboard_check(vk_down) && speed < 0) {speed+=0.8}
    7. if (keyboard_check(vk_down) && speed < 4 && speed >=0 && back=1) {speed+=0.8}


    Ich kann damit vorwärts fahren und auch bremsen. Aber rückwärts fahren kann ich nicht.

    Meiner Meinung nach habe ich zunächst in Zeile 1 und 2 die Variable definiert.

    Danach habe ich in Zeile 4 gesetzt, dass ich beschleunige, sobald ich die Up-Taste drücke und zwar solange bis ich Speed=-6 erreicht habe. (Bei mir ist Vorwärts - und rückwärts +^^)

    In Zeile 6 kommt der Befehl, dass, wenn ich im Minusbereich bin (also am Vorwärtsfahren), meine Variable 0 wird.

    Zeile 8: Wenn Speed=0 und runter, setze ich meine Variable back=1!

    In der vorletzten Zeile steht noch, dass ich bremse, wenn ich am vorwärtsfahren bin

    In der letzten Zeile müsste dann stehen, dass ich, wenn ich runter drücke und meine Geschwindigkeit zwischen 0 und 4 liegt und die Variable back=1 ist, beschleunigen müsste. Die Variable müsste ja 1 sein, da ich sie in der 8. Zeile auf 0 gesetzt habe!
    Allerdings kann ich irgendwie hier nicht rückwärts fahren.
    Habe ich vielleicht irgendwie meine Variable doch nicht auf 1 gesetzt?

    Ich hoffe mir kann jemand helfen!


    Achja und wegen dem sliden: ich weiß nicht wie schwer es ist, es realistisch aussehen zu lassen? Es sollte so sein, dass ich es verstehe...

    MfG,
    GR3NouILL3
  • Das Problem bei deinem Code ist, dass back bei jedem step erneut auf null gesetzt wird, sodass du NIEMALS "unten" drückst und back 1 ist, den sobald du unten drückst, wird back nicht mehr auf 1 gesetzt und bleibt Null.Folglich kannst du nicht rückwärts fahren. Schreib also in CREATE EVENT back=0 und dann probiers mal mit folgendem Code:

    GML-Quellcode

    1. if (keyboard_check(vk_up) && speed > -6) speed-=0.8;
    2. if (keyboard_check(vk_down) && speed < 4 )
    3. {speed+=0.8 if(speed>0 && back=0) speed=0; }
    4. if (speed=0 && keyboard_check(vk_down)=0) {back=1};
    5. if (speed <0) back=0;
  • Hey,

    ja klar, dein Tip hat mir echt sau gut geholfen! Danke nochmal.

    Ich wollte erst wieder hier was reinschreiben, sobald ich wieder eine neue Frage habe, um so Doppelposts zu vermeiden:-P

    Ich habe im Moment nur sehr wenig Zeit, da ich auf meine nächste Klausur lernen muss. Daher kann ich nur noch selten dran rumwerkeln!


    Ich melde mich dann wieder, falls ich neue Probleme bekommen sollte!

    Und nochmal Danke für deine Antworten!
  • Sooo,

    wieder stellt sich mir ein neues Problem und ich habe auch dazu noch nichts im Forum gefunden.

    Ersteinmal: Ich möchte, dass wenn mein Auto gegen eine Wand fährt, es an dieser Stelle eine Delle bekommt.

    Ich habe das bis jetzt so gelöst:

    Ich habe in den Code bei Collision Event mit der Wand das hier geschrieben:

    GML-Quellcode

    1. sprite_index = spr_crash
    2. speed*=-0.85


    Das heißt also, dass wenn mein Auto gegen die Wand fährt, sich das Sprite in ein anderes Sprite, dem ich eine Delle verpasst habe, verwandelt, und dann nach hinten zurück abprallt!

    Das klappt wunderbar.
    Nur: Ich will jetzt verschiedene Schadensfälle haben:
    Vorne rechts/links, Hinten rechts/links.
    Gibt es die Möglichkeit, meinem Programm zu sagen, dass mein Autosprite sich in ein bestimmtes anderes Sprite verwandelt, je nachdem wo ich gegen die Wand fahre. Wenn ich also mit der rechten vorderen Seite dagegen fahre, möchte ich auch rechts vorne meinen Schaden haben!

    Außerdem: habt ihr noch eine Idee, wie man das mit dem Wandabprallen besser realisieren kann? Dass das Auto also quasi nicht abprallt, sondern an der Wand entlang "schrammt"

    Noch eine Frage hätte ich:
    Wenn sich 2 Computergesteuerte Fahrzeuge meiner Kreuzung nähern, eins von unten, eins von rechts. Kann ich dann irgendwie eine ganz simple KI einbauen, die dem von links kommenden Fahrzeug sagt, dass es zu warten hat, bis das andere durchgefahren ist?

    Vielen Dank schonmal,
    GR3NouILL3
  • Benutzer online 1

    1 Besucher