gpt4 book ai didi

python - 如何在 pygame 中进行平滑移动 + 旋转?

转载 作者:行者123 更新时间:2023-12-04 04:05:19 36 4
gpt4 key购买 nike

我试图让宇宙飞船朝着鼠标指针移动,如果它四处移动,则旋转以跟随指针。目前,旋转工作正常,线性运动工作正常,但由于某种原因,如果船同时旋转和移动,它在旋转时会在原地摇晃,不再向前移动。 Here is a gif我的问题的澄清。下面我有相关的代码。

编辑:我刚刚发布了整个类(class),希望能让事情变得不那么困惑。

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
我在某处读到我不应该将我的位置存储为整数,但我不完全确定如何跟踪位置。我非常感谢任何人必须提供的任何提示或指示。

最佳答案

该问题是由旋转 Sprite 的代码引起的。
旋转图片,得到pygame.Rect涂层图像。通过对象的位置设置矩形的中心。使用矩形对图像进行 blit。
How do I rotate an image around its center using Pygame? .

img_copy = pygame.transform.rotate(self.player_ship, self.angle)
rotated_rect = img_copy.get_rect(center = (round(self.x), round(self.y)))
要旋转图像,计算单位方向向量就足够了 [参见 Unit vector .)] 从当前位置到鼠标位置。按速度缩放向量并将其添加到位置:
cx, cy = pygame.mouse.get_pos()
dx, dy = cx - self.x, cy - self.y
if abs(dx) > 0 or abs(dy) > 0:
dist = math.hypot(dx, dy)
self.x += min(dist, speed) * dx/dist
self.y += min(dist, speed) * dy/dist
看例子
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()
dx, dy = cx - self.x, cy - self.y
if abs(dx) > 0 or abs(dy) > 0:
self.angle = math.atan2(-dx, -dy)*57.2957795

img_copy = pygame.transform.rotate(self.player_ship, self.angle)
rotated_rect = img_copy.get_rect(center = (round(self.x), round(self.y)))

win.blit(img_copy, rotated_rect)

def move(self, speed):
cx, cy = pygame.mouse.get_pos()
dx, dy = cx - self.x, cy - self.y
if abs(dx) > 0 or abs(dy) > 0:
dist = math.hypot(dx, dy)
self.x += min(dist, speed) * dx/dist
self.y += min(dist, speed) * dy/dist

关于python - 如何在 pygame 中进行平滑移动 + 旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62599851/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com