SFML tạo class Bullet

:rocket:
http://codepad.org/5E9WkDMx
Đây là class để bắn viên đạn, khi bắn thì e muốn viên đạn hướng theo con trỏ chuột, nhưng nó lại ra thế này


các a c chỉ giúp e với ạ

Bạn đã include các thư viện này chưa:

#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>

Nó báo lỗi như thế vì bạn chưa khai báo thư viện như thế đó

M cài rồi nhé, m chỉ trích nguyên class và đoạn trong thân chương trình thôi. Chương trình m chạy bình thường nhưng nó ra k đúng ý m ý. Mình muốn viên đạn nó hướng theo chiều con trỏ mà nó ra như vậy. B có thể chỉ m k?

http://codepad.org/xZHkXAf1

Bạn đã xem video này chưa! Chắc do cách config chưa đúng:

:sweat_smile::sweat_smile:
Đây là m copy code lên codepad nên nó báo lỗi thư viện chứ trên visual thì hoàn toàn bình thường. M muốn hỏi thuật toán nhé b , k phải lỗi thư viện

:pensive::pensive::pensive::pensive:
Copy code từ visual lên codepad thì 100% là lỗi là đúng rồi. Vì codepad chỉ hỗ trợ các thư viện chính của nó thôi. Chứ làm gì mà add được cả cái sfml lên. Mà lần sau có lỗi gì về thuật toán thì nhớ nói rõ luôn đi nhé. Chứ cứ đưa hình như này chả ai hiểu được đâu bạn à

:smile: m có nói rồi mà , m minh họa cho dễ hiểu thôi

Ok bạn! Đăng hình minh họa cho dễ hiểu thì cũng đúng. Nhưng bạn nên nói thêm về cái vấn đề chính bạn đang cần phải xử lý trong topic này. Chịu khó gõ một chút đi

M có tải lên class viên đạn, khi nhấn chuột trái thì có đạn bay ra đó, nhưng nó chỉ theo một hướng thẳng đó. Ý m muốn hỏi làm sao cho nó hướng theo con trỏ chuột.( m làm tương tự như nhân vật mà k đc). Chứ m đăng hơn trăm dòng code lên, chắc k ai rảnh để giúp m :joy:

1 Like

bạn có học về vector chưa, nếu rồi thì dễ lắm: vận tốc viên đạn có 2 thuộc tính là hướng và tốc độ. Tìm hướng (là 1 vector) bằng cách lấy tọa độ con chuột trừ cho tọa độ cây súng. Sau đó “normalize” vector hướng, rồi nhân vector hướng với tốc độ là ra vận tốc của viên đạn (là 1 vector)

//get bullet velocity:
direction = mousePosition - gunPosition
normDirection = normalize(direction)
bulletVelocity = normDirection * bulletMoveSpeedPerFrame

//update bullet:
bullet.move(bulletVelocity)

“normalize” là chuyển về vector cùng hướng nhưng có độ dài là 1. Ví dụ (3, 4) được chuyển về (0.6, 0.8), cùng hướng x/y = 0.75 nhưng 0.62 + 0.82 = 1

2 Likes

Cảm ơn bạn nhé, rất dễ hiểu

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