我已经将这个弹球游戏程序作为我班级的作业,我一直在尝试修复弹球运动和碰撞。
第一个问题是,无论用户将速度设置为哪个方向,球都只会以特定角度移动。
我真的不知道为什么它不应该起作用,根据我的笔记、讲座幻灯片和讨论讲义,它应该没问题。那么有人知道为什么它不起作用吗?我环顾四周,找不到明确的答案。任何帮助将不胜感激。我很难过:(
不工作是指无论用户将弹球设置为哪个方向,它都只会向一个方向移动(例如,用户设置弹球向左,弹球向右;用户设置弹球向上,向右;等等。 ) 此外,弹球不会与墙壁或任何目标发生碰撞。
图形是graphics.py:http://mcsp.wartburg.edu/zelle/python/graphics/graphics/index.html
这是碰撞代码(连同速度反转,只与游戏板的右壁保持碰撞):
def checkHit(ball,target,dispX,dispY,VelX,VelY,hit): ###pulled the definition out of the loop but keeping it here for easier reference
center = ball.getCenter() ###defines the center of the pinball as a point
hit = 0 ###used for differentiating between objects collided with
if center.getX() + 1 <= 45 and center.getX() + 1 + dispX > 45: ####if the pinball collides with the right wall of the board
VelX = VelX *(-1) ###velocity in the x direction reverses
hit = 0 ###did not collide with a target
for j in range(1000):####1000 frames (ball isn't expected to last long in the air, only a couple seconds)
vy = vy - 9.8 ###effect of gravity
dx = vx / math.sqrt(vx**2 + vy**2) ###speed in x direction over time
dy = vy / math.sqrt(vx**2 + vy**2) ###speed in y direction over time
checkHit(pinball,target_front1,dx,dy,vx,vy,0) ####runs function each frame for collision testing
pinball.move(dx , dy) ###moves pinball