speed=pixel = Objekte überspringen

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

  • speed=pixel = Objekte überspringen

    Ein großes Hallo!

    So, nehmen wir mal an:

    Ich habe einen 8x8px Ball und eine 32px dicke wand.
    Der Ball hat ein speed von (übertrieben) 64.
    Das heißt also er überspringt immer 64pixel pro step.
    Und so überspringt er die Wand oder landet genau auf sie.
    Aber wie geht das, dass der Ball schnell wie 64speed ist, aber trotzdem ein px nach dem anderen wandert. Aber ohne den raum-speed zu verändern.
    Oder sowas ähnlichen.
    Einfach das der Ball, egal wie schnell, exakt bei der Kante der Wand abaufprallt.

    Ich hoffe ihr versteht was ich meine,.....
    57 6F 77 2C 20 64 61 73 20 68 61 73 74 20 64 75 20 67 61 6E 7A 20 61 6C 6C 65 69 6E 20 67 65 73 63 68 61 66 66 74 2E 20
  • Evtl kannst du erstmal in jedem Step collision_check_line(x,y,xprevious,yprevious,...) machen. Wenn dabei rauskommt, dass du irgendwomit kollidierst dann soll er stoppen.
    Im kollisionsevent mit der Wand kannst move_outside_solid(32,direction+180) verwenden.

    Ich denke mal, das sollte so funktionieren. Probiers aus;)
  • ich verstehe das problem nicht mach doch einfach eine schleife
    wenn du willst das er immer nur ein pixel springt

    GML-Quellcode

    1. for ( i = 0; i < 64; i = i + 1)
    2. {
    3. x= x + 1 * sin(degtorad(direction)
    4. y= y - 1 * cos(degtorad(direction)
    5. //hier die kollisionsabfrage weis ich gerade nicht auswendig
    6. //glaube so
    7. if(collision_point(x,y,all,true,true)== true)
    8. {
    9. break;
    10. }
    11. }
    Alles anzeigen

    ps: wens mehr sein soll einfach die 1 mit einer beliebigen zahl ersetzen.
    sin und cos könnten auch vertauscht sein probers es einfach aus
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%

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

  • 600 roomspeed 8o 8o 8o
    das will ich sehen wie das spiel läfut wenn sich da ein par objekte bewegen.
    Ich denke eine schleife wäre besser, den wenn man den roomspeed erhöhen würde dann würden das gesamte spiel viel öfter durchlaufen was mehr als nur unötig ist.

    Wenn ich aber eine schleife mache läuft er nur den teil in der schleife öfters durch.
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%
  • Baue eine Abfrage ein:

    GML-Quellcode

    1. for (i = 0; i <= speed;i += 1)
    2. {
    3. if !instance_place(x + 1,y + 1,*Wand-Objekt*) = noone
    4. {
    5. x += 1
    6. y += 1
    7. }
    8. }


    Kann sein, dass ich da falsch liege, probiere es einfach mal aus...

    €dit: Vergiss es... war Blödsinn.
    Dieser Beitrag ist Spam.
    | |
    | |
    \. ./
    \/

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von F.S. ()

  • collision_line misst doch nur eine linie und der ball ist 8x8 pixel.

    das heist man braucht acht collision_lines.

    ob das so viel schneller ist als meine lösung.

    ps:

    ist es überhaupt möglich einen roomspeed von 600 einzustellen?
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%
  • Original von bigmek
    collision_line misst doch nur eine linie und der ball ist 8x8 pixel.
    das heist man braucht acht collision_lines.

    Wieso? Du setzt einfach x und y und den vorherigen x-und y-Wert ein (am besten manuell, xprevious verhält sich nicht immer so, wie du erwartest). Wenn collision_line eine Kollision anzeigt, hat der Ball eine Wand durchquert.
    Original von bigmek
    ist es überhaupt möglich einen roomspeed von 600 einzustellen?

    Du kannst... über 9000 einstellen.
  • ja aber collision line misst doch nur einen strich von einen pixel breite der ball ist aber 8 pixel breit


    das plus zeigt die collision_line

    Der ball ist das ding ganz rechts
    ---------------------------------------------------------------- _____
    ---------------------------------------------------------------/ *****\
    +++++++++++++++++++++++++++++++| ******|
    ---------------------------------------------------------------\_____/

    das beispiel zeigt das die collision_line keine kollision meldet da sie dünn genug ist durch das rohr zu pasen.
    der ball aber dürfte da nicht durchpassen.

    ps:

    9000 8o 8o 8o 8o 8o 8o
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%

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

  • Oh, gut erkannt. Mein Fehler.
    Das macht es aber nur unwesentlich komplizierter: Da die Wände niemals duenner sein werden als der Ball, braucht man nur zwei Abfragen - die beiden Kanten des Balls, die auf einer Geraden liegen die rechtwinklig zur Flugbahn liegt.

    Um diese Punkte zu berechnen hilft dir lengthdir_x und y, worauf ich aber nicht weiter eingehen werden - immerhin handelt es sich um den Bereich für fortgeschrittene User. :P
  • Aber auch mein fehler da man ja nicht 8 braucht sondern nur 2

    Obwohl was passiert wenn der ball direkt auf die kannte fliegt, dan steckt er ein stück in der Kante
    also braucht man auch in der mitte eine collision_line.

    allso 3
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%
  • wenn es eine Quadratische wand ist hat sie ecken mit 90 % und da kann der ball in der ecke stecken, auch wenn man es bei 8 pixeln nicht wirklich sehen wird.

    an der kante ist die wand ganz und garnichtmehr groß
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%
  • Original von MewX
    und den room_speed auf einen Wert über 60 zu stellen ist sittenwidrig und gehört verboten.


    Unter 60 sollte man nicht einstellen.
    Aber room speed 70,72 oder 75 ist völlig in Ordnung.
    Bei room speed 600 muss der Computer auch alles 10 mal so oft berechnen und es fängt schnell an zu ruckeln!
  • Original von battlegorge
    Original von MewX
    und den room_speed auf einen Wert über 60 zu stellen ist sittenwidrig und gehört verboten.


    Unter 60 sollte man nicht einstellen.
    Aber room speed 70,72 oder 75 ist völlig in Ordnung.
    Bei room speed 600 muss der Computer auch alles 10 mal so oft berechnen und es fängt schnell an zu ruckeln!

    Du verwechselt Berechnen mit Zeichnen. Es geht um die Bilder pro Sekunde, und mehr als 60 den Game Maker in einer Sekunde zeichnen zu lassen zwingt ihn zu sehr in die Knie. Spiele kommen problemlos mit 30 oder 60 Frames aus. Viel mehr vermag das menschliche Auge eh nicht zu sehen.
    Man kann natürlich eine Engine schreiben, die nur jedes zweite Frame zeichnet... es ist aber denke ich eleganter, bei schnellen Spielen die Zwischenkollisionen zu berechnen, wie hier auch.
  • Auf jedenfall sieht ein Spiel am flüssigsten aus, wenn die fps identisch mit der monitor refresh rate sind. ;)
    Das mit dem menschlichen Auge habe ich schon öfter gehört, aber das ist Quatsch.
    In der Realität ist es vielleicht so aber der Computer funktioniert etwas anders, sodass man den Unterschied zwischen 30 und 60 fps direkt sieht.