Python 我如何使运动平稳+;pygame中的轮换?

Python 我如何使运动平稳+;pygame中的轮换?,python,pygame,Python,Pygame,我试着让一艘宇宙飞船朝着鼠标指针移动,如果鼠标指针在周围移动,它就会跟着指针旋转。目前,旋转工作正常,线性运动工作正常,但由于某种原因,如果船同时旋转和移动,它在旋转时会在适当的位置晃动,不再向前移动。我的问题需要澄清。下面我有相关的代码 编辑:我刚刚发布了整个课程,希望能减少混乱 class player(): def __init__(self, x_position, y_position, length, height): self.x = x_position

我试着让一艘宇宙飞船朝着鼠标指针移动,如果鼠标指针在周围移动,它就会跟着指针旋转。目前,旋转工作正常,线性运动工作正常,但由于某种原因,如果船同时旋转和移动,它在旋转时会在适当的位置晃动,不再向前移动。我的问题需要澄清。下面我有相关的代码

编辑:我刚刚发布了整个课程,希望能减少混乱

class player():
    def __init__(self, x_position, y_position, length, height):
        self.x = x_position
        self.y = y_position
        self.l = length
        self.h = height
        self.player_ship = pygame.transform.scale(ships[0], (128, 128))
        self.angle = 0
    def draw(self, win):
        cx, cy = pygame.mouse.get_pos()
        img_copy = pygame.transform.rotate(self.player_ship, math.atan2(self.x - cx, self.y - cy)*57.2957795)
        win.blit(img_copy, (self.x - int(img_copy.get_width() / 2), self.y - int(img_copy.get_height() / 2)))
    def move(self, speed):
        cx, cy = pygame.mouse.get_pos()
        self.angle = math.atan2(cx - self.x, cy - self.y)*57.2957795
        movement_x = math.cos(self.angle) * speed
        movement_y = math.sin(self.angle) * speed
        self.x -= movement_x
        self.y += movement_y

我在某个地方读到,我不应该将我的位置存储为整数,但我不完全确定如何跟踪位置。我非常感谢任何人提供的提示或指针。

问题是由旋转精灵的代码引起的

旋转图像,获得涂层图像的
pygame.Rect
。根据对象的位置设置矩形的中心。使用矩形以blit方式显示图像。

img\u copy=pygame.transform.rotate(self.player\u ship,self.angle)
rotated_rect=img_copy.get_rect(中心=(圆形(self.x),圆形(self.y)))
要旋转图像,只需计算从当前位置到鼠标位置的单位方向向量[参见]。按速度缩放矢量并将其添加到位置:

cx,cy=pygame.mouse.get_pos()
dx,dy=cx-self.x,cy-self.y
如果abs(dx)>0或abs(dy)>0:
距离=数学形下(dx,dy)
自身x+=最小(距离、速度)*dx/距离
自身y+=最小(距离、速度)*dy/距离
参见示例

class player():
定义初始(自身、x位置、y位置、长度、高度):
self.x=x_位置
self.y=y_位置
self.l=长度
self.h=高度
self.player_ship=pygame.transform.scale(ships[0],(128128))
自转角=0
def抽签(自我,赢):
cx,cy=pygame.mouse.get_pos()
dx,dy=cx-self.x,cy-self.y
如果abs(dx)>0或abs(dy)>0:
自转角=数学atan2(-dx,-dy)*57.2957795
img\u copy=pygame.transform.rotate(self.player\u ship,self.angle)
rotated_rect=img_copy.get_rect(中心=(圆形(self.x),圆形(self.y)))
win.blit(图像复制、旋转)
def移动(自身、速度):
cx,cy=pygame.mouse.get_pos()
dx,dy=cx-self.x,cy-self.y
如果abs(dx)>0或abs(dy)>0:
距离=数学形下(dx,dy)
自身x+=最小(距离、速度)*dx/距离
自身y+=最小(距离、速度)*dy/距离

我在某个地方读到,我不应该将我的位置存储为整数,但我不完全确定如何跟踪位置-这不会使情况变得更糟。