Wie stelle ich Variablen als Zahlen mit Ruby dar???
So, nach einigen kleineren technischen Rückschlägen will ich mich nochmal an nem Menü versuchen, für das ich der Einfachheit halber Ruby gebrauchen könnte ...
Das Menü soll mit Pictures gemacht werden und immer auf der aktiven Map dargestellt werden. Würde ich z.B. bei den Statusanzeigen jede einzelne ZAhl mit Pictures darstellen, dann wäre das nicht nur aufwendig, sondern auch kaum möglich aufgrund der Picturezahl ...
Also frage ich mich ob und wie es möglich wäre (hab das glaub ich mal irgendwo gelesen) Variablenwerte als Zahlen mit Ruby darzustellen (die über den Pictures liegen). Ich bin immer noch ein ziemlicher Ruby-Noob, von daher bitte eine idiotensichere Erklärung ... am besten mit passendem Scriptbeispiel dazu ...
Ne, aber da muss man so viel Code schreiben um das zu erklären. ^^ Es geht mit der Methode draw_text der Bitmap-Klasse. Damit kann man an jeder Stelle des Bildschirms Text anzeigen lassen. Falls ich mal mehr Zeit habe, schreibe ich vielleicht wie man das benutzt oder du schaust nach einem Beispiel auf einer der großen XP-Seiten.
Hum, bin zwar an sich Neuling in RGSS...aber ich versuchs mal trotzdem:
Du kannst sicherlich Zahlen einfach "auf den Bildschirm" schreiben.
Allerdings brauchst du ein leeres Bitmap dadrunter auf das du schreiben kannst.
Das ginge sicherlich auch auf einem Fenster bei dem du die Transperenz auf 100% hochsetzt, aber das halte ich jetzt einfach mal für Ressourcenverschwendung. (ohne Gewähr)
Die Einstellung des Schriftfonts ist übrigens nicht beim legalen XP nötig. Allerdings weiß ich nicht mit was für einem du arbeitest. Also ist es mal mit drin.
So solltest du an sich Text auf dem Bildschirm lesen. Halt aufs leere Bitmapobjekt geschrieben. Je nach Wunsch musst du nun halt mit den Koordinaten und Größenangaben rumspielen.
Um dann zu schreiben benutzt du einfach den "Script" Befehl und fügst dort folgendes ein:
Nimm dir dafür irgendein Event das du dir erstellen musst. Am besten eine Art NPC den du ansprechen kannst.
PS:
Mist. Ich seh grad du willst ja Variablenwerte nehmen. ^^"
Das ist aber nicht sich nicht viel anders. Du musst halt nur den draw_text Befehl etwas unändern. So in etwa:
Einfach an der Stelle wo früher der Text einfach angegeben war einfach die Variable angeben die angezeigt werden soll. An den Variablennamen musst du ein ".to_s" dranhängen. So wird der Zahlenwert in einen String umgewandelt vor der Anzeige. Ohne diese Anweisung würde dir der XP einen Fehler ausgeben. Immerhin kannst du keine Zahlenwerte an einer Stelle ausgeben wo die Funktion einen String erwartet.
Ob das ganze jetzt über deinen Bildern liegt weiß ich jedoch nicht. Musst du wohl mal ausprobieren.
@makenshi
Du solltest die Objekte mit kleinem Buchstaben schreiben, also z.B.
Dann könntest du dir noch eine Zeile sparen, indem du folgendes schreibst:
Die "Höhe" der Anzeige kann man so festsetzen:
Ich nehme immer 200, das liegt über den Pictures, aber auch über dem Debug-Menü.
Was dann noch fehlt ist ein sprite.bitmap.clear, damit der Text nicht ständig über schon bestehenden Text geschrieben wird. Praktischer wäre es natürlich sowieso, die Klasse flexibler zu machen:
Ah, das sieht doch wesentlich besser aus.
Nimm auf jeden Fall die Variante von Kelven.
Damit hättest du dann eine Funktion mit der du auf den ganzen Bildschirm schreiben kannst. Nutzungsweise wäre folgende:
Initalisierung der Funktion:
Schreiben eines Textes:
Beides natürlich wieder über "Script".
Ich kenne zwar bei Ruby die Abfrage nicht um abzufragen um welchen Typen es sich bei dem parameter "text" handelt, aber wäre es an sich nicht noch gut die methode ausgabe so zu ändern:
So müsste dann doch 100% immer ein String ankommen?Immerhin wandeln wir dann den Parameter um. So ist eine Fehlerquelle ausgeschlossen. Und ein Komfortfaktor eingebaut.
Ich hab's nur deswegen weggelassen, weil ich nicht genau wußte, ob es eine Fehlermeldung gibt, wenn man ein String-Objekt in einen String umwandeln will. Gibt es aber nicht, wie ein Test gezeigt hat, deswegen kann das to_s also bleiben. Aber mir ist noch was eingefallen. Wenn man mehr als einen Text anzeigen will, wäre eine eigene Löschmethode besser. Deswegen sollte die Klasse so aussehen (man muss dann nur immer manuell löschen):
@makenshi
Das mit dem texts ist doppelt-gemoppelt. Eine Zuweisung text = text.to_s ist kein Problem für den Interpreter, weil von rechts nach links ausgewertet wird. Außerdem könnte das text.to_s dann sowieso direkt in den Aufruf von draw_text.
@makenshi
Das mit dem texts ist doppelt-gemoppelt. Eine Zuweisung text = text.to_s ist kein Problem für den Interpreter, weil von rechts nach links ausgewertet wird. Außerdem könnte das text.to_s dann sowieso direkt in den Aufruf von draw_text.
...
Das habe ich an sich nur gemacht weil ich dachte das der Parameter "text" ja auch z.B. ein Integer sein könnte. Wenn man nun hergeht und text = text.to_s benutzt, dachte ich das der Versuch in eine Integervariable einen String zu verpacken eventuell einen Fehler auslöst. Hätte es denke ich auch.
Da du aber in der aktuellen Version ohnehin direkt beim parameter der draw_text Funktion direkt umwandelst, sollte das ohnehin egal sein.
Ruby hat soweit ich weiß keine explizite Typendeklarierung. So ist es mir z.B. mal passiert, dass ich die Standardvariablen in Floats umgewandelt hab, weil ich in einem Rubyscript geteilt habe.