เหตุใดฉันไม่สามารถอ่านไฟล์. ttf เมื่อเรียกใช้การกำหนดค่า Android


9

เมื่อทำงานหรือแก้ไขจุดบกพร่องเกมของฉันบนอุปกรณ์ Android ฉันได้รับข้อผิดพลาดนี้ใน logcat:

com.badlogic.gdx.utils.GdxRuntimeException: ข้อผิดพลาดในการอ่านไฟล์: data / fonts / myFont.ttf (ภายใน)

สิ่งที่สร้างโดยบรรทัดรหัสนี้:

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);

ที่fontFileถูกกำหนดเช่นนี้:

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

สิ่งนี้จะไม่เกิดขึ้นเมื่อฉันเรียกใช้การกำหนดค่าเดสก์ท็อป

ฉันรู้ว่าสำหรับการกำหนดค่าเดสก์ท็อปคุณต้องกำหนดไดเรกทอรีการทำงานของโครงการของคุณ แต่ฉันไม่เห็นตัวเลือกดังกล่าวในการกำหนดค่า android และมันก็ไม่มีเหตุผลดังนั้นฉันจึงไม่คิดว่ามันเป็น "ไดเรกทอรีทำงาน" - ปัญหาที่เกี่ยวข้อง .

เห็นได้ชัดว่าไฟล์อยู่ในเส้นทางที่ถูกต้อง

โปรดทราบว่าทุกอย่างทำงานได้ดีในโครงการก่อนหน้าของฉัน ฉันสร้างโครงการใหม่นี้โดยการสร้าง prj ว่างเปล่าใหม่โดยใช้ libgdx-setup แล้วคัดลอกคลาสและแพ็คเกจทั้งหมดจากโครงการเก่า ดังนั้นอาจเป็นปัญหาเกี่ยวกับไฟล์ Gradle บางไฟล์?


1
คุณจะได้รับFileNotFoundException? ระบบไฟล์ Android คำนึงถึงขนาดตัวพิมพ์ตรวจสอบให้แน่ใจว่าคุณเขียนถูกต้อง "myFont.ttf" นั้นแตกต่างจาก "myFont.TTF"
Alex Sifuentes

ใช่ฉันไม่ได้อ่านใน logcat นี่คือส่วนอื่น ๆ ของข้อความ logcat: เกิดจาก: java.io.FileNotFoundException: data / fonts / myFont.ttf ที่ android.content.res.AssetManager.openAsset (Native วิธีการ) ที่ android.content.res.AssetManager.open (AssetManager.java:359) ที่ com.badlogic.gdx.backends.android.AndroidFileHandle.read (AndroidFileHandle.java:75) ฉันแน่ใจว่าไฟล์นั้นถูกต้องอยู่ภายใน assets / data / fonts / myFont.ttf ฉันคิดว่าด้วยเหตุผลบางอย่างที่ Android ไม่ได้มองหาในโฟลเดอร์ที่ถูกต้อง ... แต่การรันการตั้งค่าเดสก์ท็อปทำงานได้ดี
Davide Cattani

อาจเป็นการดีกว่าถ้าคุณติดต่อฝ่ายสนับสนุนด้านเทคนิคของ Android
Wow_mentor

คำตอบ:


1

หากระบบไฟล์เดสก์ท็อปทดสอบของคุณกำลังทำงานบน Windows NTFS และระบบไฟล์ของอุปกรณ์ Android นั้นเป็นระบบดั้งเดิมของ Android ความแตกต่างก็คือไดรเวอร์ระบบไฟล์

ไดรเวอร์ระบบไฟล์ Windows ไม่คำนึงถึงขนาดตัวพิมพ์ แต่ Android ใช้ Linux ซึ่งเป็นตัวพิมพ์เล็ก

ตรวจสอบให้แน่ใจว่าการใช้อักษรตัวพิมพ์ใหญ่ของคุณถูกต้องในไฟล์

นอกจากนี้ฉันสังเกตเห็นว่าคุณกำลังใช้เส้นทางสัมบูรณ์โดยไม่มีตัวแปรสภาพแวดล้อม สิ่งนี้เป็นแบบไดนามิกไปยังไดเรกทอรีทำงานปัจจุบันของคุณบน Android ดังนั้นหากแอพพลิเคชั่นทำงานจากไดเรกทอรีอื่นมันจะค้นหาที่ต่าง ๆ สำหรับไฟล์ สิ่งนี้อาจทำให้เกิดปัญหาระหว่างการแก้ไขระบบต่างๆ ให้เส้นทางที่สมบูรณ์ใน Android เสมอ ซึ่งหมายความว่าเริ่มต้นด้วยตัวแปรสภาพแวดล้อมหรือไดเรกทอรีราก (เช่น "/") เพื่อความสามารถในการย้ายแอปไปยังการ์ด SD จะเป็นการดีกว่าถ้าใช้ตัวแปรสภาพแวดล้อม

นอกจากนี้คุณไม่ควรใช้ไดเรกทอรีข้อมูลแบบไดนามิกสำหรับแบบอักษรของคุณ คุณควรรวมมันไว้ในแพ็คเกจของแอพ


0

ฉันเชื่อว่าสำหรับ android คุณต้องมีโฟลเดอร์สินทรัพย์ที่มีสินทรัพย์ทั้งหมดโหลดไว้โฟลเดอร์ทรัพย์สินนี้จะอยู่ในโครงการ Android มากกว่าโครงการหลัก เดสก์ท็อป HTML และอื่น ๆ ทั้งหมดใช้สินทรัพย์โครงการหลักเพื่อให้ทำงานได้ดี แต่ Android ต้องการโฟลเดอร์ทรัพย์สิน คุณมีมันไหม


2
เดสก์ท็อป HTML และหลักใช้โฟลเดอร์สินทรัพย์ Android ซึ่งเป็นโฟลเดอร์สินทรัพย์เดียวในโครงการ
Davide Cattani

0

ตัวเลือกคือ:

1) ลองใช้ตัวพิมพ์ใหญ่ TTF แทนที่จะเป็น ttf ในทุกรหัสของคุณ - ในกรณีที่ไฟล์ต้นฉบับของคุณมีส่วนต่อท้าย TTF เนื่องจาก android เป็นแบบตัวพิมพ์เล็กและใหญ่

2) ในไฟล์ build.gradle ภายใต้โมดูล Android ของคุณตรวจสอบให้แน่ใจว่า:

assets.srcDirs = ['assets']

และไม่:

assets.srcDirs = ['assetManager']

อีกนัยหนึ่งคือตรวจสอบให้แน่ใจว่าเป็นโฟลเดอร์สินทรัพย์ android ของคุณ อันนี้ใช้ได้สำหรับฉัน จากนั้นล้างโครงการสร้างและถอนการติดตั้งแอพเก่าจากอุปกรณ์ Android


[DMGregory] เข้าใจแล้วตอบแก้ไข
Yan.F

-1

ลองคัดลอกไฟล์แบบอักษรลงในโฟลเดอร์ทรัพย์สินโดยตรง


-1

เพียงแค่ทำสิ่งหนึ่งที่คุณสามารถเปลี่ยนวิธีการที่ตอนนี้ของคุณ คุณสามารถใช้เครื่องมือ "hiero" สำหรับการสร้างแบบอักษร เพียงดาวน์โหลดไฟล์ jar "hiero" จากลิงค์ต่อไปนี้

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

โดยใช้ hiero คุณจะสามารถเข้าถึงแบบอักษรเกือบทั้งหมด หลังจากสร้างฟอนต์แล้วให้บันทึกลงในโฟลเดอร์ "ทรัพย์สิน" ไฟล์ Android ของโครงการและเพิ่มรหัส folowing

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

ลองใช้วิธีนี้ มันจะทำงาน.


ขออภัยต้องลงคะแนนนี้ ใช้ตัวFreeTypeFontGeneratorช่วยให้คุณนำเข้าแบบอักษรใด ๆ และเขียนด้วยขนาดใดก็ได้ ตำแหน่งที่ Hiero ต้องการให้คุณสร้างบิตแมปสำหรับแต่ละแบบอักษรและขนาด ฉันยอมรับว่าชุดรูปแบบเป็นเครื่องมือที่ยอดเยี่ยม แต่นี่ไม่ใช่การตอบคำถาม
Madmenyo

@Madmenyo สวัสดีฉันแค่ให้วิธีอื่นในการแก้ปัญหาของเขา แนวคิดดังกล่าวไม่ผิด ซึ่งเป็นทางเลือกในการแก้ปัญหาของเขา ฉันไม่รู้ว่าอะไรคือเหตุผลที่แน่นอนสำหรับการลงคะแนนเสียง
Gokul Sreenivasan

คุณรู้ได้อย่างไร? บางทีเขาอาจต้องการข้อความที่สร้างขึ้นแบบไดนามิกจำนวนมากชุดรูปแบบไม่สามารถช่วยได้
Madmenyo

@Madmenyo สวัสดีคุณอาจอ่านคำถามของเขาก่อน ฉันได้ให้ทางเลือกอื่น
Gokul Sreenivasan

เขาต้องการโหลด ttf ที่คุณแนะนำให้สร้างฟอนต์บิตแมป
Madmenyo

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.