2016-10-30 2 views
0

In Game Maker gibt es diese KI, in der ich zu entwerfen versuche ... Diese KI wählt abhängig von der Entfernung, welches Objekt zuerst schießen soll das Objekt davon entfernt. Dieses AI-System berechnet jedoch nicht nur die Entfernung eines Objekts, sondern berechnet auch die Entfernung mehrerer Objekte. Daher: instance_nearest funktioniert nicht, weil es nur verwendet werden kann, um den Abstand eines spezifischen Objekts zu berechnen.Spielmechaniker: Wie man einen Feind erhält, um zu wählen, welches Objekt zuerst erschießt:

Hier ist der Code:

if object_exists(E_soldier_AI){ 
    if(distance_to_object(E_soldier_AI) < global.Dis){ 
     var t1 = instance_nearest(x,y,E_soldier_AI).x; 
     var t2 = instance_nearest(x,y,E_soldier_AI).y; 
     instance_create(t1 ,t2, NB); 
    } 
} 
if object_exists(E_soldier_AI2){ 
    if(distance_to_object(E_soldier_AI2) < global.Dis){ 
     var t1 = instance_nearest(x,y,E_soldier_AI2).x; 
     var t2 = instance_nearest(x,y,E_soldier_AI2).y; 
     instance_create(t1 ,t2, NB3); 
    } 
} 
if object_exists(E_soldier_AI3){ 
    if(distance_to_object(E_soldier_AI3) < global.Dis){ 
     var t1 = instance_nearest(x,y,E_soldier_AI3).x; 
     var t2 = instance_nearest(x,y,E_soldier_AI3).y; 
     instance_create(t1 ,t2, NB4); 
    } 
} 
if object_exists(ETank_AI){ 
    if(distance_to_object(ETank_AI) < global.Dis){ 
     var t1 = instance_nearest(x,y,ETank_AI).x; 
     var t2 = instance_nearest(x,y,ETank_AI).y; 
     instance_create(t1 ,t2, NB2); 
    } 
} 

Dieser Code wird nicht auch "es geschnitten", weil der Code scheint nur, wenn zu überprüfen Objekt E_soldier_AI vorhanden ist, und die Befehle unter der "if" Anweisung, aber es berücksichtigt nicht die anderen "if" -Anweisungen danach ...

Antwort

0

Ich bin nicht 100% sicher, was ich will und nicht mit GameMaker vertraut bin. Von meinem Verständnis her wollen Sie jedoch die Entfernungen der verfügbaren Feinde analysieren und den nächsten zum Angriff auswählen.

versuchen, etwas wie folgt aus (teilweise Pseudocode):

var closestDistance = 5000, closestT1, closestT2, closestEnemy; 
if object_exists(E_soldier_AI){ 
    if(distance_to_object(E_soldier_AI) < global.Dis){ 
     closestDistance = distance_to_object(E_soldier_AI); 
     closestT1 = instance_nearest(x,y,E_soldier_AI).x; 
     closestT2 = instance_nearest(x,y,E_soldier_AI).y; 
     closestEnemy = NB; 
    } 
} 
if object_exists(E_soldier_AI2){ 
    if(distance_to_object(E_soldier_AI2) < closestDistance){ 
     closestDistance = distance_to_object(E_soldier_AI2); 
     closestT1 = instance_nearest(x,y,E_soldier_AI2).x; 
     closestT2 = instance_nearest(x,y,E_soldier_AI2).y; 
     closestEnemy = NB3; 
    } 
} 
if object_exists(E_soldier_AI3){ 
    if(distance_to_object(E_soldier_AI3) < closestDistance){ 
     closestDistance = distance_to_object(E_soldier_AI3); 
     closestT1 = instance_nearest(x,y,E_soldier_AI3).x; 
     closestT2 = instance_nearest(x,y,E_soldier_AI3).y; 
     closestEnemy = NB4; 
    } 
} 
... (Do the same for the tank) 
instance_create(closestT1 ,closestT2 , closestEnemy); 

(Der nächste Schritt ist, alle Feinde in ein Array zu setzen und eine Schleife statt)

Verwandte Themen