LKW ertrinkt auf Straße

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

  • LKW ertrinkt auf Straße

    Halli Hallo,

    ich baue gerade eines meiner ersten Spiele, ein Racing game. Weil ich echt noch einiges an Hilfe brauche, nutze ich dafür ein Tutorial .. Wenn es weiterhilft, poste ich das gerne. Das lasse ich jetzt aber, weil das vielleicht nicht gewünscht ist?

    Ich habe gerade 2 große Probleme.

    Problem 1: Aus irgendeinem Grunde verfolge ich zwar mit der Kamera mein Rennfahrzeiug im Spieletestmodus. Aber es schmiert von der Startposition ohne mein Zutun langsam nach unten ab und ist dann aus dem Bild raus. Welchen Anfängerfehler habe ich da gemacht? Kann einer helfen? :)

    Problem 2 Ich will gerade so rumcoden, dass mein Rennfahrzeug mit den Keyboardtasten steuerbar ist. Im Tutorial wurde das für die Links-bewegung für Keyboard UND Gamepad erklärt. Nachher geht es leider nur für Gamepad weiter. (im Video so bei Min 17.)
    Rechts hab ich selbst noch gerade so mit ausprobieren hinbekommen.Das heißt: Obwohl der Truck langsam nach unten abschmiert, kann ich ihn dabei immerhin drehen ;)

    Aber wie programmiere ich nun Gas oder Bremse/Rückwärtsgang. Hat einer eine Idee? Vielleicht ist es auch leichter, es nicht zu coden, sondern überdie Keyboard events?

    Wenn einer so nett wäre zu helfen, habe ich hiermal den Code für links und rechts. Hilft das?


    ///player Input

    // left turn
    if(keyboard_check(vk_left) ){
    phy_rotation += -1 - 2.7 * (keyboard_check(vk_left))
    }

    // right turn
    if(keyboard_check(vk_right) ){
    phy_rotation += (2.7 * (keyboard_check(vk_right)))
    }
    //Gas

    EDIT: Offenbar hab ich mit irgendeiner Änderung im Code bewirkt, dass ich doch nicht mehr rechts drehen kann. GRRR

    Danke im Voraus :)
    Martin

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

  • Hi Wilkommen im Forum,
    Das Video wäre auf jeden Fall nicht unerwünscht :)

    Du benutzt Physics? Hast du evtl. im Room die Gravitation an bzw. ich weis grad nicht wie das heißt, aber sowas ähnliches gibt es in den Room Einstellungen. Das würde zumindest das runter tuckern erklären ;)
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Haha, das klingt im Nachhinein so easy ;)
    Erstmal Danke für das warme Willkommen. Damit hast Du ein großes Problem direkt gelöst. Ich Horst :)

    Und für das andere: vielleicht hilft das Video. So zwischen Minute 14 und 17 erklärt er den Code und am Ende löscht er die Zeile für Keyboard. Ich habe nicht alle Funktionen des Codes verstanden, aber durch Hin- und HEr probieren hatte ich es zumindest soweit, dass er sich nach links und rechts dreht. Aber scheinbar hab ich nicht gespeicher. auf jeden Fall tuckert der blöde Truck jetzt nur links im Kreis. Damit gewinnt er sicher nen Burnout-Contest aber nicht mein Rennen :P

  • Ich bin grad mit Handy online und kann grad die Funktion für Physik nachschauen.
    Ich glaub das war physic_apply_force. Damit kann man ein Speed auswählen. Ich hab noch nicht so viel mit Physics gemacht und weiß nicht ob es auch mit der Variable phy_phyic geht...
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Mit physics ist es so: Alles was du zuerst als definitve + und - werte im koordinatensystem angegeben hast dient jetzt nur mehr als ein Richtungsvektor und dem weißt du eine Kraft zu. Also wenn sich dein Truck nur nach Links dreht dann multiplizierst du entweder den Input falsch(gamepad) oder du hast einfach nur ein vorzeichen falsch. Zum Bewegen kannst du jetzt entweder seine Methode nehmen, dass sich die Autos alle mit einem Vector der durch die lengthdir funktionen bestimmt werden fortbewegt (physics_apply_force) oder du verwendest physics_apply_local_force und brauchst nicht vorher einen vektor zu berechnen, sondern kannst gleich sagen, entlang der x achse des objects übe soundsoviel force aus.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Gibts noch Fragen, wie du die Funktionen anwendest, oder wie du die Abfrage mit der Pfeiltaste nach oben machst?
    Ist das Problem schon gelöst, dass du nicht mehr nach rechts drehen kannst?
    Sagst plötzlich nichts mehr ;)
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Ja, sorry :) ich war für ein Arbeitsprojekt unterwegs. Das Spiel ist eine Art Hausaufgabe im nebenberuflichen Studium und ich versage gerade kläglich. Ich hab versucht, mich in Eure Hinweise reinzufuchsen. Scheinbar fehlt mir aber noch etwas das Grundverständnis. Ich hab mir jetzt besteimmte Tutorials gekauft, die mir die Semesterferien versüßen, allerdings ist dafür die Zeit nun leider zu knapp.

    Akus Tipps sind vermutlich sehr genau und hilfreich, aber selbst das habe ich nicht gepackt.

    Das Rechtsdrehproblem habe ich nicht in den Griff bekommen. Da ich auch mit den Hinweisen nur verzweifelt bin, habe ich gedacht, ich bin schlau und leihe mir Gamepads aus.
    Dafür gab es in dem Tutorial nämlich den kompletten Code. Aber obwohl ich - denke ich- alles 1:1 abgetippt habe, kann ich mich jetzt zwar nach links und rechts drehen aber nicht nach vorne oder hinten fahren. Jetzt wollte ich nicht hier den ganzen Code posten und andere Menschen bitten, sich soviel Arbeit für mich anzutun .. Vielleicht gibt es aber ja Hinweise oder Ideen, wie ich am besten vorgehe? Kann ich den kanzen Code durch Bewegungsevents oder so ersetzen? Wenn ich den character nicht bewegen kann, kann ich nichts anders prüfen und ich kann die Prüfung nie abschließen..sorry :)

    PS: Husi, sorry, ich hatte Deinen Kommentar ganz übersehen. Im Moment läuft es ... :(
  • Na setz einfach mal das ins step event:

    GML-Quellcode

    1. if keyboard_check(vk_up)
    2. {
    3. physics_apply_force(x,y, lengthdir_x(16,phy_rotation), lengthdir_y(16,phy_rotation));
    4. }

    und schau was passiert.
    Wenn du dich nicht nach vorne bewegst musst du entweder zu phy_rotation etwas dazu addieren (+90) oder dein Sprite drehen, sodass du nach vorne fährst.
    Die length_dir funktionen sind ähnlich wie ein Zirkel und helfen dir einen Punkt zu errechnen der auf einem kreis, mit in dem Fall 16px radius, liegt.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Unfähigkeiten sollten dir aber keinesfalls unangenehm sein... Schon gar nicht hier :)

    Leider kenn ich mich null aus in Physics und Game Maker... Ehrlich gesagt auch mit Physik im Reallife nicht :) (Ich glaub nich dran... is nur etwas was uns die Medien weiss machen wollen!!111 :) ) Sonst würd ich gern weiterhelfen.
    Aber nich aufgeben, hier wird dir geholfen :)
  • Guten Morgen,

    gerne!

    Also am liebsten wäre mir das mit Keyboards, weil ich es meinem Prof schicken muss und er im Zweifel keine Gamepads hat. Das vollständigste, dass ich finden konnte ist aber leider das für Gamepad:



    ///player Input

    // left turn
    if(gamepad_axis_value(0, gp_axislh) < -0.5){
    phy_rotation += (2.7 * (gamepad_axis_value(0, gp_axislh)))
    }


    // right turn
    if(gamepad_axis_value(0, gp_axislh) > 0.5){
    phy_rotation += (2.7 * (gamepad_axis_value(0, gp_axislh)))
    }

    //Gas

    gas_value = gamepad_button_value(0,gp_shoulderrb);
    if(gas_value > 0.1){

    forward_x = lengthdir_x(155, -phy_rotation - 90) * gas_value;
    forward_y = lengthdir_y(155, -phy_rotation - 90) * gas_value;

    physics_apply_force(x, y, forward_x, forward_y);


    }

    --------------
    -----------
    Sellbst das ist aber nicht komplett. Im Tutorial wird noch ein:

    event_inherited () ;

    angehangen. Da gibt er mir aber die Fehlermeldung: Assignment operator expected
    .


    <<- Problem = ich kann links und rechts lenken, aber nicht geradeaus und zurück

    ----


    Falls das mit Keyboard genauso machbar ist, das wäre noch großartiger, denn das brauche ich vor allem_
    ------------

    Folgender Code sorgt dafür, dass ich sowohl mit Keyboard als auch mit Pad arbeiten kann:(aber eben auch nur links und rechts-..logisch, bei GAs hab ich auch für KEyboard noch nichts drin, weil ich nicht weiß wie. Er soll ja nicht wie ein BRett bewegt werden, sondern auch diagonal fahren können, der Truck..




    ///player Input

    // left turn
    if(keyboard_check(vk_left) || gamepad_axis_value(0, gp_axislh) < -0.5){
    phy_rotation += -1 + (2.7 * (gamepad_axis_value(0, gp_axislh)))
    }


    // right turn
    if(keyboard_check(vk_right) || gamepad_axis_value(0, gp_axislh) > 0.5){
    phy_rotation += 1 +(2.7 * (gamepad_axis_value(0, gp_axislh)))
    }

    //Gas

    gas_value = gamepad_button_value(0,gp_shoulderrb);
    if(gas_value > 0.1){

    forward_x = lengthdir_x(155, -phy_rotation - 90) * gas_value;
    forward_y = lengthdir_y(155, -phy_rotation - 90) * gas_value;

    physics_apply_force(x, y, forward_x, forward_y);


    }

    Die Physics Attribute des Trucks:

    Als parent habe ich ein obj_car_base gewählt.

    Density: 1
    Resitution: 0,1
    colliion group: 0
    linear damping 3
    friction: 0,2

    Collision shape: Circle

    Häkchen bei: Start awake, uses physicsund visible

    Hilft das? :D
  • Jap, das hilft :)

    Augenscheinlich ist alles richtig, teste es mal mit eine densitiy von 0.1 und/oder einer linear dampening von 0.1 ob sich dann was bewegt. Weil es kommt drauf an wie groß dein Sprite ist und wie groß diese Werte sind um die Masse zu berechnen die bewegt werden muss, und dann reichen vielleicht die 155 "Newton" nicht aus.

    Das Event inherited brauchst du nur wenn du auch ein parent für dieses objekt erstellt hast, das auch im step event einen bestimmten code ausführt und ausführen soll.

    Die keyboard steuerung für gas würde ich so lösen:

    GML-Quellcode

    1. if keyboard_check(vk_up) && gas_value < gas_max
    2. {
    3. gas_value += 0.2
    4. }
    5. else if keyboard_check (vk_down) && gas_value > -gas_max
    6. {
    7. gas_value -= 0.2; //oder brems-wert
    8. }
    9. else //nix drücken, fahrzeug rollt aus
    10. {
    11. if gas_value > 0
    12. {
    13. gas_value -= 0.1;
    14. }
    15. if gas_value < 0
    16. {
    17. gas_value += 0.1;
    18. }
    19. }
    20. forward_x = lengthdir_x(155, -phy_rotation - 90) * gas_value;
    21. forward_y = lengthdir_y(155, -phy_rotation - 90) * gas_value;
    22. physics_apply_force(phy_position_x, phy_position_y, forward_x, forward_y);
    Alles anzeigen


    Sonst würde ich noch probieren statt x und y phy_position_x und phy_position_y zu benutzen. Aber prinzipiell schaut dein code in ordnung aus, der fehler muss an den Werten oder woanders liegen.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Wow, Danke für die ganze Mühe. Das ist jha großartig. Ja, ich habe einen PArent angelegt, ganz nach Tutorial.
    Und die erste Änderung hat zumiundest bewirkt, dass ich mich rückwärts bewegen kann, aber nur langsam. MAcht es vielleicht Sinn, wenn ich mein Sprite austausche, gegen ein deutlich kleineres? Würde eseh gerne etwas kleiner haben. Das kann man aber vermutlich nicht kalieren, sondern neu erstellen, richtig?

    und dann noch eine blöde Frage die mir jetzt erst aufgefallen ist, bzw das Problem... Ich hatte den Racetrack mit Piles aus einem Forum verlegt, wollte es aber individueller und habe mit Photoshop passende "Waldstückchen" (die darf an auch keimem zeigen :P ) gemacht. Ich habe aber die Box nicht mehr gefunden, wo ich die als Pile einstellen kann. Also hab ich sie als viele objects angelet und so in die Karte eingefüht. Jetzt sind diese Flächen aber vorrangig gegenüber dem Truck. Sobald ich nach vorne fahre (oder in meinem Fall langsam rückwärts, verschwindet er darunter. Kann ich irgendwo einstellen, dass diese Objects eine Schicht unwichtiger sind?
  • Entweder das Sprite kleiner machen, skalieren im Edir geht auch, oder die Kraft erhöhen (xforce, yforce).
    Zu den Tiles, einfach im Roomeditor oder dem truck die depth ändern. Je mehr im Minus desto weiter oben wird das sprite gezeichnet :)

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Ohman,

    ich schulde Dir ein paar Bier :)
    Ich kann mittlerweile immerhin ruckwärts fahren. Vorwärts geht gar nichts, auch wenn ich die Forces um das dreifache erhöhe. Irgendwoanders muss ich noch was übersehen haben.

    Und Danke für die Keyboardcodes. Die könnten es ja vielleicht bringen, aber muss ich die nicht einfach unter den bisherigen Code packen? So habe ich es zumindest versucht und im Code hat er li ks einen roten Balken und beim Testen passiert auch nicht mehr und nach ein paar Sekunden schließt er wegen Fatal Error.

    Ich kann natürlich so tun, als müsste man in meinem Game rückwärtsfahren. Allerdings brettert der natürlich volle Lotte über die Bäume am Straßanrand.. Und die Objekte bestehen halb aus Strecke. Wenn ich also ein Collisons-Event mit dem jeweiligen Objekt mache, dann wird der Wagen schon lange abprallen bevor er die Bäume berührt. Kann man da Marker setzen für Kollisionen?

    Wenn ich die beiden Sachen nämlich im Griff hab, brauche ich "nur noch 3 Sachen" fürs Finale. Gegner, nen Rundenzähler und eine Banane die einmal pro Runde in einen bestimmten Bereich geschmissen wird.

    Oder anders gesagt: ich werd nicht fertig, oder? :headtouch:

    EDIT//
    HA. Hauptproblem gelöst. Es hat noch die Bremse gefehlt. Und ich bin nicht drauf gekommen, weil es falsch rum ist. Beim GAs geben fährt mein Sprite nach hinten . Kann mir einer sagen, wie ich nun den Truck umdrehe? :D:D


    EDIT NOCHMAL:
    OK , das ist jetzt peinlich. Ich hab wie im Tutorial nochmal das PArentDing eingefügt und wieder entfernt, weil dann alles grau war. Und obwohl ich glaube, dass es nun wie vorher ist, ist weiterhin alles grau. Verdammte Axt. Ich war so kurz vorm Durchbruch :). Hilfe. Sorry. Vielleicht habe ich aber einen dämlichen Fehler gemacht und als Profi kann man das direkt sehen?
    Ich versuche es einfach verzweifelt.

    (oder kann man irgendwie in ner Backuplise 1,2 Schritte zurückfinden?)



    ///player Input

    // left turn
    if(keyboard_check(vk_left) || gamepad_axis_value(0, gp_axislh) < -0.5){
    phy_rotation += -1 + (2.7 * (gamepad_axis_value(0, gp_axislh)))
    }


    // right turn
    if(keyboard_check(vk_right) || gamepad_axis_value(0, gp_axislh) > 0.5){
    phy_rotation += 1 +(2.7 * (gamepad_axis_value(0, gp_axislh)))
    }

    //Gas

    gas_value = gamepad_button_value(0,gp_shoulderrb);
    if(gas_value > 0.1){

    forward_x = lengthdir_x(355, -phy_rotation - 90) * gas_value;
    forward_y = lengthdir_y(355, -phy_rotation - 90) * gas_value;

    physics_apply_force(x, y, forward_x, forward_y);


    }

    //Brake

    brake_value = gamepad_button_value(0,gp_shoulderlb);
    if(brake_value > 0.1){

    phy_speed_x = lerp(phy_speed_x, 0, 0.05);
    phy_speed_y = lerp(phy_speed_y, 0, 0.05);



    }

    event_inherited();






    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von scheriffdonnerknall ()

  • Da wo die Sachen von GM gespeichert sind, ist eigentlich ein Backup Ordner.
    Also ein Ordner über dem Projekte Ordner ;)
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Husi, ja. Bei mir nicht. Ich lege jetzt besser einen an :D:D

    Und Aku: 1. Geil, Danke. Das Umkehren klingt logisch und funktioniert.

    Ich hatte dazu das Problem, dass ich beim Testspielen einen ganz grauen Monitor angezeigt bekam. Lag anscheinend daran, dass ich Pixels to meter testweise auf 0 gesetzt habe Auf jeden Fall geht es wieder und mir fallen zehn Steine vom Herzen. So habe ich doch noch eine Chance, die Aufgabe zu erfüllen. Von der Idee, das bei jeder Runde eine Banane auf die Strecke fällt, auf der man ausrutschen kann, bin ich schon weg. Das war wohl etwas viel.
    Was ich aber wohl noch brauche, damit es ein komplettes Game ist, ist ein Runden- und Zeitzähler, der bei drei Runden stoppt. Ich will Euch auch nicht weiter auf die Düse gehen. Ich versuche mal, was rumzuspielen und hoffe, es ist okay, wenn ich nochmal frage, wenn es bis morgen früh gar nicht geht ? :D

    Auf jeden Fall habt ihr mich schon von geht gar nicht zu solala gerettet! Danke