2012-10-15 39 views
5

Tôi đang tạo một trò chơi với studio game XNA và bây giờ tôi muốn viết lại nó trong Java. Nó giống như một bản sao Minecraft 2D. Để phát hiện va chạm, tôi phải lặp qua tất cả các khối trong trò chơi để kiểm tra xem người chơi có va chạm với một khối không. Với một số lượng lớn các khối, nó là không thể làm như vậy, vì vậy tôi đã thực hiện một hệ thống lưới điện. Tôi chia thế giới thành lưới chứa các khối, và đặt chúng vào một từ điển.Từ điển Java <Chuỗi, Danh sách <Object>>

Dictionary<string, List<Block>> gameBlocks; 

Bây giờ tôi chỉ có thể lặp qua các khối trong lưới hiện tại.

Đây là phương pháp để đăng ký một khối:

public void RegisterBlock(Block block) 
{ 
    idX = (int)(block.blockPosition.X/width); 
    idY = (int)(block.blockPosition.Y/height); 
    string id = idX.ToString() + "_" + idY.ToString(); 
    if (gameBlocks.ContainsKey(id)) 
    { 
     gameBlocks[id].Add(block); 
    } 
    else 
    { 
     gameBlocks.Add(id, new List<Block>()); 
     gameBlocks[id].Add(block); 
    } 
} 

Bây giờ tôi đang cố gắng để viết lại nó trong Java nhưng tôi không biết làm thế nào để đặt một cái gì đó vào một từ điển.

Trả lời

0

Java có tên là HashMap có thể hữu ích cho bạn. Đây là tài liệu cho HashMap.

Ví dụ: giao diện Map

HashMap<string, List<Block>> 
7

Sử dụng Java và HashMap lớp. Phương pháp của bạn sẽ trông giống như thế này trong Java:

private Map<String, List<Block>> gameBlocks = new HashMap<String, List<Block>>(); // Java 6 
// OR: 
private Map<String, List<Block>> gameBlocks = new HashMap<>(); // Java 7 

public void registerBlock(Block block) { 
    idX = (int)(block.blockPosition.X/width); 
    idY = (int)(block.blockPosition.Y/height); 
    String id = idX + "_" + idY; 
    if (gameBlocks.containsKey(id)) { 
     gameBlocks.get(id).add(block); 
    } else { 
     gameBlocks.put(id, new ArrayList<Block>()); 
     gameBlocks.get(id).add(block); 
    } 
} 

Lưu ý một số sửa chữa tôi đã thực hiện cho các kiểu định dạng/đặt tên được đề xuất của Java.

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