Alternativ zu "instance_nearest"?

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

  • Alternativ zu "instance_nearest"?

    Ich habe ein Spielfeld mit 20X20 schwarzen Platten. Die Platten haben eine Variable "color", die auf 1,2 oder 3 gesetzt werden kann.

    (1=schwarz,2=rot,3=Gelb). Das ganze ist Top-Down und der Bot soll nun übers Spielfeld laufen, und alle Platten Gelb färben (der Spieler

    färbt sie Rot). => der Bot soll alle Platten, die nicht Gelb (also Rot oder Schwarz) sind Gelb färben, indem er drüber läuft (zusätzlich alle

    anderen Spieler umfahren). Ürsprünglich wollte ich das so machen:

    GML-Quellcode

    1. if search=true {
    2. fe=instance_nearest(x,y,Feld)
    3. search=false }
    4. else if search=false {
    5. mp_potential_step_object(fe.x,fe.y,6,obj_Spieler)
    6. if position_meeting(fe.x,fe.y,self) { search=true }
    7. }
    Alles anzeigen

    Aber er fährt dann immer nur von einem Feld zum andern (also zum 1.Feld, zum 2.Feld, zum1., zum 2., zum 1., usw.)
    Wie kann ich machen, dass er nur zu dem nächsten, nicht gelben Feld läuft?

    Magical dream time!
  • Ich glaub am einfachsten wäre es, wenn du nicht eine Variabele für die Farben nimmst, sondern
    eigenständige Objekte. Dann kannst du nämlich instance_nearest verwenden.
    Soul Reaver meint (wenn ich das richtig verstanden hab) das du einfach alle Platten auf
    Farbe und Position überprüfst. Im kleinen funktioniert das gut, aber bei einer größeren
    Fläche dürfte das alles ziemlich verlangsamen.
    ___________________________________________________________
    Beware of wild pointers
    ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____
  • Bei deinem jetzigem Code wird ja nur das nahste Feld gesucht und die Farbe gar nicht beachtet. Deswegen läuft er auch nur zwischen seinen 2 nahsten Feldern hin und her.
    Der einfachste weg, würd ich sagen, ist es für die 3 Farben 3 Objekte zu machen, wobei das schwarze (oder das rote) das jeweilige andere als parent hat. Dann kannst du es nach dem nahstem schwarzen (oder roten) suchen lassen.
  • Spellmaker schrieb:

    Ich glaub am einfachsten wäre es, wenn du nicht eine Variabele für die Farben nimmst, sondern
    eigenständige Objekte. Dann kannst du nämlich instance_nearest verwenden.
    Soul Reaver meint (wenn ich das richtig verstanden hab) das du einfach alle Platten auf
    Farbe und Position überprüfst. Im kleinen funktioniert das gut, aber bei einer größeren
    Fläche dürfte das alles ziemlich verlangsamen.
    Ich glaube, dass ich hinter der instance_nearest() funktion auch nur eine for-schleife versteckt, also würde es aufs selbe rauskommen.

    Mit TrunX' Weise geht es zwar dafür kann man den Code nicht so gut modifizieren(wenn man zb später mehr Felder einbauen will).

    Ich hätte es mir so gedacht:

    scr_instancefind()

    GML-Quellcode

    1. var feld,auswahl;
    2. for(i=0;i<instance_number(obj_feld);i+=1)
    3. {
    4. feld=instance_find(feld,i);
    5. if(feld.farbe!=farbe)
    6. {
    7. if(distance_to_object(feld)<dis)
    8. {
    9. auswahl=feld;
    10. dis=distance_to_object(feld);
    11. }
    12. }
    13. }
    14. return(auswahl);
    Alles anzeigen


    Musst halt davor die Variable "dis" auf die maximal entfernung setzen. Der script gibt die id des nähesten Feldes, das nicht die Farbe "farbe" hat, wieder. Dadurch sparst du dir einige unnötige objekte.

    © 2008 by Teamgrill Productions