पर बदलता है, क्या दाएं शीर्ष कोने पर किसी भी बनावट के बिना सरल सफेद टेक्स्ट प्रदर्शित करने का कोई आसान तरीका है जो कक्षा में प्रत्येक फ्रेम पर बदलता है जो रेडियरर को लागू करता है, ड्रॉफ्रेम विधि में? यह 2 डी है, इसलिए मुझे विश्वास है कि कोई भी बदलाव करने की जरूरत नहीं है। मुझे कई ट्यूटोरियल मिल गए हैं, लेकिन वे सभी बहुत अधिक कोड के साथ बहुत जटिल लगते हैं। शायद यह कोड की कुछ पंक्तियों के साथ किया जा सकता है? यदि यह संभव नहीं है, तो मौजूदा कोड को संशोधित किए बिना इसे करने का सबसे आसान तरीका क्या है? कृपया पूरा कोड दिखाएं क्योंकि मैं नौसिखिया हूं।पाठ को प्रदर्शित करना (जैसे स्कोर) जो प्रत्येक फ्रेम
उत्तर
मैं drawText कैनवास एक बिटमैप करते थे, लेकिन मैं अभी भी, एक बनावट के रूप में उपयोग करने के लिए शायद एक छोटे बिटमैप और फ़ॉन्ट आकार
bitmap = Bitmap.createBitmap(256, 256, Bitmap.Config.ARGB_8888);
canvas = new Canvas(bitmap);
h = (int)((((System.currentTimeMillis()/1000)/60)/60)%60);
m = (int)(((System.currentTimeMillis()/1000)/60)%60);
s = (int)((System.currentTimeMillis()/1000)%60);
paint = new Paint();
paint.setColor(Color.MAGENTA);
paint.setTextAlign(Align.CENTER);
paint.setTypeface(Typeface.DEFAULT_BOLD);
paint.setTextSize(55);
time = String.valueOf(h) + "h" + String.valueOf(m) + "m" + String.valueOf(s) + "s";
canvas.drawText(time, bitmap.getWidth()/2, 100, paint);
int[] textureIds = new int[1];
gl.glGenTextures(1, textureIds, 0);
textureId = textureIds[0];
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);
gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);
साथ अगर आप अध्याय 9 src/com.badlogic में here जाना था। androidgames.framework.gl.Font.java मैं बिटमैप फ़ॉन्ट्स के लिए उपयोग करता हूं और मैं कोडहेड्स बिटमैप फ़ॉन्ट जनरेटर
शायद आप कुछ कोड दिखा सकते हैं? धन्यवाद। –
मैंने कुछ कोड के साथ अपडेट किया है, मुझे यकीन नहीं है कि यह काम करेगा कि आप "हर फ्रेम" कैसे चाहते हैं, लेकिन मुझे लगता है कि – JRowan
geobits शायद बिटमैप फ़ॉन्ट लाइब्रेरी के बारे में सही है, मेरे पास एक कस्टम है जो इसे जोड़ता है कक्षाओं का एक पूरा समूह, मैं आपको कोड की तरफ इंगित कर सकता हूं? मैंने इसे – JRowan
रेंडरर एक ओपनजीएल विधि है, के साथ बिटमैपफोंट उत्पन्न करता हूं। ओपनजीएल ईएस मूल रूप से पाठ का समर्थन नहीं करता है। यह निम्न विकल्पों को छोड़ देता है:
- एक बनावट का उपयोग करें, एंड्रॉइड के कैनवास वर्ग का उपयोग करके इसे आकर्षित करें।
- लाइब्रेरी का उपयोग करें। यह संभवतः एक बनावट के लिए भी आकर्षित करेगा।
- बहुभुज के साथ पाठ बनाएँ।
चूंकि आपका प्रश्न ऐसे समाधान के लिए पूछ रहा है जो एक बनावट को आकर्षित नहीं करता है, तो 1 और 2 दोनों बाहर हैं। और चूंकि आप कुछ सरल चाहते हैं, 3 भी बाहर है। कोई अच्छा समाधान छोड़ना।
विचार करने का विकल्प GLSurfaceView के शीर्ष पर एक और दृश्य को लेना है जिसका आप उपयोग कर रहे हैं। आप आसानी से दो विचारों को ढेर करने के लिए रिलेवेटिवआउट का उपयोग कर सकते हैं, एक टेक्स्टव्यू होने के नाते आप स्क्रीन के ऊपरी दाएं कोने में एंकर कर सकते हैं। नीचे छद्म कोड:
<RelativeLayout ... />
<GLSurfaceView ... />
<TextView ... />
</RelativeLayout>
इस दृष्टिकोण से आपको अपना टेक्स्ट करने के लिए ओपनजीएल आवश्यकताओं से बाहर खींचने का लाभ है। मैंने इसे अपने कुछ ऐप्स पर सफलतापूर्वक किया है।
टेक्स्ट ओपनजीएल की तुलना में एक अलग परत में होना चाहिए।
<FrameLayout>
<GLSurfaceView/>
<LinearLayout android:layout_gravity="top|right" >
<TextView android:id="@+id/score" ... />
</LinearLayout>
</FrameLayout>
फ़्रेमलेआउट दृश्यों को दूसरे के शीर्ष पर एक स्थानांतरित करने की अनुमति देता है।
((TextView) findViewById(R.id.score)).setText("Your Score");
आप GLSurfaceView में से प्रत्येक के प्रतिपादन के बाद स्कोर लेआउट के redrawing मजबूर करने के लिए है कि ओपन पाठ के शीर्ष पर ड्रॉ से बचने की जरूरत हो सकता है: फिर साथ पाठ की स्थापना की। (इस बारे में निश्चित नहीं)
प्रदर्शन के लिए,
मेरी राय में (चौड़ाई और LinearLayout की ऊंचाई के लिए wrap_content) को छोटे से छोटा पाठ क्षेत्र बनाने के लिए, आप GLSurfaceView रैप करने के लिए एक RelativeLayout उपयोग कर सकते हैं , और जहां भी आप चाहते हैं उसे रखने के लिए एक और टेक्स्ट व्यू भी।फिर अपने प्रतिपादक निर्माता में,, TextView संदर्भ GLES20TriangleRenderer (संदर्भ संदर्भ, TextView टीवी) onDrawFrame विधि में पारित फोन
((Activity)mContext).runOnUiThread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
tv.setText(Math.random() + " random");
}
});
आप एक बिटमैप के लिए अपने स्कोर को पाठ आकर्षित करने के लिए की जरूरत है, और उपयोग इस बिटमैप के रूप में के बाद एक बनावट
बिटमैप पर एक पाठ आकर्षित करने के लिए आप इस कोड का उपयोग कर सकते हैं:
// Create and draw a texto to your bitmap.
Bitmap bm = Bitmap.createBitmap(300, 100, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bm);
Paint p = new Paint();
p.setColor(Color.RED);
c.drawText("YOUR SCORE", 0, 0, new Paint());
आपको API प्रदर्शन परियोजना जो एंड्रॉयड एसडीके नमूने के साथ आता है पर एक नज़र लेने के लिए कर सकते हैं। एक ओपनजीएल स्प्राइट टेक्स्ट नमूना है जो वही करता है जो आप चाहते हैं।
आप एमुलेटर (या उपकरण) पर एपीआई प्रदर्शन स्थापित करने और नेविगेट करके डेमो देख सकते हैं: एपीआई प्रदर्शन> ग्राफिक्स> OpenGL ES> स्प्राइट पाठ
यहाँ एक स्क्रीनशॉट है:
रेंडरर के ड्रॉफ्रेम विधि पर प्रत्येक फ्रेम पर स्क्रीन के निचले दाएं कोने में स्थित टेक्स्ट बदल दिया गया है।
आप अपने Android एसडीके नमूने निर्देशिका में स्रोत कोड पा सकते हैं: ApiDemos \ src \ कॉम \ उदाहरण \ एंड्रॉयड \ apis \ ग्राफिक्स \ spritetext
आप अपने प्रोजेक्ट में कुछ फ़ाइलों की प्रतिलिपि बनाने की आवश्यकता होगी और कोड की बहुत कम लाइनों के साथ एक ही कार्यक्षमता प्राप्त कर सकते हैं।
नमूना आवेदन: मैंने एपीआई डेमो परियोजना से कोड का पुन: उपयोग करके इसका प्रदर्शन करने के लिए नमूना आवेदन बनाया है। आप इसे यहां से प्राप्त कर सकते हैं - OpenGLText_eclipse_project.zip
संक्षेप में, आप Grid.java, LabelMaker.java, NumericSprite.java को पूरी तरह से पुन: उपयोग कर सकते हैं। फिर मेरे TextRenderer.java
में दिखाए गए उपर्युक्त वर्गों का उपयोग करने के लिए अपने रेंडरर में कोड की कुछ पंक्तियां जोड़ें, यह लगातार अद्यतन अपडेट के साथ दिखता है।
असल में, स्कोर प्रतिपादन इस के रूप में सरल है: CodeHead के बिटमैप फ़ॉन्ट जेनरेटर और एंड्रॉयड लोडर को देखने के लिए
LabelMaker mLabels = new LabelMaker();
mLabels.initialize(gl);
mLabels.beginAdding(gl);
int mLabelMsPF = mLabels.add(gl, "Score:", mLabelPaint);
mLabels.endAdding(gl);
mLabels.beginDrawing(gl, mWidth, mHeight);
mLabels.draw(gl, 0, 0, mLabelMsPF);
mLabels.endDrawing(gl);
NumericSprite mNumericSprite = new NumericSprite();
mNumericSprite.setValue(16);
mNumericSprite.draw(gl, 0, 0, mWidth, mHeight);
पुस्तक से सीखा है, यह अब कुछ भी नहीं दिखाता है –
क्या आपने एपीआई डेमो या मेरा नमूना आवेदन चलाया था? मेरा एप्लिकेशन स्प्राइट टेक्स्ट एपीआई डेमो का एक छंटनी संस्करण है क्योंकि मैंने त्रिभुज स्प्राइट को हटा दिया है। ताकि स्कोर को प्रस्तुत करने के लिए कोड की किस पंक्ति की आवश्यकता हो, इसका पालन करना आसान हो। आप निश्चित रूप से अपने ऐप के लिए स्क्रीन पर अधिक सामान खींच सकते हैं। – appsroxcom
+1 इसके लिए आवश्यक कोड निकालने के आपके निर्देशों के लिए धन्यवाद। मेरे लिए महान काम करता है :) – dcoz
आप बस अपनी Activity
के WindowManager
करने के लिए एक TextView
देते हैं और वहां से वह दिखा सकता है। जैसे दिए गए हैं।
TextView tv = new TextView(this);
tv.setText("FPS: 0");
//get WindowManager from Activity
WindowManager w = this.getWindowManager();
//setup view LayoutParams
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
0,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSPARENT);
//position
lp.gravity = Gravity.RIGHT | Gravity.TOP;
//attach view
w.addView(tv,lp);
तो एक अच्छा बिटमैप फ़ॉन्ट पुस्तकालय के साथ के माध्यम से
activity.runOnUiThread(new Runnable(){
@Override
public void run() {
tv.setText("FPS: " + fps);
}
});
- 1. फ्रेम द्वारा एनीमेशन प्रदर्शित करना?
- 2. स्थिर एसओएलआर स्कोर प्राप्त करना
- 3. समृद्ध पाठ को कुशलतापूर्वक संग्रहित और प्रदर्शित करना
- 4. Google Play गेम्स लीडरबोर्ड पर स्कोर सबमिट करना और नए रैंक प्रदर्शित करना
- 5. क्रोम बड़ी छवि प्रत्येक फ्रेम
- 6. UIImagePickerController के फ्रेम आकार को कॉन्फ़िगर करना
- 7. एंड्रॉइड कैमरा 2 प्रत्येक फ्रेम को संसाधित करता है और इसका पूर्वावलोकन प्रदर्शित करता है
- 8. डायरेक्टशो - वीडियो फ्रेम प्राप्त करना
- 9. सूची में प्रत्येक मूल्य के लिए प्रतिशत स्कोर की गणना
- 10. फ्रेम
- 11. चीनी पाठ को छेड़छाड़ करना
- 12. innerText/textContent प्रत्येक पाठ नोड
- 13. एसक्यूएल - एक प्रविष्टि प्रदर्शित करने वाली प्रविष्टियों को प्रदर्शित करना?
- 14. ओपन कैलाइस के प्रासंगिकता स्कोर को समझना
- 15. मल्टीलाइन नोटिफिकेशन प्रदर्शित करना
- 16. स्टार रेटिंग, विल्सन स्कोर अंतराल को कार्यान्वित करना
- 17. प्रदर्शित Traminer (आर) पाठ/तालिका प्रारूप
- 18. यदि पाठ फ्रेम फिट नहीं है
- 19. समृद्ध पाठ (जैसे जीमेल) में छवि चिपकाएं
- 20. प्रत्येक एनिमेटेड जीआईएफ फ्रेम को एक अलग BufferedImage
- 21. वीडियो के प्रत्येक फ्रेम में मेटाडेटा को कैसे संलग्न करें
- 22. एक लिंक को पूर्ण स्थान प्रदर्शित करना
- 23. पूर्वावलोकन फ्रेम को बिटमैप में परिवर्तित करना
- 24. फ्रेम दर को नियंत्रित करना या AVCaptureVideoPreviewLayer
- 25. सीएमके चर प्रदर्शित करना
- 26. सी ++: वर्ण प्रदर्शित करना
- 27. वास्तविक समय प्रदर्शित करना
- 28. Grails फील्ड त्रुटियों को प्रदर्शित करना
- 29. केवल तत्वों जो सीधे पाठ
- 30. संकेत प्रदर्शित करना
इस अद्यतन करते हैं, यह केवल कुछ लाइनें लग सकता है। यदि आपको लाइब्रेरी नहीं मिल रही है, तो इसमें बहुत कुछ लगेगा। – Geobits
@Gobits कोई भी सुझाव जिस पर मैं पुस्तकालय चुन सकता हूं? –
पिछली बार मैंने देखा कि मुझे वह नहीं मिला जो मैंने वही किया था। हालांकि, यह सिर्फ "कुछ संख्याएं प्रदर्शित नहीं" था, इसलिए आपके लिए कुछ हो सकता है, मैं सिर्फ हाथ से नहीं जानता। – Geobits