2011-07-13 34 views
5

Tôi đang tạo một trò chơi 2D cơ bản (cũng là một công cụ trò chơi) và tôi hiện đang phát triển các định dạng tệp cho dữ liệu của mình. Tất nhiên, để trò chơi này chạy, tôi sẽ cần bộ nhớ cache. Tôi thấy nó khá không chuyên nghiệp để lại tất cả các dữ liệu cho các trò chơi để không được trong một tập tin duy nhất (cũng không nhất thiết, miễn là các tập tin trong một định dạng bộ nhớ cache của một số loại).Cách tốt nhất để lưu trữ dữ liệu cho trò chơi của bạn? (Hình ảnh, bản đồ, và như vậy)

Vì vậy, đó là lý do tôi đến đây để hỏi. Tôi đã nghĩ đến việc thực hiện một tập tin zip nhưng tôi cảm thấy như đó không phải là cách tốt nhất cả. Tôi cũng đang nghĩ đến việc thực hiện một trình ghi nhị phân khác sẽ có tiêu đề (loại tệp, "vị trí") và một thẻ kèm theo cho mỗi tệp để có thể dễ dàng diễn giải. Nhưng tôi cảm thấy như vậy là không hiệu quả.

Vì vậy, vui lòng, bạn có ý tưởng nào không?

Lưu ý: Công cụ trò chơi này thực sự chỉ dành cho mục đích học tập.

tl; dr Tôi cần một cách hiệu quả để lưu trữ dữ liệu như hình ảnh cho trò chơi của tôi mà tôi đang thực hiện.

+0

Bạn cũng muốn ghi vào bộ nhớ cache hay chỉ đơn giản là hỏi về việc đóng gói tất cả nội dung tĩnh của mình? –

+0

Rất nhiều trò chơi lưu trữ hình ảnh và âm thanh dưới dạng tệp hình ảnh và âm thanh cơ bản. Nếu bạn thực sự muốn làm điều này, thêm nó sau khi trò chơi được thực hiện, nếu không nó sẽ làm chậm phát triển khi bạn phải biên dịch mã và tài sản. – thedaian

+0

@Dilum Ranatunga - Tôi cũng muốn có thể ghi vào bộ nhớ cache hoặc ít nhất có thể thêm nội dung mới. – Fellixombc

Trả lời

7

Bạn có thể lưu trữ bất kỳ đối tượng như .dat file:

public class MyGame implements Serializable 
{ 
    private static void saveGame(ObjectType YourObject, String filePath) throws IOException 
    { 
     ObjectOutputStream outputStream = null; 
     try 
     { 
      outputStream = new ObjectOutputStream(new FileOutputStream(filePath)); 
      outputStream.writeObject(YourObject); 
     } 
     catch(FileNotFoundException ex) 
     { 
      ex.printStackTrace(); 
     } 
     catch(IOException ex) 
     { 
      ex.printStackTrace(); 
     } 
     finally 
     { 
      try 
      { 
       if(outputStream != null) 
       { 
        outputStream.flush(); 
        outputStream.close(); 
       } 
      } 
      catch(IOException ex) 
      { 
       ex.printStackTrace(); 
      } 
     } 
    } 

    public static ObjectType loadGame(String filePath) throws IOException 
    { 
     try 
     { 
      FileInputStream fileIn = new FileInputStream(filePath); 
      ObjectInputStream in = new ObjectInputStream(fileIn); 
      return (ObjectType) in.readObject(); 
     } 
     catch(FileNotFoundException ex) 
     { 
      ex.printStackTrace(); 
     } 
     catch(IOException ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 
} 
+0

Ahh vâng, tôi đã sử dụng nó để viết và đọc các tập tin bản đồ của tôi. Đây là một trong những ý tưởng tôi đang xem xét, nhưng làm thế nào tôi có thể lưu trữ và quản lý các tập tin hình ảnh? – Fellixombc

+0

@ Fellixombc lưu trữ các hình ảnh như nó là (Jpg, gif, bmp, ... vv) –

+0

Oh Tôi đã không nhận ra rằng bạn có thể làm điều đó. Cảm ơn bạn. – Fellixombc

2

Tôi không nghĩ zip đó là một cách sai lầm. Đó là một cách khá tốt. Chỉ cần đặt tất cả mọi thứ trong một Jar-File. Bạn thậm chí sẽ có thể sử dụng trình nạp lớp để tải nó.

+0

+1: Jar là lựa chọn tốt hơn Zip, và sử dụng getResourceAsInputStream() để lấy bất kỳ tài nguyên nào từ trình nạp lớp nghĩa là bạn có thể có tệp này chứa thư mục để phát triển, sau đó trong một cái bình mà không thay đổi mã –

+0

Bạn không thể ghi vào JAR được chốt bởi trình nạp lớp. Vì vậy, giải pháp này sẽ thất bại như một bộ nhớ cache ghi. –

+0

Nghe có vẻ khá thú vị, và sẽ là một trải nghiệm học tập tốt, cảm ơn bạn! – Fellixombc

1

Vì lý do thực dụng, tôi khuyên bạn nên sử dụng nhiều tệp nhưng đặt tất cả chúng vào một thư mục con trong temp.

Nhưng nếu một phần của tập thể dục học tập của bạn có liên quan đến chủ đề này, sau đây là gợi ý của tôi:

Đầu tiên, hãy tránh xa bất kỳ định dạng như bưu điện, nơi có một hình phạt nặng để xóa, cập nhật, bổ sung, nhảy . Ngay cả với các tệp chỉ mục của một JAR, chúng còn kém cho bất kỳ thứ gì ngoài nén.

Vì vậy, bạn có thể đọc trên các hệ thống tệp. Về cơ bản, bạn đang viết một hệ thống tập tin mà 'đĩa' chỉ là một tập tin nhị phân. Điều đó sẽ cung cấp cho bạn một ý tưởng cấp cao về các bảng phân bổ, vv Để thực hiện một thiết kế như vậy, bạn cần truy cập đọc/ghi vào tệp cơ bản; xem java.io.RandomAccessFile

Cuối cùng, nếu bạn sẵn sàng sử dụng Java7, bạn có thể phát với filesystem SPIs mới.

+0

Cảm ơn bạn rất nhiều!Tôi sẽ tiếp tục và xem xét RandomAccess Tệp và xem tôi có thể làm gì. Và có, tôi đang cố gắng tìm hiểu những cách thức mới để làm những điều cùng với việc khám phá java nhiều hơn một chút! – Fellixombc

Các vấn đề liên quan