abstand zur wand feststellen und verändern

  • GM 8
  • abstand zur wand feststellen und verändern

    huhu, ich hab mal wieder eine frage an euch =)


    ich bastel an einer breakout variante. da hab ich ein paddel was 128px breit ist. wenn ich ein "vergrössern" powerup verwende soll es 160px breit werden. ich wechsel einfach nur den sprite. jetzt möchte ich gerne dass man das powerup auch neben einer wand auffangen darf. da ist aber mein problem dass dann das paddel in der wand hängt. also bei abstand zur wand <16px. wie kann ich das lösen dass ich weiss wie weit der abstand zur wand ist, und dann das paddel genau so versetze dass es direkt an der wand angrenzt? für tipps, tuts und hinweise bin ich sehr dankbar, bin aber net die leuchte im gml...



    ===== |

    paddel vor grösser werden

    =======|=

    paddel hängt beim grösserwerden in wand

    ========|

    paddel soll neben wand sein beim grösser werden


    mfg
  • richtig verstanden, nur hab ich keine ahnung wie ich das machen soll. meine d&d versuche waren erfolglos, und gml kenn ich mich nicht gut genug aus =(


    jetzt hab ich bissl rumgetestet, und das da zusammengebastelt:

    GML-Quellcode

    1. if place_meeting(x-1,y,wall)
    2. Player.x-=16


    damit springt das paddel aber leider immer 16px nach links. wie bekomme ich den wert den das paddel in dem moment überlappt? damit ich mich genau an der wand ausrichte?


    mfg

    und nomma was rausgefunden:


    GML-Quellcode

    1. if place_meeting(x,y,wall)
    2. if distance_to_point(0,y,)>240
    3. Player.x-=2
    4. else
    5. Player.x+=2


    so, das paddel fährt nun aus der wand raus. links wie rechts. denke so geht es. wenn jemand ne elegantere lösung hat bitte unbedingt sagen. mfg =)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von blubberkopp () aus folgendem Grund: hab nen script gebastelt

  • Der Code sieht echt grausam aus..
    Womit vergrößerst du denn dein Paddle?
    Mit image_xscale?

    3d1t: ugh, Du änderst das Sprite..
    Wenns wirklich nicht mit image_xscale geht, dann änder
    "sprite_get_width(sprite_index) / 2 * image_xscale"
    Mit der aktuellen sprite größe.

    Ins Collision Event vom Paddle mit der Wand

    GML-Quellcode

    1. var myw;
    2. myw = sprite_get_width(other.sprite_index);
    3. if (other.x + myw / 2 < x) {
    4. x = other.x + (myw + sprite_get_width(sprite_index) / 2 * image_xscale);
    5. } else {
    6. x = other.x - (sprite_get_width(sprite_index) / 2 * image_xscale);
    7. }


    Hier noch ein example dazu:
    example.zip
    :saint:
  • huhu,


    also ich tausche eigentlich nur den sprite aus zum vergrössern. werd mir jetzt dein example ansehen, thx schonmal =) und warum grausam? mich wundert es schon dass es funktioniert hat =P





    so, hab jetzt dein code ins collisionsevent gemacht...und klappt wunderbar...allerbesten dankt =)


    mfg

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

  • Was für komplizierte Lösungen. Ich würde einfach sowas bei der Kollision mit dem Powerup auslösen:

    GML-Quellcode

    1. if x < bla1
    2. x = bla1
    3. if x > bla2
    4. x = bla2


    Dabei entspricht "bla1" der halben Breite des vergrößerten Paddels + Wanddicke.
    "bla2" ist entsprechend die room_width - Wanddicke - halbe Breite des vergrößerten Paddels.

    Ich gehe jetzt natürlich davon aus, dass der Bereich in dem man sich bewegen darf immer gleich groß ist und die Größe nach dem Aufheben des Powerups immer die selbe ist, so wie bei den meisten Breakout-Varianten. Für verschiedene Powerups kann man aber natürlich auch immer andere Werte nehmen und fertig.
  • nachtrag...

    also der bereich für das paddel wird tatsächlich in den lvl variieren. und es wird mehrere powerups geben die das paddel öfters in einer anderen grösse darstellen. das script von tice funzt wunderbar...danke nochmal an euch...thema erledigt, und bis zum nächsten prob =P


    mfg