Tôi đang tạo trò chơi java bằng cách sử dụng các ô xếp kề. Tôi đang gặp rắc rối với yếu tố va chạm. Tôi đang xác định hình chữ nhật cho mỗi ô trên bản đồ và một hình chữ nhật khác cho trình phát. Những gì tôi gặp khó khăn là biết bên nào người chơi đến từ khi nó chạm vào hình chữ nhật, và sau đó đẩy người chơi ra theo hướng người chơi đến. Tôi đã thực hiện một phương pháp kiểm tra xem ký tự có bao nhiêu bên trong hình chữ nhật, vì vậy nó có thể biết bao nhiêu để đẩy nó ra, nhưng tôi không thể tìm ra cách để biết bên nào nhân vật đến từ đó.Trò chơi xếp hình Java - Phát hiện va chạm
đây là hiện va chạm methoe tôi - lưu ý rect1 là nhân vật và rect2 là ngói
public void collision(Rectangle rect1, Rectangle rect2) {
float xAdd;
float xAdd2;
float yAdd;
float yAdd2;
boolean hitRight = false;
boolean hitLeft = false;
boolean hitTop = false;
boolean hitBot = false;
Vector2f rect1Origin = new Vector2f(rect1.x, rect1.y);
Vector2f rect2Origin = new Vector2f(rect2.x, rect2.y);
Vector2f rect1Mid = new Vector2f((rect1.x + rect1.width)/2,(rect1.y + rect1.height)/2);
Vector2f rect2Mid = new Vector2f((rect2.x + rect2.width)/2,(rect2.y + rect2.height)/2);
Vector2f rect1A = new Vector2f(rect1Origin.x + rect1.width, rect1.y);
Vector2f rect1B = new Vector2f(rect1Origin.x, rect1Origin.y+ rect1.height);
Vector2f rect1C = new Vector2f(rect1Origin.x + rect1.width,rect1Origin.y + rect1.height);
Vector2f rect2A = new Vector2f(rect2Origin.x + rect2.width, rect2.y);
Vector2f rect2B = new Vector2f(rect2Origin.x, rect2Origin.y
+ rect2.height);
Vector2f rect2C = new Vector2f(rect2Origin.x + rect2.width,
rect2Origin.y + rect2.height);
xAdd = rect2C.x - rect1B.x;
xAdd2 = rect1C.x - rect2B.x;
yAdd = rect2A.y - rect1B.y;
yAdd2 = rect2C.y - rect1A.y;
if (rect1Mid.y < rect2Mid.y) {
if (rect1.intersects(rect2)) {
y_pos += yAdd;
}
}
if (rect1Mid.y > rect2Mid.y) {
if (rect1.intersects(rect2)) {
System.out.println(yAdd2);
y_pos += yAdd2;
}
}
if(rect1Mid.x > rect2Mid.x){
if(rect1.intersects(rect2)){
hitRight = true; x_pos += xAdd;
}
}
if(rect1Mid.x< rect2Mid.x){
if(rect1.intersects(rect2)) {
x_pos += -xAdd2;
}
}
}
Bất kỳ trợ giúp sẽ được đánh giá cao
Cảm ơn
Điều này sẽ dẫn đến tình huống lạ, tùy thuộc vào khoảng thời gian bước. – Matzi
@Matzi Không thực sự, điều xác thực trước khi thực hiện một số lệnh người dùng - nếu nó không xác nhận, bạn có thể thực hiện xử lý tùy chỉnh. – jmruc
@KirilRaychev Tôi không thực sự hiểu những gì bạn đang cố gắng để nói – grimrader22