问题描述
我编写此代码是为了让一个圆圈跟随我的鼠标,但运动真的很机械,并没有提供我想要的 360 度运动。
代码如下:
mx,my = pygame.mouse.get_pos()
for event in pygame.event.get():
if event.type == pygame.QUIT:
Running = False
mpos = (mx,my)
X = (playerX)
Y = (playerY)
if mpos[1] >= Y:
playerY += vel
if mpos[1] <= Y:
playerY -= vel
if mpos[0] <= X:
playerX -= vel
if mpos[0] >= X:
playerX += vel
解决方法
您需要计算方向 vector,对其进行标准化并将其乘以所需的速度,然后将其应用于圆圈位置。
最简单的方法是使用 pygame 的内置 Vector2
类:
import pygame
def main():
pygame.init()
screen = pygame.display.set_mode((600,600))
pos = pygame.Vector2()
clock = pygame.time.Clock()
speed = 10
while True:
for e in pygame.event.get():
if e.type == pygame.QUIT:
return
movement = pygame.mouse.get_pos() - pos
if movement.length() > 6: # some margin so we don't flicker between two coordinates
if movement.length() > 0: # when we move,we want to move at a constant speed
movement.normalize_ip()
pos += movement * speed # change the position
screen.fill((20,20,20))
pygame.draw.circle(screen,'dodgerblue',pos,30)
pygame.display.flip()
clock.tick(30)
main()