Sprite irgendwo im Nirvana

  • Sprite irgendwo im Nirvana

    Hallo,
    schon hab ich das nächste Problem mit meinem PacMan - Klon. Ab dem zweiten room habe ich oben, unten und seitlich Durchgänge, durch die die Sprites von einer Seite des Rooms auf die andere Seite wechseln können. Im Outside-Room event habe ich als execute-script das outside_script von mark overmars:
    {
    if (x < 0 && hspeed < 0) x = room_width + sprite_xoffset;
    if (x > room_width && hspeed > 0) x = -sprite_width + sprite_xoffset;
    if (y < 0 && vspeed < 0) y = room_height + sprite_yoffset;
    if (y > room_height && vspeed > 0) y = -sprite_height + sprite_yoffset;
    }
    eingebunden und zusätzlich auch die "wrap when outside"-funktion. Nun habe ich das Problem, dass die Sprites zwar brav von einer Seite auf die andere wechseln, aber wenn man zum Ausgang rausgeht und drückt irgendeine Richtungstaste, bevor er auf der anderen Seite wieder reingegangen ist, hängt das Sprite irgendwo im Nirvana fest oder schwirrt irgendwo rum, wo keine Wand ist. Man kann sie dann nicht mehr sehen, da sie ausserhalb des Bildbereichs sind und das ist ja nicht Sinn der Sache, dass die ausserhalb des Labyrinths blöde rumschwirren.
    Würde mich riesig freuen, wenn mir jemand bei meinem Problem helfen kann. :happy:
  • ich denke das liegt daran dass du beide funktionen gleichzeitig benutzt........probiers mal nur mit einer der beiden.........

    Dragoon

    PS: schreib gamemaker code zwischen gml tags......
    (gml)
    ....code...
    (/gml)
    einfach mit eckigen klammern
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • wie währe eine abfrage ob der sprite auserhalb des bildschirm ist? wen ja dan darf man (keine) richtungstaste mehr drücken, wen nein dan kanst du dich bewegen. (die abfrage so das man wen man rechts/links auserhalb ist nur keine up/down keys und andersrum, sonst komst du nichtmeher rein).
    :) Nobody is perfect (-:

    "Dummköpfe sind Denkerköpfen weit überlegen. Zahlenmäßig." Ernst Ferstl
  • Nirvana? Who killed Kurt Cobain?

    Probiers mal mit folgendem code:

    GML-Quellcode

    1. if (x < 0) x = room_width + sprite_xoffset;
    2. if (x > room_width) x = -sprite_width + sprite_xoffset;
    3. if (y < 0 ) y = room_height + sprite_yoffset;
    4. if (y > room_height) y = -sprite_height + sprite_yoffset;


    ich weiß nähmlich nicht, was die hspeed und vspeed in der Abfrage wirklich bringen sollen... kann aber nicht garantieren, dass es so funktioniert, probier es mal aus!
  • warum eigentlich so kompliziert? wen nix mehr geht das nimm doch dieses hier:

    GML-Quellcode

    1. if x < 0 then x = room_width;
    2. if x > room_width then x = 0;
    3. if y < 0 then y = room_height;
    4. if y > room_height then y = 0;
    das klappt auf jeden fall, benutze ich in meinen games auch immer wen ich sowas brauche. hat nur den nachteil das der sprite immer erst aus dem bild seinen muss man kan also nicht die eine hälfte rechts und die andere links bzw. oben/unten sehen.
    :) Nobody is perfect (-:

    "Dummköpfe sind Denkerköpfen weit überlegen. Zahlenmäßig." Ernst Ferstl
  • Funktioniert leider auch nicht, nur habe ich auch den Eindruck, dass der Room grösser ist, als auf dem Bildschirm gezeigt. Meine Rooms sind auf 640x480 eingestellt und habe snap grid 32x32. Aber wenn ich mit der Maus auf mein letztes auf x, bzw. y befindliches Wandteil gehe, ist x bei 608 und y bei 448. Das hiesse ja, dass der eigentliche Room nur 608x448 ist, aber eingestellt 640x480. Wie kann das sein? So wäre auch klar, warum die Sprites im Nirvana verschwinden, wenn ich die Scripts so schreibe, denn er geht ja von einer Grösse 640x480 aus. Bleiben jeweils aber 32 Pixel für meinen Sprite um sich zu verdünnisieren.... ;)
    Wieso macht der GameMaker sowas und ist das normal...und wie kann ichs beheben....viele Fragen und vor allem komische, ich weiss.... ?(
  • der wert ist die linke obere ecke des feldes auf welches du zeigst -> also bei 640*480 ist es (640-32)*(480-32)=608*448 :D
    wenn du willst kannst du mir mal die datei schicken und ich gucks an... ich denke du hast irgend etwas anderes falsch gemacht...denn diese scripts müssten funktionieren

    Dragoon
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • Arghh...komme mit dem Problem einfach nicht weiter...habe sogar nochmal verglichen mit dem Example, dass schon dabei war, ich habe nichts anders und es klappt bei meinem nicht....
    Schicken wäre ja nicht so problematisch, wäre das Spiel nicht schon sehr speziell gemacht.... :D
    Ist nämliche ein Pacman - Klon für eine Studentenverbindung und deshalb schon vom Spieledesign speziell...und es ist mein erstes Spiel und deshalb isses mir ein bisschen peinlich...
    Aber nur bei mir bleiben die Sprites draussen, wenn man andere Richtungstasten drückt.... X(
    Ausserdem ist da noch die dämliche Kollisionsabfrage, die auch nicht so richtig will....sorry, muss mal bisschen Dampf ablassen, weil nix funzt, wie es soll, das Spiel könnte schon lange fertig sein.... :(
    Wenn wenigstens das mit dem outside_wrap klappen würde, das andere krieg ich auch noch hin, aber ich sag mal zu meiner Verteidigung: Frauen und Technik ;)
    Weiss nicht weiter.....
  • Huhu Sphinx,
    also das mit der Raumgröße und den "Fehlenden" Pixeln ist "normal".
    Hat Dragoon ja auch schon geschreibselt.
    Wenn du im Room auf ein Tile gehst, dann zeigt er dir ja nicht die Mauskoordinaten,
    sondern die , wo die Startwerte (x,y) deines gemousepointeten Tiles liegen.
    Bei 640 und 32 Tiles zeigt er z.B. 608 , das bezeichnet ja aber den Start des Tiles , die Breite vom letzten 32 er Tile kommt ja noch dazu.

    Was mir dazu noch einfällt ist, positioniere das Spritewechselobjekt zum Testen in Raummitte, löse den Spritewechsel mit einem Event per Knopfdruck aus (zum guggen), dann kannst du in etwa abschätzen, nach welcher Pixeldifferenz du überhaupt fandest.
    Kontrolliere doch mal das Center deiner Sprites , ist das bei allen gleich gesetzt (im Sprite Lade-Fenster kannst du das Center bestimmen, ist das bei allen gleich ??
    Wegen Kollisionsmaske, was für eine verwendest du ,
    entweder legst du die Größe der Bounding/Kollisionsbox im selben Fenster wie das jeweilige Sprite fest (Ladefenster),
    oder du erstellst ein Kollisionsobjekt (aussen schwarz in der mitte reinweiß (Kreis so groß wie dein Objekt).
    Wenn ansonsten alles gleich wie im Example zu sein scheint, bleiben doch nicht viele Möglichkeiten...
    Hoffe ist nicht zu unverständlich und auch relativ richtig was ich schrieb.
    Gruß MelkMann
    Edit by Niemand
    Spammer.....

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

  • So...ich poste nu hier mal mein game, einmal mit präziser Kollisionsabfrage, was dämlich aussieht und einmal ohne, da kann man aber komischerweise nicht in jeden Gang steuern aus irgendwelchen unerfindlichen Gründen. Irgendwas an dem game ist grundsätzlich falsch, was mich wahnsinnig macht.
    Aber bitte nicht lachen, es ist wie gesagt für eine Studentenverbindung, und ich denke, dass man den Grundgedanken nicht immer kapiert.... :)
    Hier die URL:
    Game mit Kollisionsabfrage
    Game ohne Kollisionsabfrage
    Ab dem zweiten Level kann man auch die Problematik erkennen mit dem aus dem Labyrinth hinausgehen und so, wie ich es oben beschrieben habe.
    Habe auch geschaut: Center ist bei jedem Sprite gleich: x:0 und y:0
  • :o)
    doch doch das ist mehr als eindeutig zu verstehen , alleine der Name läßt übles vermuten *rumscherz*.
    Für mich sieht das einfach so aus als wenn bestimmte Blöcke entweder eine unsaubere Maske haben , oder falsch positioniert sind.
    An bestimmte Stellen komme ich einfach nicht hin (bei beiden).
    Wäre gut, wenn du einen Knopp einbaust um in den level zu wechseln wo die Probleme sind (Level 2) , da komm ich ja nicht hin, weil ich nicht alles aufsammeln kann...
    Greetz MelkMann
    Edit by Niemand
    Spammer.....
  • Ist eingebaut....F2 drücke, kommste in den nächsten Level

    kann es sein, dass das snap to a grid damit zu tun hat, wenn das sprite mit der wand kollidiert? habe ich auch nur reingemacht, da das sprite immer an der wand hängenbleibt und nicht durch die durchgänge kommt

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

  • hmmm, die kommen aber wieder rein , dauert zwar manchmal (nicht immer),
    was machen die denn da solange?
    Komisch , wenn ich im Level 2 links oben rausgehe und gleich nach unten steuere , dann komme ich unten links raus ??
    Ich habe leider nicht soviel Plan dir zu helfen, hätte ich das Problem würde ich einen Kollisionsrahmen um das eigentliche Spielfeld legen, Raum vergrößern um 2x Tilesbreite / Höhe , dann drumrummauern,
    aber wie gesagt habe nicht so den Plan davon.

    greetz melkmann
    Edit by Niemand
    Spammer.....
  • wenn du willst kannst du mir die datei senden und ich such den fehler.....dann siehts auch nicht jeder....
    Schicken wäre ja nicht so problematisch, wäre das Spiel nicht schon sehr speziell gemacht....
    Ist nämliche ein Pacman - Klon für eine Studentenverbindung und deshalb schon vom Spieledesign speziell...und es ist mein erstes Spiel und deshalb isses mir ein bisschen peinlich...
    ich verrate nichts.....dir muss nichts peinlich sein..........wir haben alle mal ganz unten angefangen

    Xmas-Dragoon
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!