Fragen zu einem Eislevel

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

  • Fragen zu einem Eislevel

    Ich wollte gern mal ein Eislevel machen, aber da gibt es ein paar Objekte welche ich noch nicht programmiert bekomme.

    1. Eiszapfen, welche von an der Decke hängen und erst dann herunterkommen, wenn der Player sich in einem bestimmten Radius davon befindet.
    Da kann ich es mir noch halbwegs erklären wie das funktioniert, bestimmt wenn man die player.x Position mit der des Eiszapfen überprüft.

    2. Eisblöcke, auf denen man hin und her rutscht, da habe ich absolut keinen Plan.

    Hoffe jemand hat schon Erfahrung mit solchen Objekten?
    Schaut mal auf meinen Games vorbei (alle für Android):

    APPLE ISAAC

    JUGGLE JUNKIE

    SKY APE

    Freu mich über Meinungen, Verbesserungsvorschläge und gute Bewertungen!!!
  • Ja, bei den Eiszapfen einfach die x-Position abfragen ala "if abs(x-other.x)<32".

    Und bezüglich des Rutschens ist es am einfachsten, wenn die komplette Spielphysik mit Beschleunigung und Reibung arbeitet. Daher auf Eis einfach der Reibung und Beschleunigung einen niedrigeren Wert geben als wenn man auf normalem Boden steht.
  • Gut danke, also zu ...

    1. Im Stepevent des Eiszapfens habe ich jetzt folgenden Code:

    if abs(x-obj_player.x)<4
    {
    vspeed = 1
    }

    Das funktioniert zwar auch, aber wenn mein Playerobject zerstört wird, dann tut er jedesmal eine Fehlermeldung anzeigen.

    Und zu ...

    2. Ich mache meine Platformer immer so wie es in den meistens Tutorials erklärt wird, also mit so einer Maske im Hintergrund die für alle soliden Objekte wie bspw. den Boden zählt.

    Also die Kollisionen dann mit diesen Code:

    if place_meeting(x,y+1,obj_mask) und wenn ich da mehrere Objekte hineinschreibe wie bspw:

    if place_meeting(x,y+1,(obj_mask,obj_eisblock)) oder if place_meeting(x,y+1,obj_mask||obj_eisblock) dann funktioniert der ganze Code nicht mehr.
    Schaut mal auf meinen Games vorbei (alle für Android):

    APPLE ISAAC

    JUGGLE JUNKIE

    SKY APE

    Freu mich über Meinungen, Verbesserungsvorschläge und gute Bewertungen!!!
  • MisteryJay schrieb:

    Gut danke, also zu ...

    1. Im Stepevent des Eiszapfens habe ich jetzt folgenden Code:

    if abs(x-obj_player.x)<4
    {
    vspeed = 1
    }

    Das funktioniert zwar auch, aber wenn mein Playerobject zerstört wird, dann tut er jedesmal eine Fehlermeldung anzeigen.

    Und zu ...

    2. Ich mache meine Platformer immer so wie es in den meistens Tutorials erklärt wird, also mit so einer Maske im Hintergrund die für alle soliden Objekte wie bspw. den Boden zählt.

    Also die Kollisionen dann mit diesen Code:

    if place_meeting(x,y+1,obj_mask) und wenn ich da mehrere Objekte hineinschreibe wie bspw:

    if place_meeting(x,y+1,(obj_mask,obj_eisblock)) oder if place_meeting(x,y+1,obj_mask||obj_eisblock) dann funktioniert der ganze Code nicht mehr.

    Zu 1. Wie du schon selber gemerkt hast, sobald dein Playerobject zerstört wurde stürtz das Programm ab, da du ja sagst if abs(x-obj_player.x) <4, damit dieser Fehler nicht mehr kommt musst du Abfragen ob dein Spieler überhaupt existiert. z.B

    GML-Quellcode

    1. if (instance_exists(obj_player)){
    2. if (abs(x-obj_player.x) <4){
    3. // Do stuff
    4. }
    5. }


    Zu 2. nunja der Code funktioniert nicht mehr, da er kein valider Code mehr ist.

    Was du meinst ist eher

    GML-Quellcode

    1. if (place_meeting(x,y+1,obj_mask) || place_meeting(x,y+1,obj_eisblock ){
    2. // Mache Code
    3. }
    Wir stehen zusammen und wir fallen zusammen
  • Letzteres sieht danach aus, als könnte obj_mask ein Parent von obj_eisblock sein, dann reicht es aus nur nach obj_mask zu fragen für allgemeine Kollisionen und zum anopassen der friction speziell nach obj_eisblock.
  • Hallo, nochmal wegen dem Eisblock, ich habe die Reibung davon auf 0.1 gestellt und im Step Event vom Player folgenden Code:

    if place_meeting(x,y+1,obj_ice)
    {
    friction = 0.2
    }

    Da tut sich aber nix ...,
    Schaut mal auf meinen Games vorbei (alle für Android):

    APPLE ISAAC

    JUGGLE JUNKIE

    SKY APE

    Freu mich über Meinungen, Verbesserungsvorschläge und gute Bewertungen!!!
  • Hi, lies Dir doch noch einmal durch, was der Befehl "friction" so macht. In Deinem Fall, würde ich mal darauf tippen, dass Du es gar nicht mitbekommst, denn wenn Du Deinen Spieler, mit angenommen 4 Pxel, bewegst, dann hat er nach 20 Frames bereits Null erreicht.
    Bei 60 Frames pro Sekunde, also nach nem Drittel, was wahrscheinlich nur ein kleines Ruckeln sein wird, soll heißen, Dein Wert ist viel zu hoch.
    Versuch es mal mit 0.03 oder noch kleiner, denn auch dieser kleine Wert, bremst Dich pro Sekunde schon 1,8 Pixel ab, was bei einer Geschwindigkeit von den angenommenen 4 Pixel auch schon zu viel sein kann.


    Miradur
  • Ist das wirklich so? Das wußte ich nicht(hab es auch nicht versucht 8o ). Denn die Hilfe sagt das:


    YoYo-Games schrieb:



    Description

    Friction is one of the "built in" properties that instances can have and can be used to slow the instance down over time when the speed is other than zero. It works simply by subtracting an amount from the speed every step until the object has a speed of 0, so if the friction is set to, for example, 0.1 and the speed of the instance is 1 (1 pixel per step), it will slow down and stop after 10 steps have passed. Note too that the friction is applied to positive and negative speeds equally with the net result always being that the object has a speed of 0 after a given time.

    [/quote]
    Da wird sich eindeutig auf die Variable speed bezogen und nicht auf hspeed und vspeed hingewiesen.



    Miradur
  • Ja, speed geht auch. speed, direction, hspeed, vspeed sind alle miteinander verbandelt.

    Ich denke was Husi sagen wollte ist, dass wenn die Bewegung durch direktes verschieben von x und y umgesetzt wurde, friction keinerlei Einfluss darauf hat.