collision_point Frage.

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

  • collision_point Frage.

    Hallo.


    Ich habe eine Mauer, und dadrauf möchte ich nichts bauen können:

    das klappt so:

    GML-Quellcode

    1. if !collision_point(xx,yy,wand,1,0)
    2. { instance_create(xx,yy,haus1);


    das funktioniert auch super, damit kann ich kein haus auf die wand bauen, doch wenn ich jetzt einen menschen habe der in der map langläuft, kann ich einfach auf ihn das haus bauen und dann bleibt der mensch drin hängen.

    ich würde gerne so eine art "grüne/rote" markierung um mein object haben, wenns gebaut werden kann dann grün, else rot

    aber hauptproblem ist; dass ich auf den Menschen direkt bauen kann. wenn ich auf die wand bauen will funktionierts nicht, wegen dem code.
    habe schon ein wenig rumprobiert und versucht es mit else zu lösen aber erfolgslos.
    (if !collision_point(xx,yy,wand,1,0)
    { instance_create(xx,yy,haus1);
    else
    if !collision_point(xx,yy,guy,1,0)
    { instance_create(xx,yy,haus1);



    ps. ich würde es gerne so machen dass guy = parent
    und guy1 / guy2 / guy3 etc sind dann die children vom 'guy'

    bitte um Hilfe :(


    Grüße...




    edit; kleine Nebenfrage; ist es möglich irgendwie es einzustellen dass ich ab einer bestimmten x,y, nicht mehr aufs Grid "bauen" kann? (so dass ich im Inventar keine häuser bauen kann) :)

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

  • ich hoffe ich habe das richtig verstanden:

    Das verhindert dass das Haus auf einer Mauer oder auf einem Menschen erstellt wird.

    GML-Quellcode

    1. if(!collision_point(xx,yy,wand,1,0))
    2. &&(!collision_point(xx,yy,guy,1,0))
    3. {
    4. instance_create(xx,yy,haus1)
    5. }


    Das zeichnet das Rechteck:

    Im draw-event

    GML-Quellcode

    1. if(!collision_point(xx,yy,wand,1,0))
    2. &&(!collision_point(xx,yy,guy,1,0))
    3. {
    4. //Grüne Markierung
    5. }
    6. else
    7. {
    8. //Rote Markierung
    9. }

    © 2008 by Teamgrill Productions
  • Habs so eingebaut; funkioniert aber nur bei der der wand; -> ich kann immernoch auf guy1/guy2 etc bauen :(


    habs so gemacht:


    GML-Quellcode

    1. if !collision_point(xx,yy,wand,1,0)
    2. &&!collision_point(xx,yy,guy,1,0)
    3. { instance_create(xx,yy,haus1); }


    ?(


    edit:

    ich habe bei dem "guy" obj; nichts zu stehen, kein event etc.. es ist nur das parent, dies muss ich ja nicht zu dem grid hinzufügen oder? <- vllt liegt darin der fehler? oO

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

  • ttothef schrieb:

    Habs so eingebaut; funkioniert aber nur bei der der wand; -> ich kann immernoch auf guy1/guy2 etc bauen :(
    ich habe bei dem "guy" obj; nichts zu stehen, kein event etc.. es ist nur das parent, dies muss ich ja nicht zu dem grid hinzufügen oder? <- vllt liegt darin der fehler? oO


    Leider weiß ich überhaupt nicht was du meinst, da es das erste mal ist dass du irgendein Grid erwähnst.

    © 2008 by Teamgrill Productions
  • Lads hoch, ich(und ich denke, die anderen ebenfalls) versteh nicht so wirklich, wie dus meinst.
    Collision_point hat jedenfalls nichts mit mp_grid zu tun..
    "das war meine letzte flamewar PM an dich ."
  • Na es war ja auch nur eine Frage ob es was mit dem Grid zu tun hat, von daher danke für die Antwort ;) :) ;


    es funkioniert mit dem Code nicht:

    GML-Quellcode

    1. xx=(floor(mouse_x/24)*24)
    2. yy=(floor(mouse_y/24)*24)
    3. if !collision_point(xx,yy,wand,1,0)
    4. &&!collision_point(xx,yy,guy,1,0)
    5. { instance_create(xx,yy,haus1); }



    das &&!collision_point(xx,yy,guy,1,0) wird irgendwie nicht gezählt, ich kann auf guy1 noch das haus bauen; aber guy1/guy2 etc haben alle "guy" als parent obj...
  • ttothef schrieb:

    Na es war ja auch nur eine Frage ob es was mit dem Grid zu tun hat, von daher danke für die Antwort ;) :) ;


    es funkioniert mit dem Code nicht:

    GML-Quellcode

    1. xx=(floor(mouse_x/24)*24)
    2. yy=(floor(mouse_y/24)*24)
    3. if !collision_point(xx,yy,wand,1,0)
    4. &&!collision_point(xx,yy,guy,1,0)
    5. { instance_create(xx,yy,haus1); }



    das &&!collision_point(xx,yy,guy,1,0) wird irgendwie nicht gezählt, ich kann auf guy1 noch das haus bauen; aber guy1/guy2 etc haben alle "guy" als parent obj...


    Probier mal das:

    GML-Quellcode

    1. xx=(floor(mouse_x/24)*24+12)
    2. yy=(floor(mouse_y/24)*24+12)
    3. if !collision_point(xx,yy,wand,1,0)
    4. &&!collision_point(xx,yy,guy,1,0)
    5. { instance_create(xx,yy,haus1); }

    © 2008 by Teamgrill Productions
  • Ist einfach... ;)
    Das Problem ist einfach, dass wir nicht genau wissen, wie du es haben möchtest.

    collision_point fragt einen Punkt(einen eizigen Punkt, einen Pixel!) nach einer Kollision ab ->
    Eher suboptimal für dein Anliegen.
    Schau dir mal die ganzen Kollisions-Check Funktionen an(Die integrierte Dokumentation ist echt gold wert, find ich) und such dir was raus ;)
    Vielleicht wären Dinge wie place_free oder collision_rectangle eine Variante.

    Also entweder du lädst die gmk hoch, du beschreibst dein Problem genauer(ohne den Code, einfach das, was du erreichen möchtest), jemand anderes kann dir besser herlfen, oder dein Problem ist hiermit gelöst :)
    "das war meine letzte flamewar PM an dich ."
  • Hab jetzt ein Bsp hochgeladen;


    mein Problem ist; ich bekomme es nicht hin, dass ich monster1 zB nicht auf monster2 bauen kann (und auch auf die Wand nicht)..

    ..also am besten wäre es ja dann mit all_monster (das parent obj) dass ich darauf nicht bauen kann, und halt auch nicht auf die Wand !


    Weiß jemand wie das gehen sollte? 8|
    collisionFrage.rar
  • if !collision_point(xx,yy,wand,1,0)&&!collision_point(xx,yy,all_monster,1,0)
    {
    instance_create(xx,yy,monster2);
    }
    "das war meine letzte flamewar PM an dich ."
  • Hast du es mal selber eingebaut?;)


    ...Ich habe nochmal das example überarbeitet um es deutlicher zu machen, mit dem haus1 etc... habe jetzt monster1 zwar nicht dupliziert (für guy1/2/3 etc) aber es gilt ja eh als all_monster;parent



    collisionFrage.rar





    Man kann auf den monster1 das haus1 noch raufbauen (klappt wenn der code mit &&!collision_point(xx,yy,all_monster,1,0) geändert ist, doch mit dem code; funktioniert manchmal die Weg_Block funktion nicht mehr! - Ohne den Code funktioniert das Block_system prima)


    und, weißt du noch weiter? :huh:

    ps, thx für deine Hilfe bis jetzt..




    edit;


    wenn ich 5 Gold pro 30 sekunden bekomme; für ein haus1, dann wäre es praktisch wenn ich haus1 auch nicht auf haus1 bauen kann. aber das müsste funktionieren, wenn der code:&&!collision_point(xx,yy,all_monster,1,0) ordentlich funktioniert..

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

  • Ich habe zwar eine Verwarnung für Doppelposting, aber es wäre unsinnig, wenn ich dafür deleted werde, weil ich einen nicht beantworteten thread (welcher schon älter ist) wieder hochpushe und noch ein Tip/Frage dazu gebe.



    Ich habe es jetzt mit

    if !collision_circle(xx,yy,12,wand,1,0)
    && !collision_circle(xx,yy,12,all_monster,1,0)

    probiert, aber weiß nicht wirklich wie das funktioniert, mit dem collision_circle.... kann mir das jemand ein bisschen erklären wie es damit gehen müsste?

    :) :)
    Grüße...
  • collision_circle(xc,yc,radius,obj,prec,notme)Diese
    Funktion prüft, ob eine Kollision zwischen dem (gefüllten)
    Kreis mit Kreismittelpunkt an Position (xc,yc) mit gegebenem Radius und
    Instanzen des Objektes obj vorliegt. Beispielsweise kannst du damit
    überprüfen, ob ein Objekt dicht an einer bestimmten Stelle
    liegt.
    On teh internet u pwn noobs - but in real life noobs own you.
  • Ich denke mal schon dass man ab über einer Woche nicht mehr als DoublePosting bezeichnet wird...:o


    .........ich finds komisch dass mir keiner erklären kann wie das mit dem collision_circle funktioniert...

    mit collision_point kann ich ja nur 1 pixel abchecken, aber ich würde gerne 24 pixel abchecken, nur veersteh ich das nicht mit dem circle !!!! :huh:
  • Benutzer online 1

    1 Besucher