Problem beim springen von bestimmtem Objekt

  • GM 7

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

  • Problem beim springen von bestimmtem Objekt

    Hallo allerseits erstmal ;)

    Ich bin richtig froh, euer Forum entdeckt zu haben. Ich sitze nämlich im moment an einem Projekt - Ein kleines Spiel, dass an "the impossible game" [iPod/Xbox] angelehnt ist - für ein paar Freunde (und mich natürlich^^), bei dem ich schon einige Probleme hatte und grade garnichtmehr weiterkomme.
    Da dies im grunde mein erstes Game ist (ich hatte vorher schon das eine oder andere mal ein wenig rumprobiert, hatte aber nie den enthusiasmus etwas fertigzukriegen) kenne ich mich mit dem GameMaker noch nicht so gut aus. Ich benutze (noch) die kostenlose Version von GM7. Ich versuche, so viel wie möglich mit Drag & Drop zu machen, da ich leider mit dem Programmieren noch etwas überfordert bin ;)

    Soviel zur Vorgeschichte... :)


    Das Spiel an sich ist eigentlich schon recht weit.

    Es handelt sich um ein - eigentlich - ziemlich simples Spielprinzip.
    Ein Objekt - Ball - "rollt" und springt in einem Level über Quadrate, Dreiecke und gefährliche Bodenteile. Die letzteren Beiden dürfen dabei nicht berührt werden.
    Zur Steuerung steht lediglich die Leertaste - springen - zur Verfügung. (Und die "R"-Taste zum wiederholen des Spiels)
    Das ganze Spiel besteht aus einem niedrigen, aber langen Room. Die View verfolgt den Ball. (Oder besser gesagt ein unsichtbares Objekt (obj_controller) in der Mitte, aufgrund technischer Schwierigkeiten - aber darum geht es mir jetzt garnicht^^)

    Da ich noch so wenig Erfahrung habe, sind einige Dinge im Spiel für euch wahrscheinlich ziemlich abstrakt gelöst. (Wie eben, dass die View nicht den Ball wirklich verfolgt, sondern ein extra Objekt... Oder, dass der Boden nicht flächig im ganzen Raum gesetzt wurde, sondern ein Objekt ist, das sich in der gleichen Geschwindigkeit wie der Ball bewegt - Das wurde gemacht um ein farb-fading im Boden einzubringen, was ich sonst nicht hinbekommen hätte :S)


    Aber jetzt zu meinem eigentlichen Problem: (Zu den Problemen^^)

    Zum springen habe ich folgenden Code verwendet:

    Bei drücken der Leertaste:

    GML-Quellcode

    1. if(place_free(x,y+1)) // Wenn Ball in der Luft ist... (Kein Obj. unter ihm)
    2. {
    3. gravity_direction=270
    4. gravity=2 // ... wird gravity auf 2 gesetzt...
    5. }
    6. else // ... ansonsten ... (Also wenn ein Obj. unter ihm ist)
    7. {
    8. vspeed=-12 // ...springt er.
    9. }


    Und um die Gravity wieder auf 0 zu setzten, wenn ein Objekt (Der Boden oder ein Quadrat unter dem Ball ist) habe ich ein step-Event mit folgendem Code erstellt:

    GML-Quellcode

    1. if(place_free(x,y+1)) // Wenn der Ball in der Luft ist...
    2. {
    3. gravity_direction=270
    4. gravity=2 // ... ist die gravity auf 2. (Das ist doppelt-gemoppelt, denn ich habe es ja schon im eigentlichen
    5. // springen-event (Der Code oben) benutzt - Ich wusste nicht, wie ich das sonst lösen sollte - Anfängerfehler!? ;))
    6. }
    7. else // Wenn ein Objekt unter dem Ball ist...
    8. {
    9. gravity_direction=270
    10. gravity=0 // ... ist die Gravity gleich 0.
    11. }
    Alles anzeigen


    Das funktioniert auch. Zumindest, wenn der Ball auf den Boden (obj_Boden) kommt und dort springt. Wenn er allerdings auf einem Quadrat (Obj_Quadrat) ist, springt er nicht. Das finde ich zimelich seltsam, da der Boden und das Quadrat absolut gleich "behandelt" werden. Ich finde keinen Unterschied, der ausmachen könnte, dass der Ball auf dem einen Objekt springt und auf dem anderen nicht.

    Die codes zum springen habe ich übrigens aus dem Internet kopiert... X(

    Dass ich das nicht hinkriege, macht mich grade richtig fertig. :S Ich hoffe ihr könnt mir helfen.
    Ich habe auch die GameMaker Datei hochgeladen. - Damit ihr euch den ganzen Rest mal ansehen könnt. Ich hoffe es reicht, wenn man die gmk-Datei hochlädt.
    Ich weiß ich kenn mich mit GameMaker noch nicht richtig aus, deswegen werdet ihr einiges als wahnsinnig umständlich erachten, aber über jeden Tipp und Ratschlag zur vereinfachung wäre ich auch sehr dankbar.

    Download:
    http://www.megaupload.com/?d=F9Z44NQF

    Und ich hätte noch ein kleines Problem mit einer Animation:
    Wenn der Ball gegen z.B. ein Dreieck stößt, bleibt zwar alles stehen und man muss das Spiel resetten (Mit der "R"-Taste) aber der Ball sollte sich in einer Animation "auflösen". Dazu habe ich einfach n Bild animiert, als Sprite geladen und im collision-event mit obj_Dreieck den Ball-sprite ändern lassen, allerdings funktioniert die Animation nicht. Das Bild bleibt einfach stehen. Wenn ihr wisst, wieso, wäre ich darüber auch sehr froh^^

    Man ist das viel Text. - Tut mir leid, kürzer gings nicht. :S

    Danke schonmal an alle, die sich das hier wenigstens durchlesen ;),
    Ullsøn

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Ullsøn ()

  • Erstmal danke euch beiden...
    Ich habe mir die Tuts mal angeschaut... Ich hab die Lösung aus dem (englischen) Tutorial ausprobiert... Allerdings ändert sie bei mir gar nichts. Sobald sich der Ball auf einem Quadrat befindet, springt er einfach nicht. Woran kann denn das liegen?

    Mein Problem ist leider zu speziell, als dass ich das mit den allgemeinen Formulierungen von den Tutorials beheben könnte :S
  • Im viereck selber nicht...
    Beim collision-event von ball mit Quadrat:

    GML-Quellcode

    1. move_contact_solid(direction,0)
    2. vspeed=0
    3. hspeed=10


    Den hab ich zusammen mit den anderen ausm Internet^^
    Der Fehler liegt wahrscheinlich in der ersten Zeile... Aber soweit ich das verstanden habe, setzt "move_contact_solid( )" das Objekt bei einer Kollision zurück zum Punkt vor der Kollision...
    Allerdings habe ich den gleichen Code auch bei der Kollision von Ball mit Boden... und da funktioniert es ja einwandfrei...
  • Ich komme einfach nicht drauf. Egal, was ich ändere es funktioniert nicht X(
    (Oder es ergibt sich ein neues Problem... Der Ball springt garnicht mehr oder schwebt nur durch das level...)

    Es ist wahrscheinlich total einfach. Ihr findet die Lösung doch bestimmt sofort. Könnt ihr mir nicht helfen? Ich komme einfach nicht weiter.

    Sorry wegen meinem generve und dem Doppelpost... Aber - wie gesagt - ich komme nunmal nicht weiter ohne eure Hilfe.
  • ich habe das ganze mal geändert funktoinrt jetzt musst den ball tod zum opjct machen
    der download vom funktionirenden hier:impossible.zip
    Die deutsche Sprache ist Freeware, Du kannst sie benutzen, ohne dafür zu bezahlen.
    Sie ist aber nicht Open Source, also darfst Du sie nicht verändern, wie es Dir gerade passt
  • Ich habe inzwischen rausgefunden, dass der ball das quadrat nicht ganz berührt. Es ist ein pixel dazwischen. Fällt der Ball auf den Boden, berührt er diesen aber wirklich.
    Warum berührt mein Ball das Quadrat nicht? Es sind die gleichen codes verwendet wie beim Boden.
    (btw: Wenn ich ein neues Objekt erstelle, mit egal welchem Sprite (Auch dem Boden-sprite), berührt der ball dieses obj. auch nicht... :S)
  • eventuell, da du den 7ner Benutzt und noch dazu lite, könnte es daran liegen, dass du nicht den ganzen platz des sprites benutzt,
    soll heißen, dass das beim 8ter nicht passieren kann ;)
    in der regel hat das aber nichts damit zutun


    zu deinem Problem:
    ich würd an deiner Stelle follgendes machen:
    du hast ja ein object, dass der Boden sein soll,
    der Code vom boden sollte eigentlich derselbe sein wie der vom viereck
  • Ich hab mir mal die 8er lite version runtergeladen. Das Problem bleibt leider bestehen.

    Der boden und das Viereck haben ja die gleichen codes. Der einzige unterschied besteht darin, dass sich der Boden bewegt (genauso schnell wie der Ball). Aber auch wenn der Boden sich nicht bewegt, ist das springen vom Boden kein Problem. Der code im collision-event vom obj_Ball mit Boden ist der gleiche wie der mit dem viereck. Und im obj_Quadrat, bzw. obj_Boden ist kein unterschied (z.B. beide solid...) bis darauf, dass der Boden sich bewegt. Das hat aber keinerlei auswirkungen aufs springen.

    Es funktioniert aber, wenn ich beim springen-event (Leertaste)

    GML-Quellcode

    1. if(place_free(x,y+1))
    2. {
    3. gravity_direction=270
    4. gravity=2
    5. }
    6. else
    7. {
    8. vspeed=-12
    9. }


    den teil "if(place_free(x,y+1))" in "if(place_free(x,y+2))" ändere. Also quasi sage, dass wenn 2 pixel unter dem Ball ein objekt ist, soll er springen können.
    Allerdings hakts dann. Er springt nicht immer... X(
    Was soll ich tun? :S