Gegner sollen Spieler ignorieren

  • GM 8

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

  • Gegner sollen Spieler ignorieren

    Hey Leute, ich arbeite derzeit mit einem Team bestehend aus sechs Leuten an einem Studentenprojekt, das wir mit dem Game Maker 8.0, lite Version erstellen wollen. Wir arbeiten uns seit ca zwei Wochen in das Programm ein und haben unglücklicherweise keinen, der Ahnung von Programmierung bzw Scripting hat...(war eine unglückliche Zusammenstellung an Teammitgliedern...).
    Deswegen sind wir auf Leute von ausserhalb angewiesen, weswegen ich mich auch hier angemeldet habe. Weder die Hilfefunktion im Game Maker, noch die Suchfunktion hier hat unsere Frage beantworten können, aber warscheinlich habe ich nur die falschen Suchbegriffe eingegeben...
    Falls diese Frage tatsächlich neu sein sollte wäre ich für eure Unterstützung sehr dankbar!

    Wir wollen ein Spiel entwickeln, in welchem der Spieler Jump and Run und Rätseleinlagen bestehen und vor Monstern fliehen muss. Jegliche Berührung mit den Viechern bedeuted der Tod. Behilflich soll ua eine Art "Hide-Funktion" sein:
    Bestimmte Bereiche liegen im Schatten. Sobald der Spiele sich dort duckt, registrieren ihn die Monster nicht mehr, hören auf ihn zu verfolgen und starten wieder ihre vorgebenen Patroulien, oder stoppen einfach.
    Vorgestellt haben wir uns das optisch so, dass wir, falls es überhaupt möglich ist, einen schwarzen Extralayer mit 30-50% Transparenz im Vordergrund anlegen, der die Schattenzonen markiert, in denen die Duckfunktion das Event der Monster auslöst.
    Nun ist die Frage: Ist das möglich? Wenn ja, wie können wir das ganze programieren? (bitte möglichst verständlich erklären für Leute die sich nur mit Grafiken auskennen, nicht mit Scripten >.<)

    Wenn es diese Frage schon gab wäre ich auch für einen passenden Suchbegriff dankbar, um die Lösung finden zu können :)

    Ps: Wenn ich weitere Fragen haben sollte (was in nächster Zeit häufig der Fall sein wird) würde ich sie gerne in diesem Thread stellen. Ich hoffe mal dass es dann nicht der Übersicht schadet...

    Mfg,
    Sephix
  • Sowas wäre mit einer If bedingung sehr einfach zu gestalten,


    Step event vom Gegner

    GML-Quellcode

    1. if !collision_line(x,y,obj_player.x,obj_player.y,obj_wall,1,1){
    2. //Hier kommen dann eure Codes rein wenn der Gegner denn spieler sieht also das kein obj_wall zwischen denn spielern und denn gegner ist
    3. }


    obj_player = Spieler

    obj_wall = Die wände im Spiel

    Edit:
    Ups hab mich verlesen , das sollte deinem Problem helfen :
    Create event Vom Spieler :

    GML-Quellcode

    1. global.hide=0


    Step event Vom Spieler :

    GML-Quellcode

    1. if keyboard_check(vk_down) && place_meeting(x,y,obj_shadow) // obj_shadow ist das schatten object.
    2. {
    3. global.hide=1
    4. sprite_index=spr_duck
    5. }
    6. else{
    7. global.hide=0
    8. sprite_index=spr_player //Halt das alte sprite
    9. }


    Step event Vom Gegner :

    GML-Quellcode

    1. If global.hide=0{
    2. //Hier euere codes für denn gegner der sich zum spieler bewegt wenn der spieler sich nicht duckt und sich nicht im schatten befindet.
    3. }
    :saint:

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

  • Ah, Dankeschön, das hat uns sehr geholfen!

    Hier nun vier weitere Probleme/Fragen die hoffentlich gelöst werden können X(

    - Wie ist es möglich Checkpoints für die Figur des Spielers zu erzeugen, damit sie an bestimmten Punkten erscheint sobald sie irgendwo stirbt (in einem Level soll es sehr viele unsichtbare Checkpounts geben, der Charakter wird also immer am zuletzt berührten Checkpoint respawned)?
    - Wir bräuchten eine Funktion mit der man Objekte wie Kisten verschieben kann, ideal wäre es, wenn die Kisten zusätzlich nich von diversen Ebenen geschubst werden könnten.
    - Bisher haben wir noch nicht rausfinden können wie man folgende Möglichkeit scripten kann: Objekt aufsammeln, das Objekt an einem anderen Ort wieder ablegen (oder ein Event durch Tastendruck auslösen können sobald man das Objekt mit sich trägt und an einem bestimmten Ort ist) und dadurch ein Event auslösen welches ein anderes Objekt zerstört (Bsp: Spieler sammelt Dynamit auf, rennt zu ner Wand und zerstört durch eine Explosion die Wand sobald er das Dynamit einsetzt)
    - Wir haben schon des längeren Probleme mit unseren bewegenden Plattformen: Der Spieler bleibt in den Plattformen stecken wenn er draufspringt. Kann man das irgendwie beheben (für jeweils die horizontal und vertikal bewegenden Plattformen)?

    Schonmal danke im Vorraus :)

    Mfg,
    Sephix
  • In der Schnelligkeit kann ich dir nur mal die 1 beantworten.
    Naja du machst ein Objekt (obj_checkpoint)
    Wenn diese Objekt mit dem Spieler kollidiert, dann setzt du eine global.xcheck variable auf x und eine global.ycheck variable auf y. (im obj_checkpoint)
    Sobald der Spieler stirbt machst du, x = global.xcheck und y = global.ycheck (im obj_spieler)
    So würde ich das machen.

    MfG Rodrog
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • Ich kann dir bei dem Dynamit helfen:

    Definiere zualleerst eine Variable

    Create-Event des Spielers

    GML-Quellcode

    1. dynamit=0


    Beim Spieler ist also die Variable anfangs 0.

    Danach schreibst du ins Step-Event des Spielers

    GML-Quellcode

    1. if place_meeting(x,y,obj_dynamit)
    2. {
    3. dynamit+=1
    4. }


    Somit wird die Variable dynamit bei Berührung des Objekts obj_dynamit um 1 erhöht.

    Danach kommt noch zusätzlich ins Step-Event des Spielers

    GML-Quellcode

    1. if keyboard_check(ord('D')) && dynamit>0
    2. {
    3. instance_create(x,y,obj_dynamit);
    4. dynamit-=1;
    5. }


    Somit wird bei Drücken der Taste D (Falls deine Variable dynamit größer als Null ist) dein Objekt obj_dynamit an der Stelle des Spielers gelegt.

    Ich hoffe das funktioniert und ich konnte dir helfen.

    MfG,
    GR3NouILL3
  • In der Schnelligkeit kann ich dir nur mal die 1 beantworten.
    Naja du machst ein Objekt (obj_checkpoint)
    Wenn diese Objekt mit dem Spieler kollidiert, dann setzt du eine global.xcheck variable auf x und eine global.ycheck variable auf y. (im obj_checkpoint)
    Sobald der Spieler stirbt machst du, x = global.xcheck und y = global.ycheck (im obj_spieler)
    So würde ich das machen.

    MfG Rodrog
    Also i-wie funktioniert das nich so wie´s wohl sollte.
    Ich hab den Code nun folgendermaßen gemacht:

    Obj_Checkpoint (not visible/not solid):

    Collision with player (Event):
    global.xcheck = x
    global.ycheck = y

    Dann hab ich im Charakter:

    Outside Room (Event):

    x = global.xcheck
    y = global.ycheck

    Jetzt wird der Charakter nich zurückgesetzt wenn er "stirbt" und komischerweise bleibt er auch am Block hängen óO Was hab ich falsch gemacht? Ich muss dazu noch erwähnen das ich überhaupt kein Plan von Programmierung habe!
  • Hi

    Hier mal einen Code um die Kisten zu verschieben.

    Der Code sollte beim Player sein im Collisions Event mit der Kiste. Was am wichtigsten ist, die Einstellung in der Codeleiste. Da solltest du es auf "Applies to - Other " einstellen

    GML-Quellcode

    1. {
    2. /////////////////////////////////////////
    3. // Kisten horizontal verschieben //
    4. /////////////////////////////////////////
    5. if (obj_player.hspeed == 0 ) exit;
    6. if ( place_empty(x+obj_player.hspeed,y) )
    7. {
    8. x += obj_player.hspeed;
    9. }
    10. }
    Alles anzeigen


    Gruss Drachen :)
  • Hi

    Hier mal einen Code um die Kisten zu verschieben.

    Der Code sollte beim Player sein im Collisions Event mit der Kiste. Was am wichtigsten ist, die Einstellung in der Codeleiste. Da solltest du es auf "Applies to - Other " einstellen

    GML-Quellcode

    1. {
    2. /////////////////////////////////////////
    3. // Kisten horizontal verschieben //
    4. /////////////////////////////////////////
    5. if (obj_player.hspeed == 0 ) exit;
    6. if ( place_empty(x+obj_player.hspeed,y) )
    7. {
    8. x += obj_player.hspeed;
    9. }
    10. }
    Alles anzeigen


    Gruss Drachen :)
    Der Code funktioniert leider nicht!


  • Zitat

    In der Schnelligkeit kann ich dir nur mal die 1 beantworten.
    Naja du machst ein Objekt (obj_checkpoint)
    Wenn diese Objekt mit dem Spieler kollidiert, dann setzt du eine global.xcheck variable auf x und eine global.ycheck variable auf y. (im obj_checkpoint)
    Sobald der Spieler stirbt machst du, x = global.xcheck und y = global.ycheck (im obj_spieler)
    So würde ich das machen.

    MfG Rodrog
    Also i-wie funktioniert das nich so wie´s wohl sollte.
    Ich hab den Code nun folgendermaßen gemacht:

    Obj_Checkpoint (not visible/not solid):

    Collision with player (Event):
    global.xcheck = x
    global.ycheck = y

    Dann hab ich im Charakter:

    Outside Room (Event):

    x = global.xcheck
    y = global.ycheck

    Jetzt wird der Charakter nich zurückgesetzt wenn er "stirbt" und komischerweise bleibt er auch am Block hängen óO Was hab ich falsch gemacht? Ich muss dazu noch erwähnen das ich überhaupt kein Plan von Programmierung habe!
    Mach mal beim Collision with player (Event):
    global.xcheck = other.x oder player.x
    global.ycheck = other.y oder player.y

    Das müsste dann funktionieren.

    {
    /////////////////////////////////////////
    // Kisten horizontal verschieben //
    /////////////////////////////////////////

    if (obj_player.hspeed == 0 ) exit;
    if ( place_empty(x+obj_player.hspeed,y) )
    {
    x += obj_player.hspeed;
    }

    }
    Dieser Code macht gar keinen Sinn.

    Probier es mal so im Kollisions-Event vom Player mit der Kiste:

    GML-Quellcode

    1. if(x < other.x && y > other.y)
    2. other.x += hspeed
    3. if(x > other.x && y > other.y)
    4. other.x -= hspeed;


    Ich garantiere aber nicht, dass das funktioniert ;).

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
  • Hi

    Bin etwas spät dran. War eine lange Zeit mit was anderen beschäftigt. Ist natürlich keine Endschuldigung.
    Ich gebe dir mal eine Datei von meinen Retro-Game Boulder Dash. Die Datei beinhaltet jetzt nur das schieben der Felsen, das du dann übertragen kannst für deine Kisten.
    Wenn du den ganzen Code haben möchtest, der ist im Tutorial im Forum zu suchen.

    Hier mal den Code für das schieben:
    Felsbrocken schieben.rar

    Gruss Drachen