ein Gebäude UPGRADEN [GML]

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

  • ein Gebäude UPGRADEN [GML]

    Also Leute,

    man muss sich vorstellen es ist ein Game wie Die Siedler(1-2) und wenn ich auf ein Gebäude mit left_pressed click dann kommt ganz rechts im Inventar ein kleines Fenster, mit einem Tip, was das Upgrade mit sich bringt, wieviel es kostet und ein Yes/Cancel button.

    ich habe es mir so gedacht:

    ich klick mit linker maustaste auf das haus1 und dann kommt das fenster, dann drücke ich dort auf den yes button (dann wird mir natürlich mein geld abgezogen, soviel wie das upgrade kostet) und dann wird das haus in den nächsten 10 Sekunden upgegraded, (und dass das alte nicht mehr da ist, denk ich mal: sobald man den 'YES' button gedrückt hat, und es in bauphase kommt, destroy(self) und dann wird ja die bauphase kreeiert und dann kommt ja schon haus1_upgrade1...

    hauptproblem ist wie ich das mit dem inventar hinbekommen sollte...

    mein code sieht bis jetzt so aus:

    im haus1
    maus_left_pressed event:
    ///soll hier vllt ein neues Obj erstellt werden? 8| (dass das inventar dann darstellt) ?
    und dann im inventar die yes/no buttons reintun, aber, geht das überhaupt.
    oder ist es auch noch anders möglich?

    mein Problem ist, ich habe garkeine Ahnung wie ich sowas überhaupt hinbekommen soll, und in der SU, habe ich nichts derartiges gefunden...


    Grüße =)
  • Mh könntest das so machen das wen man yes drückt nen timer geht also nen alarm der dan nach sagen wir 5 Sekunden das Haus also Upgrade 1 erstellt und das alte entfernt
    Oder du benutzt das zeichen und läst das alte nicht entfernen und tust es nur umwandeln
  • naja so:

    GML-Quellcode

    1. if show_message_ext("Gold + " + string(global.gold) +"# Armor + " + string(global.armor) + "# Cost: 500","Yes","","No")= ??


    Benötigte Variablen: global.gold , global.armor.
    bei ?? zahl einnsetzen:
    0 ist wenn man ESC drückt
    1 ist wenn man YES drückt
    3 ist wenn man No drück


    xxskxx
    -
  • Die Variablen sind (logischerweise) dazu da die bestimmten Werte zu speichern.
    Indem man also auf die Werte der Variablen zugreift, kann man (wie oben von dir gewünscht) die Werte anzeigen lassen.

    Und wenn du uns nicht verrätst wie die Fehlermeldung lautet kann dir auch niemand helfen.

    Ich dachte sowas versteht sich mittlerweile von selbst. >.<
    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 brauch doch garkeine Werte, habe ich nie behauptet, oder ? :huh:



    Ich brauch doch nur einen Infotext (keine Werte) und die Yes / No buttons, und dies soll passieren, ohne dass das game pausiert wird, und am besten auf der 600.x_achse und auf der 400.y_achse soll das fenster angezeigt werden.


    ?( :( sorry wenn ich mich undeutlich ausgedrückt habe, aber meiner meinung nach hab ichs ganz gut gemacht
  • Das ist Arbeitserleichterung. Stell dir vor du müsstest jetzt jeden Infotext im Objekt abändern, nur weil du das Gebäude teurer machen willst - außerdem kann sowas im Spiel auch eintreffen (dass die Gebäude vielleicht mal teurer werden). Allgemein würde ich das mit Instance Change sowieso lassen. Am Ende hast du über 100 Objekte für nur ein paar Gebäude mit vielen Stufen. Stell dir ne Variable ein, die die Stufe speichert und arbeite dann damit. Außerdem sind die GM MessageBoxen nicht wirklich eine schöne Methode, um sich "Infotext-Fenster" zu machen:

    1. wird dein Spiel pausiert - und das willst du ja nicht (meintest du jedenfalls oben)
    2. gehen einem die GM Messageboxen richtig auf die Nerven
    3. kann man sich sowas selbst programmieren und muss sich nicht von forum Usern solche Dinge zusammenbasteln lassen.
    4. lernt man selber daraus, sich sowas zu programmieren und das ist auch ganz einfach!
    5. ...

    Kann man doch ganz einfach machen. Gezeichnet werden Rechtecke - dein Infotext und die Buttons - kann man ganz einfach in ein Skript packen und von jedem beliebigen Objekt aufrufen. Ich finde, man sollte sich erstmal selber fragen, ob man sich nicht selbst sowas programmieren kann, anstatt zu fragen, ob es nicht eine InfoTextMessageBox(); Funktion gibt oder die einem hier zusammengebaut werden soll...

    mfg Critical

    mfg Critical
  • Also anstatt ein script zu machen, würde ich es bevorzugen es im left_pressed event zu schreiben:


    und zur zeit sieht es so aus:


    draw_rectangle(648,336,768,408,true);
    draw_text(656,344,Cost20);


    doch da funktioniert nichts:(

    nicht mal dass das rechteck angezeigt wird. und beim draw_text, kommt immer ein error weil er eine variable wissen möchte, ich möchte aber nur ein String machen (muss man dazu immer ne variable haben? 8| )

    und wie ich die buttons einrichten soll weiß ich auch nicht :huh:

    grüße..::/

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

  • Danke das funktioniert super. habe nur beim rectangle; true gemacht, find ich besser...


    großes problem ist aber wie ich das mit den Buttons hinbekommen soll ?( aber das werde ich alleine lösen !!!


    eine frage wäre echt nett wenn ihr die noch beantwortet:


    wie ich im left_pressed_event: das machen kann, dass ERST wenn man linksklickt, das draw event zu stande kommt !!! oder jedenfalls dieser code:



    draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,image_alpha);
    draw_set_color(c_black);
    draw_rectangle(648,336,768,408,true);
    draw_text(656,344,"Cost20");
  • Setz die Aktionen im [ Draw Event ] in eine If-Abfrage:

    GML-Quellcode

    1. if (mouse_check_button_pressed(mb_left) && position_meeting(mouse_x,mouse_y,self)) {
    2. draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,image_alpha);
    3. draw_set_color(c_black);
    4. draw_rectangle(648,336,768,408,true);
    5. draw_text(656,344,"Cost20");
    6. }

    Andererseits kannst du das auch mit einer Variable lösen:

    [ Create ]

    GML-Quellcode

    1. draw = 0; // Setze die Variable 'draw' zu null; Es soll nichts gezeichnet werden.


    [ Mouse Left Pressed ]

    GML-Quellcode

    1. if (draw == 0) { // Wenn die Variable 'draw' 0 zurück gibt...
    2. draw = 1; // ...setzen wir sie zu 1.
    3. }


    [ Draw ]

    GML-Quellcode

    1. if (draw == 1) { // Wenn die Variable 'draw' 0 zurückgibt...
    2. draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,image_alpha); // Zeichnen wir...
    3. draw_set_color(c_black); // ...was...
    4. draw_rectangle(648,336,768,408,true); // ...gezeichnet werden...
    5. draw_text(656,344,"Cost20"); // ...soll.
    6. }


    ;)
    fabse64 -> haiyyu