Tôi đã tích hợp thành công thư viện Bullet Vật lý vào hệ thống thực thể / thành phần của mình. Các thực thể có thể va chạm với nhau. Bây giờ tôi cần cho phép chúng va chạm với địa hình vốn là hữu hạn và giống như khối lập phương (nghĩ InfiniMiner hoặc nó là bản sao Minecraft ). Tôi chỉ bắt đầu sử dụng thư viện Bullet Vật lý ngày hôm qua, vì vậy có lẽ tôi đang thiếu một cái gì đó rõ ràng.
Cho đến nay tôi đã mở rộng RigidBody
lớp để ghi đè checkCollisionWith(CollisionObject co)
hàm. Hiện tại, nó chỉ là một kiểm tra đơn giản về nguồn gốc, không sử dụng hình dạng khác. Tôi sẽ lặp lại về điều đó sau. Bây giờ nó trông như thế này:
@Override
public boolean checkCollideWith(CollisionObject co) {
Transform t = new Transform();
co.getWorldTransform(t);
if(COLONY.SolidAtPoint(t.origin.x, t.origin.y,t.origin.z)){
return true;
}
return false;
}
Điều này hoạt động rất tốt, theo như phát hiện khi va chạm xảy ra. Tuy nhiên, điều này không xử lý các phản ứng va chạm. Có vẻ như phản ứng va chạm mặc định là để di chuyển các vật thể va chạm bên ngoài các hình dạng khác, có thể là AABB của chúng.
Hiện tại hình dạng của địa hình chỉ là một cái hộp có kích thước của thế giới. Điều này có nghĩa là các thực thể va chạm với địa hình chỉ bắn ra bên ngoài hộp kích thước thế giới đó. Vì vậy, rõ ràng là tôi cần phải sửa đổi phản ứng va chạm hoặc tôi cần tạo một hình dạng phù hợp trực tiếp với hình dạng của địa hình. Vì vậy, lựa chọn nào là tốt nhất và làm thế nào để tôi thực hiện nó? Có lẽ có một lựa chọn tôi không nghĩ đến?
Cần lưu ý rằng địa hình là động và thường xuyên được người chơi sửa đổi.