Cách để so sánh vị trí của 2 "vật" trong swift

Nếu em muốn kiểm tra xem vị trí của 2 “vật” trên trục y có bằng nhau không thì dùng như thế này có đúng không ạ

if (tuy.position.y) == (me.position.y)  {
        addScore(playerWhoWon: tuy)
    }

nếu đúng thì tại sao nó không thực hiện addscore mà e gõ ở dưới và nếu sai thì nhờ các bro giúp e sửa với ạ
Many thanks :grin:

Format code của bạn cho dễ nhìn:

if (tuy.position.y) == (me.position.y) {
    addScore(playerWhoWon: tuy)
}
1 Like

làm sao để format được như vậy ạ , vì e mới vào nên còn mu mơ lắm

    ```
        Thích viết gì thì viết vào đây. Copy nguyên cả chỗ này là ok bạn nhé!
    ```
2 Likes
let kMinimumVerticalSize: CGFloat = 0.01

func verticalSize(_ first: CGPoint, _ second: CGPoint) -> CGFloat {
    return abs(first.y - second.y)
}

if verticalSize(tuy.position, me.position) < kMinimumVerticalSize {
    addScore(score, toPlayer: tuy)
}
3 Likes

đọc code của bạn thì mình cũng có hiểu chút chút :joy:
nhưng hình như trong t.h này nó k dc

p/s: tuy ở đây là trái bóng và me là paddle nhá

Code không sai, không cộng được điểm thi có nghĩa là 2 ý không bao giờ bằng nhau thôi

1 Like

tăng kMinimumVerticalSize lên thử, chứ collision detection bên game mình không rành.

2 Likes

@qloved bạn nhìn vào đường màu cam thì sẽ thấy mình cố tình cho nó chạm vào bên phải của paddle mục đích để vị trí 2 cái nó = nhau mà

mình tăng kMinimumVerticalSize lên 1 thì được rồi ^^ cảm ơn bro nhé

2 Likes

Bạn nhìn thì nói làm gì, quan trọng là số, chắc là kiểu dữ liệu của y là float, bạn nghĩ với phần thập phân giữa 2 số rất nhỏ thì có thể thể hiện trên màn hình được không, hơn nữa con chạy của bạn là di chuyển nên chắc bạn sẽ cộng với 1 số offset nào đó, với phép cộng liên tiếp 1 số không nguyên thì mình không chắc có giá trị y của thanh padding có thể bằng được với y của con chạy

2 Likes

Với lt game thì bạn nên thay so sánh bằng bằng các phép so sánh tương đối sẽ cho kết quả chính xác hơn. Ngoài ra cẩn thận với trường hợp đi xuyên tường nếu vận tốc của vật di chuyển lớn và độ dày của tường nhỏ.
Mình ví dụ 1 TH để bạn tự phân tích:
Quả bóng ở vị trí 1,1 hàng rào laze là đường thẳng x = 5. Nếu bóng chạm tia laze thì sẽ bị mất điểm:

  • vector vận tốc 0.3,0
  • vector vận tốc 1,0
  • vector vận tốc 3,0
  • vector vận tốc 6,0
    Rõ ràng là TH nào thì bóng cũng sẽ bị laze cắt nhưng không phải TH nào áp dụng cách tính thông thường cũng cho kết quả đúng được
1 Like

cảm ơn bạn nhưng mình vẫn chưa hiểu lắm chỗ " vận tốc di chuyển cao mà độ dày của tường nhỏ " , tại sao lại vậy ?

Bạn có thể nghiên cứu TH 4 ở ví dụ trên, quả bóng sẽ xuyên qua tường bao ngày cả khi bạn cộng thêm threshold = 1

1 Like

ok bạn , mình sẽ nghiên cứu thêm

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?