Tại sao tôi không thể đọc tệp .ttf khi chạy cấu hình Android?


9

Khi chạy hoặc gỡ lỗi trò chơi của tôi trên thiết bị Android, tôi gặp lỗi này trong logcat:

com.badlogic.gdx.utils.GdxR nbException: Lỗi đọc tệp: data / font / myFont.ttf (Internal)

Được tạo bởi dòng mã này:

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);

nơi fontFileđược định nghĩa như thế này:

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

Điều này không xảy ra khi tôi chạy cấu hình máy tính để bàn.

Tôi biết rằng đối với cấu hình máy tính để bàn, bạn phải xác định thư mục làm việc của dự án của mình, nhưng tôi không thấy tùy chọn như vậy trong cấu hình Android và nó cũng không có ý nghĩa gì, vì vậy tôi không nghĩ đó là vấn đề liên quan đến "thư mục làm việc" .

Rõ ràng, các tập tin là trong đường dẫn chính xác.

Cũng lưu ý rằng mọi thứ hoạt động tốt trong dự án trước đây của tôi. Tôi đã tạo dự án mới này bằng cách tạo một prj trống mới bằng cách sử dụng libgdx-setup và sau đó sao chép tất cả các lớp và gói từ dự án cũ. Vì vậy, có lẽ đó là một vấn đề liên quan đến một số tập tin Gradle?


1
bạn đang nhận được một FileNotFoundException? Hệ thống tệp Android phân biệt chữ hoa chữ thường, đảm bảo rằng bạn đã viết chính xác "myFont.ttf" khác với "myFont.TTF"
Alex Sifuentes

Có, tôi đã không đọc nó trong logcat, đây là phần khác của thông điệp logcat: Nguyên nhân bởi: java.io.FileNotFoundException: data / font / myFont.ttf tại android.content.res.AssetManager.openAsset (Bản địa Phương thức) tại android.content.res.AssetManager.open (AssetManager.java:359) tại com.badlogic.gdx.backends.android.AndroidFileHandle.read (AndroidFileHandle.java:75) Tôi chắc chắn rằng tệp này là chính xác, bên trong tài sản / dữ liệu / phông chữ / myFont.ttf Tôi nghĩ vì một số lý do mà Android không tìm đúng thư mục ... Nhưng chạy cấu hình máy tính để bàn hoạt động tốt
Davide Cattani

Có lẽ tốt hơn là liên hệ với bộ phận hỗ trợ công nghệ Android?
Wow_mentor

Câu trả lời:


1

Nếu hệ thống tệp máy tính để bàn thử nghiệm của bạn đang chạy trên Windows NTFS và hệ thống tệp thiết bị Android là trên Android gốc, sự khác biệt nằm ở trình điều khiển hệ thống tệp.

Các trình điều khiển hệ thống tập tin Windows không phân biệt chữ hoa chữ thường nhưng Android sử dụng Linux, phân biệt chữ hoa chữ thường.

Hãy chắc chắn rằng viết hoa của bạn là chính xác trên tập tin.

Ngoài ra, tôi nhận thấy bạn đang sử dụng một đường dẫn tuyệt đối không có biến môi trường. Đây là động cho thư mục làm việc hiện tại của bạn trên Android. Do đó, nếu ứng dụng được chạy từ một thư mục khác, nó sẽ tìm ở một nơi khác cho tệp. Điều này có thể gây ra vấn đề giữa các phiên bản hệ thống khác nhau. Luôn đưa ra đường dẫn tuyệt đối trong Android. Điều này có nghĩa là bắt đầu bằng một biến môi trường hoặc thư mục gốc (nghĩa là "/") Để có thể di chuyển ứng dụng sang thẻ SD, tốt hơn là sử dụng các biến môi trường.

Ngoài ra, bạn không nên sử dụng thư mục dữ liệu động cho phông chữ của mình. Bạn nên gói nó vào gói ứng dụng của bạn.


0

Tôi tin rằng đối với Android bạn cần có một thư mục tài sản với tất cả các tài sản được tải vào nó, thư mục tài sản này sẽ nằm trong dự án Android chứ không phải là dự án cốt lõi. Máy tính để bàn, HTML, v.v ... đều sử dụng tài sản dự án cốt lõi để chúng hoạt động tốt, nhưng Android cần thư mục tài sản riêng. bạn có cái nào cho nó không?


2
HTML máy tính để bàn và lõi sử dụng thư mục tài sản Android, là thư mục tài sản duy nhất trong dự án.
Davide Cattani

0

Các tùy chọn là:

1) Hãy thử chữ hoa TTF thay vì ttf trong tất cả mã của bạn - trong trường hợp tệp gốc của bạn có hậu tố TTF, vì Android phân biệt chữ hoa chữ thường.

2) Trong tệp build.gradle trong mô-đun Android của bạn, đảm bảo rằng:

assets.srcDirs = ['assets']

Và không:

assets.srcDirs = ['assetManager']

Nói cách khác, đảm bảo thư mục tài sản Android của bạn. cái này làm việc cho tôi sau đó dọn dẹp dự án xây dựng và gỡ cài đặt ứng dụng cũ khỏi thiết bị Android.


[DMGregory] đã nhận nó, trả lời chỉnh sửa.
Yan.F

-1

Hãy thử sao chép các tập tin phông chữ trực tiếp vào thư mục tài sản.


-1

Chỉ cần làm một điều bạn có thể thay đổi phương pháp mà sau đây của bạn. bạn có thể sử dụng công cụ "hiero" để tạo phông chữ. Chỉ cần tải xuống tệp jar "hiero" từ liên kết sau

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

bằng cách sử dụng hiero, bạn sẽ có thể truy cập gần như tất cả các phông chữ. Sau khi tạo phông chữ, hãy lưu nó vào thư mục "tài sản" tệp dự án Android của bạn và thêm mã folowing.

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

chỉ cần thử phương pháp này. nó sẽ làm việc


Xin lỗi, phải downvote này. Sử dụng FreeTypeFontGeneratorcho phép bạn nhập bất kỳ phông chữ nào và viết với nó ở bất kỳ kích thước nào. Trường hợp Hiero yêu cầu bạn tạo bitmap cho từng phông chữ và kích thước. Tôi đồng ý rằng hiero là một công cụ tuyệt vời nhưng điều này không trả lời câu hỏi.
Madmenyo

@Madmenyo Xin chào, tôi chỉ đưa ra một cách khác để giải quyết vấn đề của anh ấy. Khái niệm trên không sai. Đó là giải pháp thay thế cho vấn đề của mình. Tôi không biết lý do chính xác để bỏ phiếu là gì.
Gokul Sreenivasan

Làm sao bạn biết? Có lẽ anh ta cần rất nhiều văn bản được tạo động, hiero không giúp điều đó.
Madmenyo

@Madmenyo Xin chào, bạn có thể đọc câu hỏi của anh ấy trước. Tôi đã đưa ra một giải pháp thay thế.
Gokul Sreenivasan

Anh ta muốn tải ttf mà bạn đề nghị tạo phông chữ bitmap.
Madmenyo

-1

Hãy chắc chắn rằng các tập tin nằm trong / android / tài sản.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.