Spielfigur schießt nicht

  • Original von Windapple
    Der GM interpretiert den Code stur. Wenn etwas nicht so läuft wie es soll, liegt das meistens am Code. Es gibt nur wenige Fehler im GM, die sich tatsächlich auf die Codelogik auswirken würde. Wenn der Code eines einzigen Objektes identisch ist, heißt das noch lange nicht, das es gleich funktioniert.
    Man kann beispielsweise andere Objekte ändern, von denen dann irgendwas abhängt. Man kann Variablen lokal und global definieren etc... Code besteht nicht nur aus einem einzigen Objekt, erst das Zusammenspiel aller Codeteile machen das Spiel. Und oft taucht irgendwo ein Fehler auf und man ist frustriert weil man nichts findet, was nur daran liegt, das man an der falschen Stelle sucht oder etwas als Tatsache annimmt und nicht weiter prüft, obwohl dann dort der Fehler liegt. Es kam schon sehr oft hier vor das jemand meinte "der Fehler muss in dem Codeteil liegen den ich hier zeige" und dann war der ganz woanders.

    Das habe ich auch gedacht, nur bin ich alles(!) noch einmal durchgegangen und wenn es mit dem Code in einem Spiel funktioniert, warum sollte es im anderen Spiel nicht genauso funktionieren?
    Kann es sein, dass D&D in bestimmten Kombinationen "spinnt"? Ich sollte den Code mal in GML umschreiben, wenn ich die Zeit dazu habe...

    Der einzige Fehler, der mir am wahrscheinlichsten wäre, ist der, dass ich die Klammern falsch gesetzt habe (bzw. zu viele/zu wenig). Doch alle sind so, wie im funktionierenden Spiel gesetzt. :?: Ich habe immer die Logik des Programmierens angepriesen, die es so spaßig macht, aber das ist wirklich frustrierend!
    Wenn ich an der falschen Stelle suche, dann sagt mir bitte wo ich suchen soll!
    Für z.B. das Schießen:
    Das was ich einstellen muss ist (bzw. das was ich eingestellt habe oder meine eingestellt zu haben):
    Space
    If global.ammunition is larger than 0

    If sprite_index is equal to spr_player_left
    object: obj_bullet; x: 0; y: 0; Speed: 12; Direction: 180; Relativ: true

    object: obj_bullet; x: 0; y: 0; Speed: 12; Direction: 0; Relativ: true
    sound: snd_shoot; loop: false
    Set variable global.ammunition relativ to -1


    Wenn, dann müsste ja da der Fehler liegen, wenn ich die Figur normal gewegen kann, genug Munition habe und ich die Variable deklariert habe.
    Wo sollte der denn sonst liegen, der Fehler?
    Also was passiert, wenn ich die Leertaste drücke ist: Nichts

    :?:

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

  • Da dieser Posts (bis auf WAs Zitat) mal so überhaupt nichts mit dem ursprünglichen Thread zu tun hatte, hab ich das mal in ein eigenes Thema verfrachtet.

    (Mal ganz davon abgesehen, dass die Direction 0 für rechts, und 180 für links steht. Aber das wusstest du ja sicher. ¬¬)
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • Ich würds dir jetzt alles mit Bildchen machen, habe aber keine Lust im Moment dazu...
    Mach mal

    Space
    If global.ammunition is larger than 0
    If sprite_index is equal to spr_player_left
    PFEIL nach oben
    object: obj_bullet; x: 0; y: 0; Speed: 12; Direction: 0; Relativ: true
    sound: snd_shoot; loop: false
    Set variable global.ammunition relativ to -1
    ELSE
    object: obj_bullet; x: 0; y: 0; Speed: 12; Direction: 180; Relativ: true
    sound: snd_shoot; loop: false
    Set variable global.ammunition relativ to -1
    PFEIL nach unten

    versuchs mal so

    MfG gamer
    Aktuelles Projekt: Aufbau - Strategiespiel.
    Aktueller Entwicklungsschritt: Planung | Grundengine entwickeln.

    Wichtig ist nicht, besser zu sein als alle anderen.
    Wichtig ist, besser zu sein als du gestern warst.





  • Sorry Kilik, ich hatte auch schon überlegt ein neues Thema zu eröffnen, aber da die Problembeschreibung so gut auf meine passte, habe ich gedacht, jusu und ich hätten beide etwas davon, wenn wir die Frage in einem Thread klären.
    Ja... das mit 0 und 180 war ein Abtipp fehler (nur in meinem Beitrag).

    Danke gamer, ich versuche das gleich mal.
    Nur: Der Code, den ich geschrieben habe, funktioniert, doch das nur im original Spiel.
    Das ist ja auch meine ursprüngliche Frage, wieso dieser Code im einen Spiel klappt und im neuen Spiel (ohne die "Merge Game"-Funktion, sondern durch alleiniges übernehmen der einzelnen D&D-Funktionen).

    @WA: Ist das denn einer der wenigen Fehler des GM (wie du vorhin ansprachst) oder muss es noch an etwas anderem liegen, worauf ich einfach nicht komme. Ich bin ja sicherlich nicht der einzige mit solch einem Problem (siehe z.B. jusu).

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

  • Du musst auch die Variablen, die Sprites und Objekte auf dein Spiel anpassen.
    Sonst steht da so:
    No existing Sprite oder so...
    Musst einfach mal ein bisschen gucken.
    Ich habe das auch schön öfters gemacht von nemExample und immer hats geklappt.
    Auch du musst dich mal mehr als 2 Minuten mit einem Problem außeinandersetzen.
    Und wo hat diese Frage was mit Jusus gemeinsam??

    MfG gamer

    PS: Die SuFu hat bestimmt auch noch geheime und finstere Hinweise für dich...
    Aktuelles Projekt: Aufbau - Strategiespiel.
    Aktueller Entwicklungsschritt: Planung | Grundengine entwickeln.

    Wichtig ist nicht, besser zu sein als alle anderen.
    Wichtig ist, besser zu sein als du gestern warst.





  • Keine Error-Meldung, nur keine Aktion.

    Mit Jusu hat das in so fern zu tun, dass ein und der selbe Code im einen Spiel nicht mehr so funktioniert, wie im anderen.

    Bei der SuFu ist es schwer danach zu suchen, weil es mehrere Auslöser haben kann, dass eine Spielfigur nicht schießt.

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

  • Original von domimah
    Keine Error-Meldung, nur keine Aktion.

    Mit Jusu hat das in so fern zu tun, dass ein und der selbe Code im einen Spiel nicht mehr so funktioniert, wie im anderen.

    Bei der SuFu ist es schwer danach zu suchen, weil es mehrere Auslöser haben kann, dass eine Spielfigur nicht schießt.


    1. Wenn keine Aktion kommt hast du was falsch gemacht. Ganz einfach...
    Entweder ein object falsch definiert, kein Sprite zugewiesen oder sonst was....

    2. Jusu hat die gröbsten Fehler gemacht die ich bisher gesehen hab.....
    Das hat nichts damit zu tun, das es aus nem anderen Spiel ist.
    Und wenn dann hätte das eher bei ihm gestimmt, weil er von GM/ auf GM 6.1 umgestiegen ist.

    Ihr beide müsst einfach gründlicher und ordentlicher arbeiten...

    3. Dann liest man sich halt mehrere Threads durch bis man den richtigen gefunden hat...

    On Topic:
    Ich sehe im Code keinen Fehler(Wenn man das D&D-Zeug da so nennen kann).
    Guck mal, ob du der Kugel oder so kein Sprite zugewiesen hast...
    Außerdem stimmen bei dir die Klammern nicht...
    Aber das hatte ich ja schon verbessert...

    MfG gamer
    Aktuelles Projekt: Aufbau - Strategiespiel.
    Aktueller Entwicklungsschritt: Planung | Grundengine entwickeln.

    Wichtig ist nicht, besser zu sein als alle anderen.
    Wichtig ist, besser zu sein als du gestern warst.





  • Original von gamer
    Original von domimah
    Keine Error-Meldung, nur keine Aktion.

    Mit Jusu hat das in so fern zu tun, dass ein und der selbe Code im einen Spiel nicht mehr so funktioniert, wie im anderen.

    Bei der SuFu ist es schwer danach zu suchen, weil es mehrere Auslöser haben kann, dass eine Spielfigur nicht schießt.


    1. Wenn keine Aktion kommt hast du was falsch gemacht. Ganz einfach...
    Entweder ein object falsch definiert, kein Sprite zugewiesen oder sonst was....

    2. Jusu hat die gröbsten Fehler gemacht die ich bisher gesehen hab.....
    Das hat nichts damit zu tun, das es aus nem anderen Spiel ist.
    Und wenn dann hätte das eher bei ihm gestimmt, weil er von GM/ auf GM 6.1 umgestiegen ist.

    Ihr beide müsst einfach gründlicher und ordentlicher arbeiten...

    3. Dann liest man sich halt mehrere Threads durch bis man den richtigen gefunden hat...


    Zu 1.
    ... das ist ja gerade mein Problem. Der Code (ja, man kann das Code nennen, weil D&D ja den Code beinhaltet) funktioniert einwandfrei im original Spiel (zum 3. Mal), aber im "remake" nicht (ich habe ja das object neu gemacht, weil ich es aus versehen gelöscht hatte).
    Das ist das einzige was mich wundert. Ich habe mich auch schon für deine Verbesserung bedankt, aber mir ging es eher darum, warum der Code einmal klappt und einmal nicht klappt - ich hoffe, das war jetzt verständlich genug.

    Zu 2.
    1. was hat das denn mit den verschiedenen GM Versionen zu tun? Die Funktionen sind doch dieselben.
    Wenn es also angeblich im 7er geklappt hat, wieso sollte es nicht auch im 6.1er klappen?

    Wo soll ich denn ordentlicher Arbeiten? Wenn mein Code funktioniert, dann denke ich doch nicht, dass ich ihn eventuell noch verbessern könnte. Ich werde deinen Code auch gleich noch ausprobieren.

    Zu 3.
    Und wenn ich keinen finde, dann eröffne ich ein neues Thema bzw. frage in einem Thread weiter nach, wenn mir zu den Lösungen des Threads noch etwas unklar ist etc.

    On Topic:
    Ich sehe im Code keinen Fehler(Wenn man das D&D-Zeug da so nennen kann).

    Das wundert mich ja auch, dass es keinen Fehler gibt.

    Guck mal, ob du der Kugel oder so kein Sprite zugewiesen hast...

    Ich habe der Kugel einen sprite zugewiesen und die Kugel hat auch sonst nichts mit dem Player zu tun, nur, dass sie an dessen Position sich bewegend erstellt wird.
    Außerdem geht ja noch nicht einmal die Variable nach unten, was sie eigentlich sollte und wenn ich vor einem Gegner stehe, wird dieser auch nicht zerstört, obwohl ich an der Kugel selbst nichts geändert habe und alles vorher geklappt hat.

    Außerdem stimmen bei dir die Klammern nicht...
    Aber das hatte ich ja schon verbessert...

    Wenn sie nicht stimmen, wieso funktioniert dann alles so wie gedacht?
    Ich habe auch schon gedacht, dass die Klammern nicht stimmen, aber wieso geht das dann?? (die Frage habe ich nun bestimmt schon mehr als 10 Mal gestellt...)
  • Wenn tatsächlich nichts passiert, also nicht mal der Sound gespielt wird, dann tritt der Fehler schon in der Abfrage von global.ammunition auf. Das sieht so aus, als wäre global.ammunition einfach nicht größer als 0. Hast du in den "global game settings" unter "errors" "treat uninitialized variables as value 0" aktiviert? Falls ja, schalte das bitte ab. Sonst führen Schreibfehler in Variablennamen nicht mehr zu Fehlermeldungen! Lass dir am besten die Variable global.ammunition anzeigen, um zu überprüfen, ob die auch wirklich größer als 0 ist. Falls der Fehler dort nicht liegt, dann kann nur noch der unwahrscheinliche Fall existieren, dass das Objekt mit diesem Code einfach nicht im Raum platziert ist.
    Einige meiner Spiele:
  • Original von interceptor
    Wenn tatsächlich nichts passiert, also nicht mal der Sound gespielt wird, dann tritt der Fehler schon in der Abfrage von global.ammunition auf.

    Ich habe später dann bemerkt, dass ich nur den Ton ausgeschaltet hatte :O

    Heute habe ich mich mal wieder mit dem "Problem-"Spiel befasst (bzw. gestern :D) und dabei habe ich vorerst einmal die Programmierung der Leben, die ebenfalls nicht mehr funktionierte (eigentlich hätte bei der Kollision mit einem Gegner 1 Leben abgezogen werden sollen, aber es wurden gleich alle Leben abgezogen).
    Ich schaute mir den funktionierenden Code und den nicht-funktionierenden Code und entdeckte erst nichts. Doch dann, ganz unscheinbar, entdeckte ich im funktionierenden Code die Delete-Action für den player. Ich dachte zuerst, dass diese Action eigentlich überföüssig sei, aber nachdem ich diese Action dann im Problem-Spiel verwendete, funktionierte alles.
    Die funktionierende Fassung ist also, dass die Spielfigur zerstört wird, das Collisionsevent also nicht mehr stattfindet und so nur ein Leben abgezogen wird.

    Voller Motivation suchte ich nach dem Fehler im Schuss-Code, aber ich fand nichts...
    Aus langeweile spielte ich das Spiel einmal: Nur ein Schussgeräusch und die Variable wurde abgezogen, aber keine Kugel war zu sehen
    Dann spielte ich mit der direction herum und entdeckte dabei, dass ich im FUNKTIONIERENDEN Code bei player_left die direction 0 hatte :?:
    So dachte ich an das, was Kilik geschrieben hatte und probierte ein wenig herum.
    Im funktionierenden Code war alles nun genau umgekehrt und im Nicht-funktionierenden wurde beide Male nach, ich glaube, links geschossen.
    Ein kleiner Erfolg; ich war auf der Richtigen fährte.
    Ich formte den Code so um, wie Gamer es mir gesagt hatte (später mit einer kleinen Klammeränderung), aber es funktionierte immer noch nicht.
    Dann sah ich mir die Variablen-einstellung der Variable "sprite_index" an.
    als Wert hatte ich "player left".
    Damit es schöner aussieht plazierte ich, anstatt des Leerzeichens, einen Unterstrich (auch bei der Spritebezeichnung) und siehe da:
    ES FUNKTIONIERTE :)

    Also lag es die ganze Zeit an der Bezeichnung eines Wertes (wie soll man darauf kommen, wenn der Wert im funktionierenden Spiel funktionierte?), aber das zeigte mir WA's "Predigt" auf.
    NUR: Der GM mag ja in dieser Hinsicht logisch sein, doch warum kann ich im einen Spiel ein Leerzeichen verwenden und im anderen nicht? ;)
    Naja... jedenfalls:

    Und die Moral von der Geschicht, benutze Leerzeichen nicht.
    Nehme stehts den Punkt und Unterstrich, dann verzweifelts du auch nich' ;)

    Also haben alle geholfen und dafür bedanke ich mich sehr :) (Ja, auch du Interceptor, denn ohne deinen Hinweis hätte ich nicht noch einmal auf den Sound geachtet :P)

    ---Gelöst---
  • Leerzeichen in den Bezeichnungen werden von D&D-Aktionen erkannt, da Diese sich nicht um die Namen, sondern lediglich um die ID scheren, welche hinter dem Namen steckt.
    Wenn also irgendwo in den Aktionen ein Dropdown mit allen möglichen ressourcen auftauscht, so ist nicht der Name ausschlaggebend, sondern die entsprechende Ressource wird anhand ihrer ID ausgewählt.

    Im Code jedoch wird der Name manuell eingegeben, dort weis der GM nicht mehr automatisch, welche Ressource gemeint ist... Und da ein Leerzeichen im Code normalerweise andeutet, dass eine Bezeichnung zu ende ist, verschluckt sich der Interpreter an dieser Stelle, da er nicht weiter weis.

    Ich würde dir also raten generell NIE irgendwelche Ressourcen (ob Sounds, Sprites, Scripts, Tiles, Backgrounds, Rooms, Paths, Fonts oder Timelines) so benennen, dass n ihrem Namen ein Leerzeichen vorkommt.
    Das KANN unter Umständen gut gehen, ist aber recht unwahrscheinlich. (Das gleiche Gilt btw auch für ressourcen mit gleichem Namen, daher setzen die meisten erfahreneren Coder auch immer "spr_", "obj_", "snd_" usw vor ihre Ressourcen.)
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • Ja, genau.
    Weil es immer so funktionierte, habe ich mich auch nie darum geschert, alles so sehr ordentlich zu machen, aber da ich nun das Spiel vollständig in GML schreiben will, mache ich die Bezeichnungen mit spr_ etc. gleich mit.
    Ich weiß nur noch nicht so ganz, ob ich zwischen sounds und backgroundmusic unterscheiden will (bsp.: snd_; msc_)
    Das Gleiche bei Texturen in 3D und Sprites.
    Naja... jedenfalls funktioniert es jetzt alles und ich danke nochmals allen für ihre Hilfe.
  • Benutzer online 3

    3 Besucher