Textposition "festnageln"

  • GM 8

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

  • Textposition "festnageln"

    Hallo,

    dank eurer Hilfe hier im Forum bin ich mit meinem Strategie-Spiel schon recht weit gekommen... die größten Probleme hatte ich mit der Anzeige, so auch jetzt.

    Ich habe eine Map, viele orte darauf und alle bewegen sich mit dem View mit(WASD...view_xview usw).
    Habe ein Objekt, welches eine Variable (Focus) von dem jeweils angeklickten Ort (Objekt) übernimmt um mir dann mittels "draw text" den Inhalt von 30-40 Variablen (Eigenschaften des Objekts) anzeigt. Klappt super! Habe ein Sprite mit einem transparenten "Fenster" als Userinterface über die scrollbare Map gelegt. (Größe genau wie der View). Nun zum Problem: wen ich meine Map scrolle (eigentlich ja den View) scrollt der Text mit, das aber ist nicht von mir erwünscht... muß ich nun etwa in jeder Textpositionierung ein "view_xview, bzw y" eingeben, wie auch schon bei meinem Userinterface? Oder gibt es eine andere variante die ich nicht erkenne?

    Da ich imo noch in einem "Testspiel" arbeite und sehr viele Leichen (Objekte, Code....) darin habe, würde es mir sehr schwer fallen hier Code-snips zu posten, hoffe meine Beschreibung ist ausreichend.

    Maschine
    Eine Stimme sprach zu mir: "Lächle und sei froh, es könnte schlimmer kommen!"
    Ich lächelte und war froh, und es kam schlimmer... :heul:
  • Also wenn du ganz normal die view verwendest, müsste man bei draw_text(x,y,string)
    nur die x bzw. y Position im Raum angeben. Der Text ist dann fest auf der Map und
    logischerweise nur sichtbar, wenn er innerhalb der view ist -> ich verstehe die Problematik nicht ganz
  • Also, meine Beschreibung ist wohl auch umständlich...

    stelle Dir einfach ein Spiel wie Z.B. Anno, C&C, Railroad... vor, überal wird eine große Map gescrollt und in irgendeinem Bereich auf dem Bildschirm ist ein Inventar, Lagerbestand... alle möglichen Daten, Zahlen, Fakten ständig zu sehen. Egal wie du die Karte scrollst, irgendetwas bleibt fest an einer Stelle auf dem Bildschirm stehen.

    DAS WILL ICH AUCH!

    Mein Sprite, welches mir als Interface dient, habe ich mit "view_xview +..., bzw y" auf dem Bildschirm fest verankert, eigentlich bewegt es sich ja immer entgegen des views beim Scrollen, und somit sieht es aus als stehe es still, genau so soll es mit meinem "Text" auch sein.

    Maschine

    evtl noch wichtig:
    Mapgröße = 2400px * 2400px
    View in room x 0, 1024...y 0, 768
    port in screen x 0, 1024...y 0, 768

    Das sieht auch alles so aus wie es sein soll.

    Maschine
    Eine Stimme sprach zu mir: "Lächle und sei froh, es könnte schlimmer kommen!"
    Ich lächelte und war froh, und es kam schlimmer... :heul:
  • Aber das tut es doch, wenn du nur die Position angibst?!?

    Wenn du es noch nicht ausprobiert hast dann mach es und wenn es wirklich nicht geht,
    dann hab ich dich falsch verstanden - in diesem Fall kannst du ja den Code posten
    (alles was für anzeige / view wichtig ist)
  • Nun fallen mir die richtigen Worte ein...

    meine Zahlen, Daten , Fakten (Text) sollen relativ zu meinem Userinterface positioniert sein. das Userinterface ist das besagte Sprite mit einem transparentem Fenster. Ich muß hier und da umdenken, habe bis vor Kurzem mit 3d gamestudio rumgemacht, Dort ist eine klare Abschottung zwischen 3d (Kameraführung) und 2d (Panel "Userinterface") vorhanden. dort ist alles was ich auf einem Panel zeichne automatisch relativ zur Panelposition. Wenn ich jetzt vergleiche, ist wohl der view im GM meine Kamera in 3dGS.Da ich die Anzeige nicht mit D&D mache sondern scripte komme ich woh nicht drumherum jede Anzeige in etwa so... zu machen

    draw_text(view_xview+pos x, view_yview +pos y, variable)

    Und das bei ca 40 Variablen...puuh

    Maschine
    Eine Stimme sprach zu mir: "Lächle und sei froh, es könnte schlimmer kommen!"
    Ich lächelte und war froh, und es kam schlimmer... :heul:
  • Und wo ist da dein Problem?
    Wenn du

    GML-Quellcode

    1. draw_text(view_xview+160,view_yview+80,Variable)


    schreibst, ist das ja logischerweise relativ zur view. Dagegen zeichnet

    GML-Quellcode

    1. draw_text(160,80,Variable)


    den Text an die entsprechende Stelle im Raum, das ist doch das, was du willst?
  • Wenn ich es so mache wie in deinem ersten Beispiel, dann ist es so wie ich es brauche, dachte nur es gäbe eine Möglichkeit irgendwo mit einem schlag die Positionen relativ zu machen und nicht in jeder einzelnen draw_text-Funktion.

    Aber vieleicht bin ich ja auch völlig auf dem Holzweg und im GM macht man es anders, ich werde mal scripten, und wenn es dann läuft hier posten. Dann wird es vieleicht klarer und Ihr zeigt mir einen anderen, besseren Weg.

    Kann es sonst schwer beschreiben, ich muß wie gesagt umdenken...

    Maschine
    Eine Stimme sprach zu mir: "Lächle und sei froh, es könnte schlimmer kommen!"
    Ich lächelte und war froh, und es kam schlimmer... :heul:
  • Ne, also zum relativmachen gibt es keine Funktion. Außer du erstellst ein Skript:

    draw_text_view

    GML-Quellcode

    1. draw_text(view_xview+argument0,view_yview+argument1,argument2)



    Dann musst du nur noch ins draw event draw_text_view(160,80,Variable) schreiben, der Skript addiert ja noch die Viewkoordinaten.
    Wenn du das Skript jetzt z.B. DTV statt draw_text_view nennst, sparst du pro Aufruf 28 Zeichen, bei 40 Aufrufen sind das immerhin 1120 Zeichen (auch wenn DTV nicht gerade aussagekräftig ist)
  • das ist für mich ein gangbarer Weg, denn es gibt noch mehr Anzeigepanel (Bau, Forschung, Produktion, Transportbewegung...) bin für jeden eingesparten tastendruck dankbar!

    Maschine
    Eine Stimme sprach zu mir: "Lächle und sei froh, es könnte schlimmer kommen!"
    Ich lächelte und war froh, und es kam schlimmer... :heul:
  • Hast du gleich mäßige Abstände zwischen deinen Befehlen kannst du auch mit Schleifen im Event arbeiten.
    Du kannst natürlich auch ein Array mit allen Position sowie angezeigten Daten erstellen und dieses von einer Schleife auslesen lassen, wenn es sich bei jeder Darstellung um etwa die selben Befehle handelt.