我现在有一个游戏,我希望用户通过将鼠标从圆球拖动到任意位置来控制圆球,程序将通过向相反方向移动圆球来响应。方向很好,但是,我注意到当使用程序时,球体在左上方向的移动比右下方向的移动要少。我相信这可能是由于我对球体实施的重力缓慢造成的,然而,我无法确切地找到导致问题的原因
Main.py:
import pygame, sys, orb ...
def run_game():
#Screen settings
-snip-
main_orb = Orb(screen)
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
main_orb.reset()
elif event.type == pygame.MOUSEBUTTONUP:
main_orb.release = True
main_orb.calc_vector(mouse_pos)
main_orb.update()
main_orb.release_func(mouse_pos)
main_orb.blitme()
pygame.display.flip()
run_game()
圆球
import pygame, math ...
class Orb():
def __init__(self,screen):
self.screen = screen
# Get self image&rect and center position
-snip-
# Physics properties
self.velocity = 0
self.acceleration = 0
self.vector = pygame.Vector2(0,-1)
self.g = -30
self.release = False
# Update flag
self.dont_update = False
def reset(self):
self.acceleration = 0
self.velocity = 0
def update(self):
if self.velocity < 0 or self.dont_update == True:
self.acceleration = 0
self.velocity = 0
self.dont_update = True
else:
self.acceleration = self.acceleration + self.g/60/60
self.velocity = self.velocity + self.acceleration
self.rect.x = self.rect.x + self.vector[0] * self.velocity
self.rect.y = self.rect.y + self.vector[1] * self.velocity
def calc_vector(self, mouse_pos):
self.vector = pygame.Vector2(mouse_pos[0] - self.rect.centerx,
mouse_pos[1] - self.rect.centery)
self.vector.rotate_ip(180)
self.vector.normalize_ip()
def release_func(self,mouse_pos):
if self.release == True:
self.acceleration = 2/1000 * math.hypot((self.rect.x-mouse_pos[0]),(self.rect.y-mouse_pos[1]))
self.dont_update = False
self.release = False
def blitme(self):
self.screen.blit(self.image,self.rect)
(附言)我知道我使用了很多标志,因此如果有任何关于如何重构代码的建议,我将不胜感激
问题的原因是^{} 存储整数坐标:
执行以下操作时,
self.vector[0] * self.velocity
和self.vector[1] * self.velocity
的分数部分丢失:另见Pygame doesn't let me use float for rect.move, but I need it
您必须以浮点精度进行计算。将类型为
pygame.Vector2
的属性self.pos
添加到类:递增
update
中的属性并同步rect
属性:完整类
Orb
:相关问题 更多 >
编程相关推荐