objekt mit verschiedenen kollisionen erstellen

  • GM 8

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

  • objekt mit verschiedenen kollisionen erstellen

    nabend,

    folgendes problem:

    ich habe 1 auto(wow) welches von 4 verschiedenen seiten auf 4 verschiedene arten kaputt gehen soll.
    bsp das fährt rechts an eine wand gibts dann die entsprechende animation. das selbe links/oben und unten.
    nun habe ich schon ne menge gesuch, aba nix gefunden, zumindest was ich verstanden habe.
    kann mir da jemand weiterhelfen? wäre nett

    mfg
  • GML-Quellcode

    1. if (rechts_fahren) {auf_diese_weise_kaputt_gehen();}

    Also, zum Beispiel

    GML-Quellcode

    1. if (direction == 0) {sprite_index = spr_auto_kaputt_rechts;}

    Vielleicht könnt ichs mit mehr Informationen etwas anschaulicher gestalten.
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.
  • also iwie bekomme ich das net hin. es wechseln zwar sprites, aba nie die sollen. ich komme scheinbar net mit der logic klar wie die abfragen gemacht werden müssen.
    es soll abgefragt werden in welche richtung das taxi grade schwebt, wenn es zu doll nach rechts fährt wird bei der wall kollission gefragt werden welches sprite gerade verwendet wird. darauf soll dann jenachdem ob das taxi gerade nach links oder rechts schaut die passende unfall-animation gezeigt werden. das selbe soll nach links und oben gehen. nach unten gibts nur ne abfrage ob es "zu schnell" ist. wenn ja soll es platzen, wenn nein dann (habe ich zumindest noch vor) soll health abgezogen werden bis das taxi putt is.
    ich habe mal meinen momentanen stand angehängt, vllt könnte sich das mal einer ansehen der ahnung davon hat, ich verzweifel iwie etwas daran =)
    thx schonmla im vorraus.

    mfg
    Dateien
    • gravtaxi.zip

      (125,47 kB, 76 mal heruntergeladen, zuletzt: )
  • Hm, ich hab hier leider kein Game Maker 8 installiert, nur 7. Muss dir wohl jemand anderer helfen, oder du postest hier mal die Codes.
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.
  • hab gestern nix mehr gemacht, sry...war am sprites zeichnen.

    so zur kollision. ich hab das nun etwas "unkomplizierter gemacht. klappt iwie auch.
    ich habe :
    • if speed largen than 8
    channge instance into taxi_kaputt
    • set time line kaputt_unten
    • set health relative to -1

    porblem is nur dass die kollision wahnsinnig ungenau ist. wenn ich unter der wall stehe und nach oben drücke dann zählt die health bar falsch oder garnet, selbiges an den seiten. manchmal explodiert mein taxi auch obwohl health noch nicht runter ist oder es sich nicht bewegt.
    kennt da jemand eine elegante und genaue lösung? gerne auch in tutorial form =P

    hab nomma nen aktuellen stand angehangen
    Dateien
  • so, ich nutz mal des thema für weitere sich mir erschliessende fragen xD sry für meine unwissenheiten, is alles neuland und die sufu hab ich auch schon überlastet xD

    also ich habe :

    2 taxistände
    1 passagier
    1 taxi

    der ablauf soll so sein:

    raum startet / controller objekt event room create; create instace passagier; create instance ein_trigger
    so nun hab ich nen fliegendes taxi , nen passagier der im wartehäusschen steht und winkt und nen pseudo trigger mit dem ich den ablauf des passagier steuern will wenn das taxi drauf landet.

    nun habe ich dem taxi nen collisions event für den trigger gegeben welcher bei berührung eine timeline ausführt.
    die timeline sagt dem passagier: gehe den pfad 200px relativ zu deiner position nach rechts und wenn du da angekommen bist wieder 200px relativ nach links.
    das soll so ne art einsteigen ins taxi emulieren, bzw das zurücklaufen wenn das taxi schnell abhebt bevor der passagier drinne is.
    der passagier selber hat nen collisions event mit dem taxi welches sagt: destroy passagier; create instance aus_trigger; set score +10; set fuel +25;
    das aus_trigger objekt ist wie ein_trigger. es soll nur sagen wo der nächste passagier abzuholen ist und dem taxi punkte und fuel geben.

    jetzt hab ich da 2 probleme:
    1. der passagier läuft brav nach vorne, nur zurück geht er nicht den ganzen weg. dadurch verschiebt sich das ganze und der passagier läuft irgendwann in der luft...das is doof.
    habe es schon versucht in der timeline vor set pfad den passagier an einem raster auszurichten. dann läuft er den korrekten weg. aber das ein_trigger event ist verdreht und der läuft los wenn das taxi nicht auf dem trigger ist...das will ich net =P

    2. ich raffe das mit der zufallsberechnung nicht =( hab schon einiges gelesen und paar beispiele runtergeladen, aba bin zu bleed für. wie kann ich es machen dass meine events dann per zufall generiert werden? wenn ich nicht 2 sondern 4-6 taxistände im lvl habe, wie kann ich das steuern dass beim aus_trigger collisions event aus den verschiedenen taxiständen 1 ausgewählt wird um dort den passagier und ein_trigger zu creieren?

    hoffe ich hab mich "verständlich" ausgedrückt. bin noch net so firm in dem ganzen =P nebenbei mache ich das ganze mit super ausgeklügelten drag&drop eventen hust und 2-3 mini scripten.
    bin für jede hilfe dankbar.

    mfg
  • huhu ich mal wieder, diesmal net mit solangem text...aber den gleichen problemen xD
    habe mich schon soweit vorgearbeitet dass ich nun die verschiedenen taxistände ansteuern kann, ohne dass die irgendwas doppelt darstellen juhu.
    hab da aber nen problem mit gml, ich versuche mir ne zufallsabfrage zu erstellen welche auch funktioniert. das problem daran ist dass sie eine fehlerquote von ca 1zu8 hat. ich denke das liegt an der 0. aba hab keine ahnung wie ich die 0 umgehen kann. mit i_random_range sagt der mir nur fehler. also (1,2,3...) will dern et akzeptieren. hab mich auch schon durch ne menge themen durchgelesen, bin aba ziemlich ratlos, da es ja funktioniert, nur nicht richtig. hier ma mein code:

    GML-Quellcode

    1. //create loop of eintrigger
    2. loop1= floor(irandom(4))+1;
    3. if loop1= 1 {instance_create(100,200,eintrigger)};
    4. if loop1= 2 {instance_create(100,500,eintrigger)};
    5. if loop1= 3 {instance_create(832,200,eintrigger)};
    6. if loop1= 4 {instance_create(832,500,eintrigger)};


    bin was gml angeht noch nen dau, also bitte helft mir...nur verständlich xD

    mfg
  • Also erstmal "irandom" erstellt eine gerundete Zahl, die brauchst du nicht nochmal mit floor() runden.
    Ich denke du kommst nur auf 2-3-4-5, mit floor(irandom(4))+1

    GML-Quellcode

    1. switch (floor(random(4)) ) {
    2. case 1:
    3. instance_create();
    4. break;
    5. case 2:
    6. instance_create();
    7. break;
    8. ...
    9. }
    Alles anzeigen


    Das ist ein switch-statement.
    Du gibts das argument an, "floor(random(4))"
    Und case ist sozusagen die If abfrage.
    :saint:
  • jop, das funzt auch, hatte das schonmal ausprobiert, muss aba nen fehler bei mir gewesen sein.
    prob ist dass es immernoch manchmal net will. ich starte das script im create event. und manchmal will der einfach nicht instance_create machen.
    hatte irgendwo gelesen dass das random auch die 0 mitrechnet, und ich hab ja kein case 0. daher denke ich liegt es daran, oder bin ich da falsch gewickelt? wie gesagt ich mache gerade meine ersten zaghaften versuche mit gml, und verstehe öfters mal die logic net xD
  • jup, das klappt thx =) hatte es heut nacht schonmal getestet, hatte da aber nen fehler (1,2,3,4) wollte der net nehmen, mit (1,4) klappts tatsächlich =)

    jetzt sind da noch probs...sry für die vielen fragen.

    1. kann ich iwie abfragen ob mein taxi gerade an der stelle ist wo der "eintrigger" entstehen soll? so dass er sich dann ne andere zahl nimmt. zb spawnt mein eintrigger mit 1. ich fahre hin, hab kollisionsevent mit dem eintrigger. nun kommt wieder die abfrage wo das "austrigger" spawnen soll. wenn der zufall es will spawnt der "austrigger an der selben stelle wie eintrigger gerade war, und mein passagier ist schneller aus dem taxi aus als eingestiegen. möchte aber dass dies nicht passiert. hoffe das war verständlich =P ich häng ma nen testlvl an, damit das ersichtlicher ist was ich möchte =)
    und 2. ich hab von lewa ne steuerung übernommen aus nem anderen thema, hab die meinen werten angeglichen. möchte dies aber mit einer timeline erweitern in der geprüft wird dass wenn taxi links fährt und sprite_index rechts ist die timeline für linksdrehen eingeleitet wird. rechts in umgedreht genauso. das klappt iwie nicht. gibt es da nen trick für?
    Dateien
  • huhu, ich mal wieder

    also die vorherigen probs hab ich irgendwie gelöst, bestimmt net doll die lösung aba sie funzt. =) so nun frage an die gml experten^^
    ich habe es soweit dass mein austrigger nun per zufall an einem von 4 taxiständen spawnt. ich möchte wenn das taxi dort landet eine timeline starten.
    nun ist mein prob dass ich ermitteln muss wo das taxi landet damit der passagier aussteigt, und dann auch noch in die richtige richtung abhaut. das abhauen machen ie timelines. ich dachte da an sowas:

    GML-Quellcode

    1. if instance_place(x+78,y+196,austrigger);
    2. {timeline_index = aus_l_1}


    aba das funktioniert so ziemlich garnet. gibt es da ne bessere lösung? der gml schnipsel ist im collisionsevent vom taxi mit dem austrigger.
    kann mir da jemand bitte mal weiterhelfen?

    mfg
  • ja, denke das wäre sinnvoller =P mein prob ist dass ich grade erst anfange gml zu lernen...naja und try and error is für programmiersprachen net so dolle =P also ich schreib mal wie das mit en taxiständen funst, vllt hast du dann ne idee wie ich das umsetzen sollte:

    in einem controller objekt wird das hier erzeugt:

    Spoiler anzeigen

    GML-Quellcode

    1. ein = irandom_range(1,4);
    2. if ein = 1
    3. if place_free(x,y,) {instance_create(48,198,eintrigger)instance_create(40,165,passagier_links)};
    4. if ein = 2
    5. if place_free(x,y,) {instance_create(48,498,eintrigger)instance_create(40,465,passagier_links)};
    6. if ein = 3
    7. if place_free(x,y,) {instance_create(832,198,eintrigger)instance_create(968,165,passagier_rechts)};
    8. if ein = 4
    9. if place_free(x,y,) {instance_create(832,498,eintrigger)instance_create(968,465,passagier_rechts)};
    Alles anzeigen


    dann kann das taxi da hinfahren und bei collision mit dem eintrigger kommt der passagier angelatscht und könnte einsteigen. wenn das taxi schneller wieder abhebt dann läuft das männl wieder zurück annen taxistand und winkt.

    wenn das taxi nun mitn männl collidiert dann passiert eigentlich nur das:

    Spoiler anzeigen

    GML-Quellcode

    1. aus = irandom_range(1,4);
    2. if aus = 1 if place_free(x,y,){instance_create(48,198,austrigger)};
    3. if aus = 2 if place_free(x,y,){instance_create(48,498,austrigger)};
    4. if aus = 3 if place_free(x,y,){instance_create(832,198,austrigger)};
    5. if aus = 4 if place_free(x,y,){instance_create(832,498,austrigger)};
    Alles anzeigen



    und männl wird zerstört.

    so und nun sitze ich genau an dieser stelle. ich möchte dass wenn das taxi den austrigger berührt sich eine von 2 timelines startet. entweder die für die linken oder die für die rechten stände. sind ja 2 richtungen in die mein passagier "aussteigen" soll.

    ich hänge ma noch nen screenie dran.


    hoffe ich hab mich verständlich ausgedrück. bin für jede hilfe dankbar, da ich das iwie net hinbekomme, und das so fast mein letztes prob vor der lvl gestaltung ist.

    mfg


    ps: das chaos auf dem bildschirm ist nur zum anzeigen da, das ist alles nicht so wie es mal fertig dargestellt wird. also kein UI usw vorhanden immo und die positionen der taxistände werden woanders sein.
  • Benutzer online 2

    2 Besucher