Android कॉन्फ़िगरेशन चलाते समय मैं .ttf फ़ाइल क्यों नहीं पढ़ सकता?


9

एंड्रॉइड डिवाइस पर अपने गेम को चलाने या डिबग करने पर, मुझे यह त्रुटि लॉगकैट में मिलती है:

com.badlogic.gdx.utils.GdxRuntimeException: फ़ाइल पढ़ने में त्रुटि: डेटा / फोंट / myFont.ttf (आंतरिक)

जो इस कोड लाइन द्वारा बनाया गया है:

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);

जहां fontFileइस तरह परिभाषित किया गया है:

FileHandle fontFile = Gdx.files.internal("data/fonts/myFont.ttf");

यह तब नहीं होता है जब मैं डेस्कटॉप कॉन्फ़िगरेशन चलाता हूं।

मुझे पता है कि डेस्कटॉप कॉन्फ़िगरेशन के लिए आपको अपनी परियोजना की कार्यशील निर्देशिका को परिभाषित करना होगा, लेकिन मुझे एंड्रॉइड कॉन्फ़िगरेशन में ऐसा कोई विकल्प दिखाई नहीं देता है और इसका कोई मतलब भी नहीं है, इसलिए मुझे नहीं लगता कि यह "कार्यशील निर्देशिका" -संबद्ध समस्या है ।

जाहिर है, फ़ाइल सही रास्ते में है।

यह भी ध्यान दें कि मेरे पिछले प्रोजेक्ट में सब कुछ ठीक रहा। मैंने इस नए प्रोजेक्ट को libgdx-setup का उपयोग करके एक नया ब्लैंक prj बनाया और फिर पुराने प्रोजेक्ट से सभी वर्गों और पैकेजों की नकल की। तो शायद यह कुछ ग्रेड फ़ाइल से संबंधित समस्या है?


1
क्या आपको मिल रही है FileNotFoundException? एंड्रॉइड फाइल-सिस्टम केस सेंसिटिव है, सुनिश्चित करें कि आपने इसे "myFont.ttf" लिखा है, यह अलग है कि "myFont.TTF"
एलेक्स सैफुएंट्स

हां, मैंने इसे logcat में नहीं पढ़ा था, यहाँ logcat संदेश का दूसरा भाग है: इसके कारण: java.io.FileNotFoundException: data / fonts / myFont.ttf at android.content.res.ssetManager.openAsset (मूल निवासी) Method) android.content.res.ssetManager.open (AssetManager.java:359) पर com.badlogic.gdx.backends.android.AndroidFileHandle.read (AndroidFileHandle.java:75) मुझे यकीन है कि फ़ाइल सही है, यह अंदर है। संपत्ति / डेटा / फोंट / myFont.ttf मुझे लगता है कि किसी कारण से एंड्रॉइड सही फ़ोल्डर में नहीं दिख रहा है ... लेकिन डेस्कटॉप कॉन्फ़िगरेशन ठीक काम करता है
Davide Cattani

शायद एंड्रॉइड तकनीकी सहायता से संपर्क करना बेहतर है?
वॉव_मेंटर

जवाबों:


1

यदि आपका परीक्षण डेस्कटॉप फाइल सिस्टम विंडोज एनटीएफएस पर चल रहा है और एंड्रॉइड डिवाइस फाइल सिस्टम एंड्रॉइड देशी पर है, तो अंतर फाइलसिस्टम ड्राइवरों में है।

विंडोज फाइलसिस्टम ड्राइवर संवेदनशील नहीं हैं, लेकिन एंड्रॉइड लिनक्स का उपयोग करता है जो कि संवेदनशील है।

सुनिश्चित करें कि फ़ाइल पर आपका कैपिटलाइज़ेशन सही है।

इसके अतिरिक्त, मैंने देखा कि आप बिना पर्यावरण चर वाले निरपेक्ष पथ का उपयोग कर रहे थे। यह Android पर आपकी वर्तमान कार्यशील निर्देशिका के लिए गतिशील है। इसलिए यदि ऐप किसी अलग डायरेक्टरी से चलाया जाता है तो यह फाइल के लिए अलग जगह पर दिखेगा। यह विभिन्न सिस्टम संशोधनों के बीच समस्याओं का कारण बन सकता है। हमेशा Android में पूर्ण पथ दें। इसका मतलब या तो एक पर्यावरणीय चर या मूल निर्देशिका से शुरू होता है (यानी "/") एप्लिकेशन को एसडी कार्ड में स्थानांतरित करने में सक्षम होने के लिए पर्यावरण चर का उपयोग करना बेहतर है।

इसके अतिरिक्त, आपको अपने फ़ॉन्ट के लिए डायनामिक डेटा निर्देशिका का उपयोग नहीं करना चाहिए। आपको इसे अपने ऐप के पैकेज में बंडल करना चाहिए।


0

मुझे विश्वास है कि एंड्रॉइड के लिए आपके पास एक संपत्ति फ़ोल्डर होना चाहिए जिसमें सभी संपत्तियां भरी हुई हैं, यह संपत्ति फ़ोल्डर कोर प्रोजेक्ट के बजाय एंड्रॉइड प्रोजेक्ट में होगी। डेस्कटॉप, HTML, आदि सभी कोर प्रोजेक्ट एसेट का उपयोग करते हैं ताकि वे ठीक काम करें, लेकिन एंड्रॉइड को अपने एसेट फ़ोल्डर की आवश्यकता होती है। क्या आपके पास इसके लिए एक है?


2
डेस्कटॉप HTML और कोर Android संपत्ति फ़ोल्डर का उपयोग करते हैं, जो कि परियोजना का एकमात्र संपत्ति फ़ोल्डर है।
डेविद कट्टानी

0

विकल्प हैं:

1) अपने सभी कोड में ttf के बजाय TTF ऊपरी मामले को आज़माएं - यदि आपकी मूल फ़ाइल में TTF प्रत्यय है, क्योंकि Android केस संवेदी है।

2) अपने Android मॉड्यूल के तहत build.gradle फ़ाइल में सुनिश्चित करें कि:

assets.srcDirs = ['assets']

और नहीं:

assets.srcDirs = ['assetManager']

दूसरे शब्दों में यह सुनिश्चित करें कि आपके Android संपत्ति फ़ोल्डर। यह एक मेरे लिए काम किया। फिर स्वच्छ निर्माण परियोजना, और Android डिवाइस से पुराने एप्लिकेशन की स्थापना रद्द करें।


[DMGregory] को मिला, उत्तर संपादित किया गया।
यान.फ।

-1

फ़ॉन्ट फ़ाइलों को सीधे संपत्ति फ़ोल्डर में कॉपी करने का प्रयास करें।


-1

बस एक काम करो आप अपने बाद के तरीके को बदल सकते हैं। आप फ़ॉन्ट निर्माण के लिए "hiero" टूल का उपयोग कर सकते हैं। बस नीचे दिए गए लिंक से "hiero" जार फ़ाइल डाउनलोड करें

https://libgdx.badlogicgames.com/tools.html

hiero का उपयोग करके आप लगभग सभी फोंट का उपयोग कर पाएंगे। फोंट बनाने के बाद इसे अपने एंड्रॉइड प्रोजेक्ट फाइल्स "एसेट" फ़ोल्डर में सेव करें और फॉलिंग कोड जोड़ें।

     private BitmapFont font;
     font = new BitmapFont(Gdx.files.internal("myNewFontCreatedByHiero.fnt"));

बस इस विधि का प्रयास करें। यह काम करेगा।


क्षमा करें, इसे नीचे करना होगा। FreeTypeFontGeneratorचलो का उपयोग करते हुए आप किसी भी फ़ॉन्ट को आयात करते हैं और इसके साथ किसी भी आकार में लिखते हैं। जहां Hiero के लिए आपको प्रत्येक फ़ॉन्ट और आकार के लिए बिटमैप बनाने की आवश्यकता होती है। मैं मानता हूं कि hiero एक बेहतरीन टूल है लेकिन यह सवाल का जवाब नहीं दे रहा है।
Madmenyo

@ मैडमैनो हाय, मैं बस उसकी समस्या को हल करने का एक वैकल्पिक तरीका देता हूं। उपरोक्त अवधारणा गलत नहीं है। जो उसकी समस्या का वैकल्पिक हल है। मुझे नहीं पता कि डाउन वोट का सही कारण क्या है।
गोकुल श्रीनिवासन

आपको कैसे मालूम? हो सकता है कि उसे गतिशील रूप से उत्पन्न पाठ की बहुत आवश्यकता है, हिरेओ उस के साथ मदद नहीं करता है।
मद्मान्यो

@ मैडमैनो हाय, आप पहले उसका प्रश्न पढ़ सकते हैं। मैंने एक वैकल्पिक समाधान दिया है।
गोकुल श्रीनिवासन

वह एक बिटमैप फ़ॉन्ट बनाने का सुझाव देते हुए ttf लोड करना चाहता है।
मदनमयो

-1

सुनिश्चित करें कि फाइलें अंदर / Android / आस्तियों में हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.