Random in einem bestimmten abstand

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

  • Random in einem bestimmten abstand

    Sry wenns das Thema schon gibt, ich habe es auch gedacht aber nichts in der Suche gefunden.

    Wie kann ich es machen, das ein object random erstellt wird aber nur in einem bestimmten Abstand zu einem anderen.

    z.B. Das object "ersteller" erstellt objecte an eine zufälligen ort. Die objecte dürfen aber höchstens den Abstand <= 300 zu dem anderen object haben.

    schonmal danke für Antworten und sry wenns ein bisschen unverständlich Vormuliert ist.Bin noch ein zimlicher Anfänger.
  • ich denk das sollt man mit ner schleife regeln...ich hab meine zwar jetz nicht ausprobiert sollt aber funktionieren :)

    GML-Quellcode

    1. a=random(room_width)
    2. b=random(room_height)
    3. whlie (point_direction(x,y,a,b)>300)
    4. {
    5. a=random(room_width)
    6. b=random(room_height)
    7. }
    8. instance_create(a,b,obj)


    €dit: hatte noch nen kleinen fehler drin :S
  • Die Abbruchbedingung einer Schleife sollte nie vom Zufall abhängen wie das bei JOhannski's Lösung der Fall ist, denn solche Algorithmen nennt man nicht terminierend, da sie theoretisch unendlich lange laufen können. In der Praxis werden sie dies zwar kaum tun, aber die Ausführungszeit ist dennoch zufällig. D.h. könnte auch ein paar Sekunden dauern. Folgende Lösung umgeht das Problem:

    GML-Quellcode

    1. var d, r;
    2. d = random(360);
    3. r = sqrt(random(1))*200; // 200 ist der gewünschte maximale Radius
    4. instance_create(x+lengthdir_x(d,r),y+lengthdir_y(d,r),obj); // obj durch den Namen deines Objekts ersetzen


    Den Code musst du an die Stelle, an der das zufällige Objekt erstellt werden soll, schreiben, und zwar in das Objekt, in dessen Umgebung das Objekt erstellt werden soll. Also mit "Execute a piece of code".
  • in dein objekt erstell objekt

    in dem ensprechendenen event:

    execute a peace of code:


    maxdist=deine_maximale_distanz // zb 300


    prevx=random(room_width)
    prevy=random(room_height)

    for(i=0;i<deine_anzahl_der_zu_erstellenden_objekte;i+=1)
    {

    dir=random(360)
    newx=prevx+lengthdir_x(random(maxdist*2)-maxdist,dir)
    newy=prevy+lengthdir_y(random(maxdist*2)-maxdist,dir)
    instance_create(dein_zu_erstellendes_objekt,newx,newy )

    prevx=newx
    prevy=newy
    }




    alles was rot ist, musst noch für deinene eigenen gebrauch verändern.
    "das war meine letzte flamewar PM an dich ."