Waffen: Aufheben,ablegen,schiessen

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

  • Waffen: Aufheben,ablegen,schiessen

    Ich scheitere immerwieder an den Versuch Waffen aufheben zu können, schiessen, und wieder ablegen zu können...

    Da ich noch recht unerfahgren bin in GML, benutze ich immernoch Drag and Drop... (Aber in GML versuche ich es auch schon...)

    Auf jedenfall hab ich null ahnung wie ich es machen soll! Ich habe es mit allem versucht: Variablen, Parents,....

    Hat jemand eine Idee wei ich es machen könnte? Ich habe einen Objekt Player. Wenn er über der Waffe steht( Kollision) ind dann ``I´´ drück, hebt er die Waffe auf. Das Aufheben funktioniert folgendermaßen: Die Waffe ``Springt praktisch auf den Spieler und verfolgt nur seine bewegung. Wenn der die Waffe trägt, und dann ´´I´´ drückt, legt er sie weider ab. Es sollte so funktionieren, das jede eigene Waffe auf dem Feld eine eigene Munianzahl hat, und das jede Waffe vom gleichen Objekt als eine eigene angesehen wird. (Sodass nicht gleich alle Waffen vom Feld auf dem Spieler kommen...)


    Kann mir da einer helfen? Sämtliche Tuts haben nichts gebracht...
    Ich hänge an der Stelle schon seit mehreren wochen... :(
  • Die Frage die sich mir zuerst stellt, ist was für ein Spiel das wird... ist aber nicht umbedingt relevant...

    Das mit dem Aufheben scheinst du ja schon erkannt zu haben, wenn du drauf stehst, mit einer Taste aufheben.
    Im gleichen Event kannst du dann evtl eine Variable benutzen um den Zustand des Charakters zu speichern.

    Das wäre dann in etwa sowas:

    GML-Quellcode

    1. <Waffe aufheben>
    2. player_state="weapon";


    und beim Wegschmeissen dann:

    GML-Quellcode

    1. <Waffe wegschmeissen>
    2. player_state="normal";


    Oder halt mit ID's über die Constants...

    Du könntest es mit nem Switch denke ich am besten realisieren.

    GML-Quellcode

    1. if(keyboard_check_pressed(<dein Key>))
    2. -{
    3. -switch(player_state)
    4. --{
    5. --case "normal":
    6. ---{
    7. ---<Waffe aufheben>
    8. ---break;
    9. ---}
    10. --case watever:
    11. ---{}
    12. --}
    13. -}
    Alles anzeigen


    oder ähnlich...


    Ich denke es ist einfacher, das Objekt (Waffe) verschwinden zu lassen beim aufheben und am ende neu zu machen.

    EDIT: Und noch immer ist diese Formatierung Starrsinnig und will nicht, wie ich will... Wäre es möglich im GML dingens die formatierung mit Tabulatoren etc zu ermöglichen?

    EDIT(265449): begnüg dich mit meinen Strichen anstelle von Leerzeichen, die Tabulatoren mag er nich wirklich, da schiebt er mal 1, mal 2, mal 3 ein aber nicht so wie ich es ausm GM-Editor kopiert hab
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von Schattenphoenix ()

  • Das mit switch und case versteh ich nicht...

    Aber ich denke ich habe so etwas ähnliches scho ngemacht.

    Da habe ich einfach eine Variable 1 udn null gennommen die sich beim aufheben ändert. Ist die Variable 0, so nimmt er die Waffe auf. Dabe iänderst sie sich auf 1.

    Ist die Variable 1, dann lässt er die Waffe fallen...

    Leider funktioniert das nicht... Ich bin schon komplett verzweifelt...
  • Bist du dir sicher, dass du Informatiker bist?

    Naja ich erklärs auch nochmal. Nicht der Spieler hat einen Zustand "Waffe tragen" sondern die Waffe hat einen Zustand "wird getragen". Immer passiv denken, das macht sowas klarer.
    Es gibt zwar auch einen Bezug Player -> Waffe, der ist aber kein zustand... jedenfalls nicht für mich o.o

    Deine Waffe hat also 2 Zustände, dafür nehmen wir die Variable follow.
    Z1: Dem Spieler folgend, sagen wir follow = true;
    Z2: auf dem Boden liegend, sagen wir hier follow = false;

    Wenn der Player auf der Waffe steht und "i" drückt, setzt du den Zustand der Waffe, also den Wert der Variable follow auf true. Ich würde follow zudem mit self. referenzieren um sicher zu gehen, dass du auch nur die Waffe dem Spieler folgen lässt die er auch aufheben kann (weil er drauf steht).
    So kanns dir nicht passieren, dass aufeinmal alle gleichartigen Waffen dem Spieler folgen.

    Das Aufheben könnte dann also folgendermaßen funktionieren:
    Du prüfst im Playerobjekt auf eine Kollision mit einer Waffe (kann man über Parents regeln, siehe anderer Thread) und gleichzeitig noch auf einen Keypress Event.

    Pseudocode:
    if player_steht_auf_obj_waffe AND player_drueckt_i then
    other.follow = true
    self.waffe = other;
    fi

    Wenn beide BEdingungen erfüll sind, ist der Zustand der Waffe auf "folgend" gesetzt, d.h. die Waffe folgt dem Spielerobjekt (wie genau, siehe unten).
    Die Variable self.waffe gehört natürlich zum Spielerobjekt und speichert die Objektid der Waffe die der Spieler gerade trägt.
    Wenn du also z.B. die Munition ändern willst kannst du vom Playerobjekt aus einfach sowas schreiben: self.waffe.munition -= 1 o.ä.
    self.waffe muss im Create Event des Spielerobjekts initialisiert werden.

    Weiter:
    In den Step-Events des Waffenobjekts pruefst du dann den Zustand follow und handelst entsprechend, also z.B. im End-Step von obj_pistole (o.ä.=:

    GML-Quellcode

    1. if (follow){
    2. self.x = player.x;
    3. self.y = player.y;
    4. }

    Damit folgt das Waffenobjekt dem Spieler. player muss natuerlich das Playerobjekt sein.


    Ablegen könnte so funktionieren:

    GML-Quellcode

    1. if ( (self.waffe != 0) && (keypressed(i)){
    2. self.waffe.follow = false;
    3. //hier kannst du jetzt bestimmen WO die Waffe abgelegt werden soll, wenn hier nix mehr kommt dann bleibt sie an der x/y Position des Spielers liegen
    4. }


    Den Keypress code musst du anpassen, hab den Syntax jetzt nicht im Kopf.

    Funktionen für Schießen usw. sind dann halt in jeder Waffe seperat implementiert. Du musst bei einer Waffe also vor Jeder Aktion abfragen ob
    self.follow = true
    gilt. Wenn nicht darf die Waffe auch nicht reagieren.

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

  • Da ich im letzten Thread zu Recht kritisiert wurde,
    weil ich mehrere Fehler geschrieben habe, melde ich mich hier nochmal.
    In einem älteren Spiel, dass daran scheiterte, dass mein USB-Stick wegkam,
    habe ich auch so ein System.
    Man drückt nach unten hebt die Waffe auf, auf der man steht.
    Noch einmal nach unten drücken und er wirft die Waffe weg.
    Ich schick dir mal die Source wenn ich wieder an meinem Pc Internet habe.(Könnt gerne in meinen Thread noch helfen)
    Da es einer meiner ersten Spiele war, ist sehr viel in D&D.
    Mfg.
  • Hm, ich mach das ganze eigentlich immer Spielerbezogen... der einzige Vorteil beim Waffenbezogen wäre vllt, dass es sich leichter separieren lässt. Aber da die ganzen sachen eh großteils in Scripte gesteckt werden...

    Naja, watever such dir eine Möglichkeit aus ;)
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet