01/10/2018, 15:38

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

Aragami1408 viết 17:42 ngày 01/10/2018

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

if (tuy.position.y) == (me.position.y) {
    addScore(playerWhoWon: tuy)
}
Phạm Việt Quang viết 17:48 ngày 01/10/2018

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

Aragami1408 viết 17:40 ngày 01/10/2018
    ```
        Thích viết gì thì viết vào đây. Copy nguyên cả chỗ này là ok bạn nhé!
    ```
Hung viết 17:55 ngày 01/10/2018
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)
}
Phạm Việt Quang viết 17:52 ngày 01/10/2018

đọc code của bạn thì mình cũng có hiểu chút chút
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á

Quân viết 17:48 ngày 01/10/2018

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

Hung viết 17:42 ngày 01/10/2018

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

Phạm Việt Quang viết 17:45 ngày 01/10/2018

@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à

Phạm Việt Quang viết 17:51 ngày 01/10/2018

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

Quân viết 17:45 ngày 01/10/2018

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

Quân viết 17:52 ngày 01/10/2018

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
Phạm Việt Quang viết 17:42 ngày 01/10/2018

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 ?

Quân viết 17:50 ngày 01/10/2018

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

Phạm Việt Quang viết 17:50 ngày 01/10/2018

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

Bài liên quan
0