Gibt es eine einfache Möglichkeit, einfachen weißen Text ohne Texturen in der rechten oberen Ecke anzuzeigen, die sich bei jedem Bild in der Klasse ändert, die Renderer in der Methode onDrawFrame implementiert? Es ist 2D, also muss ich keine Transformationen machen, glaube ich. Ich habe viele Tutorials gefunden, aber alle scheinen zu komplex mit zu viel Code zu sein. Vielleicht könnte es nur mit ein paar Zeilen Code gemacht werden? Wenn das nicht möglich ist, was ist der einfachste Weg, dies zu tun, ohne zu viel Code zu verändern? Bitte zeigen Sie den vollständigen Code, da ich ein Neuling bin.
Renderer ist eine OpenGL-Methode. OpenGL ES unterstützt von Natur aus keinen Text. Dies lässt die folgenden Optionen übrig:
Da Ihre Frage nach einer Lösung fragt, die nicht zu einer Textur führt, sind 1 und 2 beide out. Und da du etwas Einfaches willst, ist auch 3 out. Lasst keine guten Lösungen.
Eine Alternative, die in Betracht gezogen werden sollte, ist das Überlagern einer anderen Ansicht oberhalb der GLSurfaceView, die Sie verwenden. Sie können ein RelativeLayout verwenden, um zwei Ansichten einfach zu stapeln. Eine davon ist eine Textansicht, die Sie an der oberen rechten Ecke des Bildschirms verankern können. Pseudocode unten:
%Vor%Dieser Ansatz hat den Vorteil, dass Sie die OpenGL-Anforderungen für Ihren Text umgehen müssen. Ich habe dies erfolgreich mit ein paar meiner Apps gemacht.
Sie können sich das API Demos-Projekt ansehen, das mit den Android SDK-Beispielen geliefert wird. Es gibt ein OpenGL Sprite Text-Beispiel, das genau das tut, was Sie wollen.
Sie können die Demo sehen, indem Sie API-Demos auf dem Emulator (oder Gerät) installieren und navigieren zu: API-Demos & gt; Grafiken & gt; OpenGL ES & gt; Sprite Text
Hier ist ein Screenshot:
Der Text in der unteren rechten Ecke des Bildschirms wird für jedes Bild in der onDrawFrame-Methode des Renderers geändert.
Sie finden den Quellcode in Ihrem Android SDK-Beispielverzeichnis: ApiDemos \ src \ com \ Beispiel \ android \ apis \ graphics \ spritetext
Sie müssen einige Dateien in Ihr Projekt kopieren und mit wenigen Zeilen Code die gleiche Funktionalität erreichen.
Beispielanwendung : Ich habe eine Beispielanwendung erstellt, um dasselbe zu demonstrieren, indem ich Code aus dem API-Demos-Projekt wiederverwende. Sie können es von hier bekommen - OpenGLText_eclipse_project.zip
Kurz gesagt, Sie können Grid.java, LabelMaker.java, NumericSprite.java vollständig wiederverwenden. Fügen Sie dann einige Zeilen Code in Ihren Renderer ein, um die oben genannten Klassen zu verwenden, wie in meinem TextRenderer.java
gezeigtSo sieht es aus, wenn der Score kontinuierlich aktualisiert wird.
Grundsätzlich ist das Rendern der Punkte so einfach:
%Vor%Sehen Sie sich den Bitmap-Font-Generator von CodeHead und den Android Loader an und versuchen Sie, diesen Code zu verwenden.
Ich habe eine Bitmap-Zeichenfläche drawText verwendet, aber ich musste sie trotzdem als Textur verwenden, wahrscheinlich mit einer kleineren Bitmap und Schriftgröße
%Vor%Wenn Sie hier in Kapitel 9 src / com.badlogic.androidgames.framework.gl gehen .Font.java ist was ich für Bitmap-Fonts verwende und ich erzeuge die Bitmapfonts mit Codeheads Bitmap Font Generator
Der Text sollte sich in einer anderen Ebene als die OpenGL-Datei befinden.
%Vor%Mit FrameLayout können Ansichten übereinander gestapelt werden. Setzen Sie den Text dann mit:
%Vor%Sie müssen möglicherweise das Neuzeichnen des Bewertungslayouts nach jedem Rendering von GLSurfaceView erzwingen, um zu vermeiden, dass OpenGL über den Text gezeichnet wird. (bin mir nicht sicher)
Um die Leistung zu verbessern, machen Sie den Textbereich so klein wie möglich (wrap_content für Breite und Höhe des LinearLayout)
Meiner Meinung nach können Sie ein RelativeLayout verwenden, um die GLSurfaceView einzubinden, und auch eine weitere TextView, die Sie einfügen können, wo immer Sie möchten. Übergeben Sie dann in Ihrem Renderer-Konstruktor die TextView-Referenz GLES20TriangleRenderer (Kontext Kontext, TextView TV) Rufen Sie in der onDrawFrame-Methode
auf %Vor% Sie könnten einfach eine TextView
an Ihre Activity
WindowManager
anhängen und von dort aus anzeigen. Wie folgt.
Aktualisieren Sie dies dann über
%Vor%