Bạn thử lưu lại 2 tọa độ vị trí của quả bóng (thời điểm hiện tại và thời điểm gần hiện tại nhất) rồi khi bóng chạm biên bạn sẽ biết được bóng đi theo đường nào dựa trên 2 tọa độ này.
Mình nhận bài tập là viết một cái Auto-Bouncing Ball .
Hiểu như thế này :
màn hình có đường biên có kí hiệu # trải dài
tọa độ biên : Top = 1 ; Bottom = 23 ; Left = 1 ; Right = 80
một quả bóng kí hiệu : * chuyển động ngẫu nhiên từ lúc khởi động
Function BoucingBall( int sx, int sy, int dx, int dy )
(sx,sy) : tọa độ bóng
(dx,dy) : hướng chuyển động và độ lệch khi di chuyển của bóng .
trong đó : | dx,dy | <= 3
Lấy ví dụ : BouncingBall ( 25,7,3,2) thì bóng xuất phát tại điểm ( 25,7) và hướng chuyển động ban đầu ( trái -> phải , trên -> dưới ) . Do đó điểm dừng tiếp theo là ( 25 + 3 , 7 + 2 ) = ( 28 , 9 ) . Bóng chuyển động một cách tự động kô có điều khiển.
Bóng chạm vào đường biên và đổi hướng chuyển động.
[ Bài này không liên quan đến đồ họa nha ]
C Code:
Vấn đề bây giờ là làm sao xử lý sự chuyển động của bóng khi chạm zo biên .
[ Mình kô thể upload ví dụ lên được kô biết tại sao ]
Các bạn xem thử ví dụ tại đây : http://rapidshare.com/files/1122392/pete_game.rar
Giúp mình nhé !
Bạn thử lưu lại 2 tọa độ vị trí của quả bóng (thời điểm hiện tại và thời điểm gần hiện tại nhất) rồi khi bóng chạm biên bạn sẽ biết được bóng đi theo đường nào dựa trên 2 tọa độ này.
Cái này phải xác định đường biên, tức là nếu bóng chạm vào một điểm nào đó thuộc đường biên này thì sẽ chuyển hướng. Đường biên chỉ cần 2 điểm đầu cuối nếu như biên là đường thẳng. Và hàm xác định điểm thuộc đường thẳng là khá dễ. (Kể cả đường đua cũng dễ)
Vấn đề nữa là, sự va chạm. Nếu xét chi tiết thì phải xét đến tính chất vật lý của vật được va chạm, sự va chạm, và lực va chạm, ma sát (bỏ qua các yếu tố ít ảnh hưởng) hướng bóng sau khi va chạm. Cũng dài đó và rắc rối đó nha, cần phải tư duy mới được.
Mong là các bạn bổ sung thêm
Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó.Email: kevin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
Phone: 0972 89 7667
Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp hoặc bị sự thiếu kỷ luật làm tiêu tan sự nghiệp.
No need too complex like that .
Yêu cầu như trên mình đã viết .
Đường biên được vẽ thế này :
C Code:
Bây giờ xử lý bóng khi chạm thành thế nào nhỉ ?
Cái này không phải physics nên không tính reforce or rebound ..
Thì đã nói ở trên rồi còn đâu, ở trên mình đã nói về cách xử lý bóng sau khi chạm thành. Hay là bạn muốn nói về xử lý để biết khi nào bóng chạm thành, cái này thì dựa vào tọa độ của nó so với cái số 1, 80, 23 chứ sao nữa.
Tui đoán bạn muốn làm va chạm lý tưởng ?
Nếu như vậy thì tui nghĩ:
Khi banh chạm vô 1 bức tường thẳng đứng => dx đảo dấu
Khi banh chạm vô 1 bức tường nằm ngang => dy đảo dấu
Trường hợp đặc biệt, khi banh chạm vô "góc" => dx lẫn dy đều đảo dấu
(có gì sai sót mong được góp ý, xin cám ơn)
-thân
Ý của pete chắc là: Làm sao xác định được kết quả của sự va chạm sau khi bóng chạm thành. Ở đây chỉ có 2 vấn đề cần nói đến là tốc độ của bóng và hướng di chuyển của bóng sau khi va chạm (Cái này là bài toán va chạm phẳng).
Nếu bỏ qua các yếu tố ngoại tác, và biên là cứng hoàn toàn(nếu biên mềm thì rắc rối đó) thì hướng bóng sau khi va chạm sẽ có phương đối xứng với phương ban đầu qua pháp tuyến của biên (Biên ở đây chỉ là phần biên trong phạm vi va chạm, nó rất nhỏ)
Còn vận tốc thì tính theo PT định luật bảo toàn động lượng.
Rất mong được góp ý bổ sung các chỗ sai.
Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó.Email: kevin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
Phone: 0972 89 7667
Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp hoặc bị sự thiếu kỷ luật làm tiêu tan sự nghiệp.
Ai cũng toàn viết ra những cái không đáng nói vì cái đó ai chẳng biết .-_-!
Tại sao không ai nghĩ đến cái dx và dy ( 1. dx = dy ; 2. dx != dy )
Muốn xác định điểm tới thì vẽ cái symetric là có được điểm tới . Cái mình không nghĩ ra là làm sao tính được tọa độ của cái điểm mà bóng chạm vô thành và cách hiển thị nó ra sao ? nhất là với dx != dy
Từ các dữ kiện:làm sao tính được tọa độ của cái điểm mà bóng chạm vô thành
(sx,sy) : tọa độ bóng
(dx,dy) : hướng chuyển động và độ lệch khi di chuyển của bóng
=> bạn có thể tìm ra phương trình đường thẳng d của trái banh phải không ?
Coi màn hình có 4 biên là 4 đường thẳng dài vô hạn
=> đường d ở trên sẽ cắt mỗi đường biên này ở 1 điểm
=> bạn có 4 giao điểm (nếu cắt ở góc màn hình thì có 2 giao điểm là trùng nhau)
=> bạn chọn giao điểm nào "nằm trong" màn hình là được
Kế đến, coi giao điểm vừa tìm được ở trên như là điểm xuất phát (sx, sy) mới; và dx, dy sau khi banh dội ra ở điểm này là dx và dy mới => bạn lại làm như trên
=> tui không rõ bạn muốn hiển thi cái gì ? Hiển thị giao điểm ?và cách hiển thị nó ra sao
=> tui nghĩ bạn không nên nói câu này !!! Mọi người đã bỏ thời gian ra đọc và trả lời cho bạn. Nếu không đúng ý thì có thể là vì bạn nêu câu hỏi không rõ ràng ! Tui sợ là tới lúc không ai đọc hoặc đọc mà không bỏ công trả lời cho bạn thì e là bạn có hối cũng không kịp :(Ai cũng toàn viết ra những cái không đáng nói vì cái đó ai chẳng biết
(có gì sai sót mong được góp ý, xin cám ơn)
-thân
Đã được chỉnh sửa lần cuối bởi bete : 30-10-2006 lúc 04:59 PM.
Dreaminess vừa xem cái chương trình bạn gửi nên. Nhưng chưa hiểu chính xác ý tưởng là gì?
Tọa độ điểm bóng chạm thành? Không phải tọa độ của bóng sao Pete?, còn phải tính nữa ah?. Dùng wherex() và wherey() là có được ngay thôi. dx !=dy đâu có ảnh hưởng gì đến việc này nhỉ?Cái mình không nghĩ ra là làm sao tính được tọa độ của cái điểm mà bóng chạm vô thành và cách hiển thị nó ra sao ? nhất là với dx != dy
Còn hiển thị như thế nào? Quả thực Dreaminess cũng không hiểu là muốn hiển thị cái gì?
Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó.Email: kevin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
Phone: 0972 89 7667
Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp hoặc bị sự thiếu kỷ luật làm tiêu tan sự nghiệp.