2012-01-03 20 views
6

Tôi đã có một quả bóng bị trả lại tường. Thư bị trả lại này rất đơn giản, tôi chỉ làm việc này, (đoạn mã)Bouncing Ball logics

if (x - moveSpeed < 0) // Ball hit left wall 
    xVel *= -1; 

Tuy nhiên tôi cũng có hình chữ nhật mà người chơi di chuyển. Các thư bị trả lại trên thực tế này hoạt động như các thư bị trả lại trên các bức tường.

Nhưng tôi đã tìm ra rằng khi một quả bóng có phong trào tương tự như hình ảnh, không thể của nó đối với tôi để làm cho nó đi thẳng lên một lần nữa. Do đó, tôi cần một số loại tính toán liên quan đến chuyển động hình chữ nhật để tác động đến góc nhìn của quả bóng. Hình chữ nhật luôn có tốc độ di chuyển liên tục khi di chuyển. Hình ảnh này cho thấy một hình chữ nhật di chuyển sang trái và quả bóng đánh nó trong chuyển động của nó, mà kết quả trong một góc 90 độ. (Không nên luôn luôn là 90).

Xin lỗi về hình ảnh crappy của tôi tôi hy vọng họ có ý nghĩa. Toán học của tôi là thats gỉ tại sao tôi thực sự có thể cần một đẩy trong đúng hướng.

+4

câu hỏi ở đây là gì? –

+1

Cung cấp một số mã về nỗ lực của bạn trên^_^ – Gabe

+1

Bạn có muốn có vật lý chính xác hoặc chỉ một cái gì đó "cảm thấy tốt hơn" so với hành vi hiện tại không? – Howard

Trả lời

6

Không cần bất kỳ phép tính ưa thích nào ở đây. Sự hiểu biết của tôi về các loại trò chơi này là góc của quả bóng đi ra khỏi mái chèo được xác định bởi vị trí trên mái chèo nó bị trả lại. Nếu nó bị trả lại ở giữa, thì góc hiện tại được giữ nguyên. Khi nó bị trả lại gần mép của mái chèo hơn, góc được điều chỉnh theo hướng của phía mái chèo đó. Hãy nghĩ về mái chèo như một bề mặt tròn.

+0

Đó không phải là cách nó hoạt động trong thế giới của tôi. –

+0

Góc kết quả có được dựa trên vận tốc của "mái chèo" không? – Kekoa

+4

Nhớ chơi bóng bàn, ngay cả khi mái chèo là cố định, nếu quả bóng trúng gần cuối góc bị ảnh hưởng rất lớn theo hướng đó. Tôi nghĩ @Treebranch là đúng. Tôi nghĩ chuyển động của mái chèo tại thời điểm tác động không ảnh hưởng đến nó - chỉ khi bóng chạm vào. – hatchet

9

Dưới đây là hướng dẫn về một số vật lý (đó là những gì bạn cần biết) và bạn cần tìm hiểu về vectơ. Các hướng dẫn không đi qua chính xác những gì bạn đang tìm kiếm (sự phản ánh của thư bị trả lại và góc độ) nhưng đây là một khởi đầu tuyệt vời để bắt đầu, bởi vì bạn sẽ cần phải biết tất cả điều này để hoàn thành dự án của bạn. Game Physics 101

Nếu bạn muốn làm điều đó một cách dễ dàng, here là mã trong C++ mô tả chính xác cách thực hiện những gì bạn đang tìm kiếm.

Sửa


Bạn thực sự nên kiểm tra các liên kết thứ hai đầu tiên, một hướng dẫn của nó vào chính xác những gì bạn cần phải biết. Nhưng nếu bạn đang tìm cách để làm nhiều hơn là chỉ làm cho quả bóng nảy ra xung quanh, nói bao gồm các đối tượng chuyển động khác hoặc một cái gì đó như thế, hãy kiểm tra các liên kết đầu tiên.

+2

+1 hướng dẫn tuyệt vời – Offirmo

+1

Như đã nói, hướng dẫn tuyệt vời! –

+0

Mã đã được chuyển sang JS tại thời điểm viết nhận xét này, tôi chưa thể tìm thấy phiên bản C++. – Funk247

1

Mã này thể hiện cách trả lại bóng hoặc theo một hướng khác bằng cách đảo ngược tiêu đề X hoặc Y của quả bóng với ball.headingX=-ball.headingXball.headingY=-ball.headingY.

Đưa lý thuyết để thực hành:

/* update ball's x heading */ 
ball.x+=ball.headingX; 

/* update ball's y heading */ 
ball.y+=ball.headingY; 

/* if ball at most right of screen then reverse ball's x heading */ 
if((ball.x>PONG_SCREEN_RIGHT)) 
{ 
    ball.headingX=-ball.headingX; 

} 

/* check if ball's location at top or bottom of screen,if true reverse ball's y heading */ 
if((ball.y<PONG_SCREEN_TOP) || (ball.y>PONG_SCREEN_BOTTOM-2)) 
{ 
    ball.headingY=-ball.headingY; 
} 



/* check if ball lands on pad, if true bounce back */ 
if ((ball.y>= PlayersPad.LEFT) && (ball.y<= PlayersPad.RIGHT) && (ball.x==PlayersPad.x)) 
{ 
    ball.headingX=-ball.headingX; 
    playersScore+=10; 
} 

/* let computer track ball's movement */ 
if (ball.x>PONG_SCREEN_RIGHT-18) computersPad.y=ball.y; 


/* check if ball misses pad, if true display you missed */ 
if (ball.x<PONG_SCREEN_LEFT) 
{ 
    displayYouMissed(); 
    ball.x=ball_Default_X; 
    ball.y=ball_Default_Y; 

} 
+0

Mã này trả lời câu hỏi như thế nào? – Howard

+0

Bằng cách hiển thị cách đảo ngược tiêu đề của quả bóng bằng ball.headingX = -ball.headingX và ball.headingY = -ball.headingY. –

4

Đi con đường của mô phỏng vật lý thực tế (như trái ngược với @ câu trả lời Treebranche, mà là làm thế nào tôi nghĩ rằng những loại trò chơi thực sự làm việc) có thể nhận được rất phức tạp. Bạn có thể xem xét ma sát, spin, thời gian tiếp xúc, vv Dưới đây là một vài liên kết thảo luận về điều này.

https://physics.stackexchange.com/questions/11686/finding-angular-velocity-and-regular-velocity-when-bouncing-off-a-surface-with-f

https://physics.stackexchange.com/questions/1142/is-there-a-2d-generalization-of-the-coefficient-of-restitution/

Các vấn đề liên quan