"Solid Object - Normal Object" Kollisions Problem -=[ PLEASE HELP ]=-

  • GM 6

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

  • "Solid Object - Normal Object" Kollisions Problem -=[ PLEASE HELP ]=-

    also ich habe folgendes problem und zwar mochte ich das ein normales object durch ein "solid" hindurchfliegt ohne dass es vom "solid" Object aufgehalten wird,
    Das "solid" object hat aber ein kollisions event mit dem anderen und so wird es eben immer aufgehalten wenn es durch das Solid object hinduch will,

    ich hoffe das man mich verstanden hat :) und dass es einen weg gibt das zu umgehen.

    PLEASE HELP

    ps.: das eine object muss zwingend "solid" sein und das andere muss zwingend nicht-"solid" sein.



    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von kevb0ard ()

  • Du könntest doch machen das wenn das nicht Solide Objekt durch das Soldie fliegt, das das Solide kurz nicht Solid ist, so lange sie sich berühren.
    ?( ?( ?(
    Ähm Moment, ich bin durcheinander.
    Also wenn die Objekte sich berühren, dann wird das Solide kurz nicht Solid.
  • Sag mal, benutzt du speed und direction?
    Wenn ja, nimm' doch das :

    GML-Quellcode

    1. //Create-Event
    2. dir = 0
    3. spd = 0

    GML-Quellcode

    1. //Step-Event
    2. x += lengthdir_x ( spd , dir )
    3. y += lengthdir_y ( spd , dir )

    Und statt direction nimmst du dir, und für speed nimmst du spd ;)
    Dein Problem scheint darin zu bestehen, da - soweit ich weiß - Gamemaker's speed auf der Abfrage

    GML-Quellcode

    1. if place_free ( x + lengthdir_x ( speed , direction ) , y + lengthdir_y ( speed , direction ) )
    2. {
    3. //Bewegen - Obiger Code
    4. }

    basiert ( Ja, statt lengthdir_... wird Trigonometrie ( Sinus etc. ) genommen, aber mit denen hab' ichs nicht so :P )...

    EDIT:Hainisoft, dein Vorschlag würde wohl so aussehen

    GML-Quellcode

    1. //Step-Event vom Non-Solid
    2. solid = place_meeting ( x , y , objWall ) //objWall mit dem Solid-Objekt replazieren!

    aber das hätte Nachteile - Stell' dir einen Platformer vor, wenn du zufälligerweise auf einer Platform steht, unter der zufälligerweise eine Kugel hindurchfliegt
    -Die Platform wäre nicht mehr Solid, und der Bug perfekt...
  • Wieder da :)

    so hat gedauert bis ich wieder was schreiben konnte da mein PC verreckt ist und ich mir einen etwas älteren Prozessor einbauen musste da ich grad keinen anderen da hatte ^^

    hab den vorschlag von Phoenix ausprobiert aber leider klappt das nicht richtig da sich nun das object nichtmehr bewegt (also das dass nicht solid ist). was mach ich falsch?
    es wäre toll wenn du es ein bisschen präzieser erklären könntest ^^

    :pinch: ich habs noch nicht so mit GML :pinch:


    EDIT: scheint das keiner mehr hier antworten wird aber wenn das einer liest und weis wie es geht dann bitte antworte mir du bist meine letzte hoffnung
    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :D :rolleyes: was schreib ich da nur fürn quatsch :rolleyes: :D



    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von kevb0ard ()

  • Ich verwende dafür die Funktion

    GML-Quellcode

    1. (!distance_to_object())

    Klingt komisch, aber funktioniert aus irgendeinem Grund. Man darf nur nicht bei der if-Abfrage nach einem Wert fragen. Das schaut dann so aus:

    GML-Quellcode

    1. if (!distance_to_object(Not_Solid))
    2. collision=true;
    3. else
    4. collsion= false;

    Hier noch ein Example:
    Dateien
  • Toshiro schrieb:

    Ich verwende dafür die Funktion

    GML-Quellcode

    1. (!distance_to_object())


    Klingt komisch, aber funktioniert aus irgendeinem Grund.
    klingt nicht komisch: ! bedeutet nicht. die distance_to_object funktion gibt die länge von boundingbox zum andern object an. Und wen diese nichts ist, also 0, dann ist das ifstament war! :P
  • Also dafür gibt es ja auch place_meeting(x,y,obj).

    GML-Quellcode

    1. if (place_meeting(x,y,objWall)) {
    2. // Kollision
    3. } else {
    4. // keine Kollision
    5. }
    Und dann ist da noch place_free(x,y) und place_empty(x,y), die alle soliden Objekte checken.
    Was man jetzt benutzt ist scheinbar Geschmackssache ...
    Nur damit ihr wisst, wozu die Funktionen da sind. ;)
  • Benutzer online 1

    1 Besucher