-1
我正在製作一個基於平鋪的遊戲,有一個非常大的地圖,所以我不想將整個地圖保存在內存中,所以我想保存地圖並只加載它的一部分一次,我該怎麼做?保存一個整數的數組,然後加載某些元素
我想保存地圖作爲一個整數數組,並像劈成兩半的整數:我只是用在每個組塊陣列與瓷磚的數組,所以我可以在此刻
int id = basetile | abovetile << 8
剛剛更新塊我需要太多,但我已經注意到,我使用的內存爲配發這樣簡單的事情
編輯:
如何將我編輯),美已經把一個值(
public static void main(String[] args) {
File f = new File("file.sav");
f.delete();
try (FileChannel fc = new RandomAccessFile(f, "rw").getChannel()){
long buffersize = 100;
MappedByteBuffer mem = fc.map(FileChannel.MapMode.READ_WRITE, 0, buffersize);
mem.put(new byte[] {6, 4, 2});
mem.flip();
} catch (IOException e) {
e.printStackTrace();
}
}
如何
什麼代碼,你試過和你有麻煩嗎?你有沒有試過內存映射文件,因爲這避免了將任何數據加載到堆上? – 2014-12-27 14:26:24
如果'basetile'適合8位,那麼你可以使用'byte []'而不是'int []'。這會將內存使用量減少4倍,但是'byte []'使用起來可能非常棘手,因爲'byte'是有符號的(值範圍從-128到127而不是0到255)。 – 2014-12-27 14:29:52
Peter Lawrey的建議絕對值得一試。另外,通過用'ShortBuffer'或'IntBuffer'封裝'ByteBuffer',您可以輕鬆地在每個tile上花費不同的內存。 – hendrik 2014-12-27 14:36:12