Objekt soll anderes Objekt verfolgen

  • GM 7

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

  • Objekt soll anderes Objekt verfolgen

    Quellcode

    1. if distance_to_object(obj_player)>=500
    2. {
    3. mp_potential_step(obj_player.x,obj_player.y,10,false)
    4. }


    also den Code hab ich ja schon, dass der Gegner mich verfolgt, wenn ich mehr als 500 pixel von ihm weg bin, jetzt soll er mich aber erst verfolgen, wenn ich vorher schon einmal weniger als 500 pixel weg war und dann wieder weiter weg geh, erst dann soll er mich verfolgen.

    Ich hoffe, ihr habt das so verstanden und könnt mir helfen, danke.

    PS: und kann man es machen, dass sich das Sprite dreht, also mit der Lite version oder geht das nur mit der pro.

    Gruß Stefan
    Gruß Gamer
  • Okay sorry, also nochmal:

    Ich hab ein obj_player und ein obj_enemie und wenn der Player dem Enemie zu nahe kommt (näher als 500 pixel) dann schiesst er auf den Player. Das ist schon so programmiert.
    Nun soll der Enemie aber den Player verfolgen, sobald der Player wieder wegläuft, dafür hab ich den oberen Code, aber der verfolgt ihn gleich zu beginn obwohl der Player noch nicht näher als 500 pixel an ihm dran war.
    Er soll aber erst verfolgt werden, wenn er schon einmal näher als 500 pixel war, dann aber wie weiter weggegangen ist, hoffe, dass das so verständlich ist

    und kann man mit GM7 Lite irgendwie die Sprites drehen lassen, also dass meine Figuren immer in die Richtung schauen wo sie auch hinschießen.

    Danke
    Gruß Stefan


    edit: achja, mir isch noch was eingefallen:

    Ich mach grad ein Zweispieler-Shooter und da brauch ich halt für beide Spieler eine eigene Healthbar, also 2 stück, wie geht das mit 2?
    Gruß Gamer

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

  • Ok danke, werd ich mal versuchen aber in welchem Event muss ich die Variable erstellen, im create event vom onj_enemie????!!!???

    und dann hab ich noch ein kleines Problem, vllt auch größeres :D :

    Ich mach ja wie gesagt ein Twoplayer-Shooter und der Gegner schiest mit diesem Code automatisch auf den obj_player wenn er weniger als 500pixel weg ist:

    Quellcode

    1. //Createvent:
    2. schussmoeglich=1
    3. //Step-Event:
    4. if distance_to_object(obj_player)<=500
    5. if schussmoeglich=1
    6. {
    7. instance_create(x,y,obj_bullet)
    8. schussmoeglich=0
    9. alarm[0]=15 //In 15 Steps soll es wieder schießen können
    10. }
    11. //Alarm0-Event:
    12. schussmoeglich=1
    Alles anzeigen



    Nun soll aber entweder obj_player oder obj_player2 oder keiner abgeschossen werden.
    Wenn beide weiter als 500px weg sind, soll keiner abgeschossen werden.
    Wenn einer näher als 500px von obj_enemie entfernt ist, soll derjenige dann abgeschossen werden.
    Wenn beide näher als 500px von obj_enemie entfernt sind, soll derjenige abgeschossen werden, der näher ist.

    Ich kann das coden überhaupt nicht, lediglich wenn sie dann da stehen, kann ich mir manchmal zusammenreimen was es bedeutet, aber auch nicht immer.

    Hoffe ihr könnt mir auch noch da helfen.

    Danke,
    Gruß Stefan
    Gruß Gamer
  • Das Ganze würde ungefähr so gehen:

    obj_enemy schrieb:

    GML-Quellcode

    1. //Create:
    2. shotable=true;
    3. //Step:
    4. if (distance_to_object(obj_player)<=500 or
    5. distance_to_object(obj_player2)<=500)
    6. if (shotable=true)
    7. instance_create(x,y,obj_bullet);
    8. shotable=false;
    9. alarm[0]=15;
    10. //Alarm 0:
    11. shotable=true;
    Alles anzeigen

    obj_bullet schrieb:

    GML-Quellcode

    1. //Create:
    2. if (distance_to_object(object_player)<distance_to_object(object_player2))
    3. move_towards_point(obj_player.x,obj_player.y,10);
    4. else
    5. move_towards_point(obj_player2.x,obj_player2.y,10);


    NitroGame entertainment
  • Ok, danke.
    Aber jetzt schiesst er gar nicht mehr und hab mal ne Frage:

    Wie macht man "set variable" und "test variable" in GML???


    komisch: so weit ich die lesen kann, sind sie aber richtig
    Gruß Gamer

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

  • set variable: variablenname=wert;
    test variable: if (variablenname==value){ aktion}else{ aktion }
    steht aber alles in Windapples GML Tutorial
    Edit: Man kann sowohl = als auch == zum testen nehmen, ich persönlich
    bevorzuge allerdings ==, weil das in vielen anderen Programmiersprachen
    auch für logische Ausdrücke benutzt wird.
    ___________________________________________________________
    Beware of wild pointers
    ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____

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

  • Spellmaker schrieb:

    set variable: variablenname=wert;
    test variable: if (variablenname==value){ aktion}else{ aktion }
    steht aber alles in Windapples GML Tutorial
    Hey danke, aber bei dem wo ich jetzt fettgedruckt hab, müssen da zwei Gleichzeichen stehen oder so wie von NitroGame nur 1.
    Naja, probiers mal mit 2, vllt ist das der Fehler

    edit: ne funktioniert net, siehst du den Fehler von seinem Code??
    Gruß Gamer
  • Du musst wissen, so ziemlich jede Programmiersprache basiert auf Variablen, so auch GML. Fast alles, was du in diesen Codes siehst, sind Variablen. obj_player2.x ist eine Variable. shotable ist eine Variable.
    Und diese definiert man mit dem Gleichehitszeichen: =
    Zum Beispiel:

    GML-Quellcode

    1. other.y=34;//other.y ist eine Variable. 34 ist der Wert.
    2. //So testet man also:
    3. if (<Variable><Kleiner, Größer oder Gleichheitszeichen><Wert>)
    4. <Befehl>(<Werte, mit Kommata getrennt>);//Aber auch hier musst Du nicht unbedingt einen Befehl einsetzen, sondern kannst genauso eine Variable setzen.

    Aber Achtung: Nicht jedem Variable ist ein integer- (Zahlen-) Wert. Eigene Variablen sind standardmäßig integer-Werte. Wenn sie etwas anderes sein sollen, zum Beispiel ein string (Zeichenkette), musst Du das definieren:

    GML-Quellcode

    1. name=string('The Gamer');

    Und so kann man Variablen zeichnen:

    GML-Quellcode

    1. draw_text(x,y,string(<Variable>));//Wichtig hierbei ist, die Variable ohne Anführungszeichen zu schreiben!

    NitroGame entertainment
    Edit: Verdammt zu spät

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

  • Nein, hab doch geschrieben, dass er nicht mehr schiesst der Gegner, also bleibt einfach stehen und wenn ich mit dem player näher komme, schiesst er auch nicht und hab noch ne Frage, was ist eig. mit then, muss man das nicht auch in die Codes nach dem if... kommt dann nicht then...????
    Gruß Gamer
  • OK, ich habe den Fehler entdeckt. Es liegt am shotable.
    Weil ich die Befehle

    GML-Quellcode

    1. instance_create(x,y,obj_bullet);

    und

    GML-Quellcode

    1. shotable=0;

    direkt hintereinander geschrieben habe, hat er sie beide gleichtzeitig ausgeführt, und deshalb konnte er nich schießen.
    Du kannst das Ganze lösen, indem du den GM die beiden befehle hintereinander ausführen lässt, also so:

    GML-Quellcode

    1. //Step Event:
    2. {
    3. if (distance_to_object(obj_player<=500 or
    4. distance_to_object(obj_player2)<=500)
    5. if (shotable=1)
    6. {
    7. {
    8. instance_create(x,y,obj_bullet);
    9. }
    10. {
    11. shotable=0;
    12. }
    13. {
    14. alarm[0]=15;
    15. }
    16. }
    17. }
    Alles anzeigen


    NitroGame entertainment
  • Der Gm führt das dann nicht gleichzeitig aus. Aber wenn du ein if verwendest und das false ist, dann wird nur der 1. Befehl hinter dem if nicht ausgeführt, es sei denn du nimmst geschweifte Klammern.

    GML-Quellcode

    1. //Step Event:
    2. {
    3. if (((distance_to_object(obj_player<=500)) || (distance_to_object(obj_player2)<=500)) && (shotable=1))
    4. {
    5. instance_create(x,y,obj_bullet);
    6. shotable=0;
    7. alarm[0]=15;
    8. }

    So müsste es richtig sein.
  • Hey, danke, das klappt jetzt
    aber mein eig. Problem war ja das mit dem verfolgen und hab grad mein ersten erfolgreichen Code "gecodet", wenn er auch net so groß war, hier

    Quellcode

    1. if distance_to_object(obj_player)<=500
    2. follow=1;
    3. if distance_to_object(obj_player)>=500
    4. if (follow=1)
    5. mp_potential_step(obj_player.x,obj_player.y,10,false)


    und der klappt sogar.
    Jetzt wollt ich nur wissen wie das geht, dass der Gegner einen Bogen um solide Objekte macht, selber einbauen würd ich gerne selber versuchen.


    Danke.
    Gruß Stefan


    edit: hab noch ne Frage:

    Ich hab mir das GML Tutorial für Anfänger mal angeschaut und wollte jetzt mal einen passwortgeschützen Bereich selber programmieren, den Code hab ich benutzt und zwar ins Space-Event, also dass bei Druck der leertaste ein Fenster kommt.

    Quellcode

    1. {
    2. var passwort;
    3. passwort = get_integer("Bitte Passwort eingeben","Hier eingeben");
    4. if (passwort != "qwertz")
    5. show_message("Zugriff verweigert");
    6. else
    7. show_message("Zugriff gestattet");
    8. }


    Das Fenster kommt, ich kann auch was eingeben, aber ob ich "qwertz" oder etwas anderes eingebe, es kommt immer dieser Error:
    ___________________________________________
    ERROR in
    action number 1
    of Keyboard Event for <Space> Key
    for object object0:

    Error in code at line 5:
    if (passwort != "qwertz")

    at position 18: Cannot compare arguments.

    PS: Coden macht richtig Laune, vor allem wenn es dann funktioniert.


    edit2: achso das integer kann nur Zahlen oder, wie macht man das mit "Worten" oder eben anderen Zeichen als Zahlen??

    edit3: man schon bei 3 edits, habs aber selber rausgefunden, geht mit get_string, mein eig. Problem ist oben fettgedruckt.
    Gruß Gamer

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