mit distance to object klappt das nicht so ganz,gibt es dafür einen besseren script
gegner soll sich nach rechts wenden wenn ich hinter ihm bin
- GM 8
Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen
-
-
Wie wäre es mit: read_gm_help(), use_brain() oder learn_gml() ?
Eine Möglichkeit wäre per place_meeting zu prüfen, ob sich der Spieler an einer bestimmten Stelle (in diesem Fall hinter dem Gegner) befindet.
Die andere wäre mit point_direction den Winkel zum Gegner zu berechnen (vorausgesetzt der Spieler ist nah genug dran -> point_distance), wodurch sich dann eben ergibt, ob er hinter ihm steht oder nicht.
Die Umsetzung kannst du ja mal selber probieren.
Edit: Wenn es sich bei deinem Spiel um einen Platformer handelt würde auch schon die x-Differenz reichen, um den Abstand zum Gegner und die Seite, auf der der Spieler steht (vor dem Gegner oder hinter dem Gegner) herauszufinden.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von -$Marvin$- ()
-
ich habe mir mal so ein script gemacht:
GML-Quellcode
- if distance_to_object(instance_nearest(x,y,argument0))<60
- {
- if instance_nearest(x,y,argument0).x<x and instance_nearest(x,y,argument0).y<y
- return true
- else if instance_nearest(x,y,argument0).x>x and instance_nearest(x,y,argument0).y>y
- return true
- else if instance_nearest(x,y,argument0).x>x and instance_nearest(x,y,argument0).y<y
- return true
- else if instance_nearest(x,y,argument0).x<x and instance_nearest(x,y,argument0).y>y
- return true
- else
- return false
- }
- else
- return false
argument0 ist das object was hinter dir ist
also muss du das object dem skript mit geben du kannst dann z.B. so abfragen:
script heißt: skript(also hierbei)
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
Willst du mit mir auf Discord Chatten/Quatschen?
Meine Husi's Tutorial Reihe -
gibt es keinen anderen lösung ,danke für die hilfe ,aber das ist zuviel für einen gegner der sich nur umdrehen soll
-
mach ein skript dann musst du eben nur das schreiben:
in obj_gegner
ist das denn so schwer sowas in einem skript rein zu tun?:
Spoiler anzeigen GML-Quellcode
- if distance_to_object(instance_nearest(x,y,argument0))<60
- {
- if instance_nearest(x,y,argument0).x<x and instance_nearest(x,y,argument0).y<y
- return true
- else if instance_nearest(x,y,argument0).x>x and instance_nearest(x,y,argument0).y>y
- return true
- else if instance_nearest(x,y,argument0).x>x and instance_nearest(x,y,argument0).y<y
- return true
- else if instance_nearest(x,y,argument0).x<x and instance_nearest(x,y,argument0).y>y
- return true
- else
- return false
- }
- else
- return false
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
Willst du mit mir auf Discord Chatten/Quatschen?
Meine Husi's Tutorial Reihe -
wenn dir das immernoch zu viel ist kannst du auch das "=true" wegnehmenKopiere dies in deine Signatur, um es in deiner Signatur zu haben.
Achtung: Dieser Beitrag läuft ende des Monats ab, bitte lese ihn noch vor dem Monatswechsel...
Nach langer zeit wieder im Forum aktiv -
was kommt denn bei //umdrehen rein ?
habe da sprite_index = enemyright
ich schilder mal mein problem erneut
wenn ich links vom gegner bin soll sein sprite_index = enemyleft sein
und wenn ich rechts vom gegner bin sprite_index = enemyrightDieser Beitrag wurde bereits 1 mal editiert, zuletzt von Pirat ()
-
GML-Quellcode
- var instance;
- instance = instance_nearest(x, y, argument0);
- if distance_to_object(instance) < 60
- {
- if instance.x < x and instance.y < y
- return true;
- else if instance.x > x and instance.y > y
- return true;
- else if instance.x > x and instance.y < y
- return true;
- else if instance.x < x and instance.y > y
- return true;
- }
- return false;
Hab den Code mal "verbessert" (ungeachtet davon ob er funktioniert oder nicht) und die vielen redunanten Aufrufe zu instance_nearest zwischen gespeichert.
#edit:
wenn ich links vom gegner bin soll sein sprite_index = enemyleft sein
und wenn ich rechts vom gegner bin sprite_index = enemyright
In diesem Fallen ist das recht einfach:
(In Step Event von obj_Enemy. Objektnamen anpassen)
x > obj_Player.x
enemyright
enemyleft
bzw. mit GML:
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von henrik1235 ()
-
danke ,aber es ist noch nicht fertig
habe nun
if (x > player.x)
{
sprite_index = enemyleft;
alarm[0]=200
}
if (x < player.x)
{
sprite_index = enemyright;
alarm[1]=200
}
in step event.Wollte aber mit denn alarmen noch machen das charakter sein sprite in alarm ändern also wurf animation.
in alarm klappt das nicht weil der step event das überdeckt.
und wofür war denn das andere kompliziertere code ? -
das ist klar du brauchst einfach nur eine weitere variable:
GML-Quellcode
im alarm musst du dann am ende das schreiben:
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
Willst du mit mir auf Discord Chatten/Quatschen?
Meine Husi's Tutorial Reihe