Pygame罪,cos,tan计算圆周运动路径



我已经挣扎了几天,试图弄清楚如何使图像在圆形路径中移动。我在这里查看了其他帖子,但我就是无法理解。

那么如何在圆形路径中移动图像。我的代码只将我的图像移动 45 度然后停止。我需要它绕一圈并继续这样做。

当前代码:

import pygame
pygame.init()
screen = pygame.display.set_mode((400, 400))
CENTER = (200, 200)
RADIUS = 100
x = 0
y = 0
satelliteCenter = (CENTER[0]+RADIUS, CENTER[1])
run = 1
while run == 1:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      run = 0
      pygame.quit()
  mouse = pygame.mouse.get_pos()
  vector = x-CENTER[0], y-CENTER[1]
  x +=1
  distance = (vector[0]**2 + vector[1]**2)**0.5
  if distance > 0:
    scalar = RADIUS / distance
    satelliteCenter = (
      int(round( CENTER[0] + vector[0]*scalar )),
      int(round( CENTER[1] + vector[1]*scalar )) )
  screen.fill((255,255,255))
  pygame.draw.circle(screen, (71,153,192), CENTER, RADIUS)
  pygame.draw.circle(screen, (243,79,79), satelliteCenter, 16)
  pygame.display.update()

您可以使用pygame.math.Vector2并在每帧中旋转它,按半径缩放并将其添加到CENTER位置以获得小圆的当前中心。

import sys
import pygame
pygame.init()
screen = pygame.display.set_mode((400, 400))
clock = pygame.time.Clock()
CENTER = (200, 200)
RADIUS = 100
# A unit vector pointing to the right.
direction = pygame.math.Vector2(1, 0)
run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
            pygame.quit()
            sys.exit()
    direction.rotate_ip(4)  # By 4 degrees.
    # Normalize it, so that the length doesn't change because
    # of floating point inaccuracies.
    direction.normalize_ip()
    # Scale direction vector, add it to CENTER and convert to ints.
    ball_pos = [int(i) for i in CENTER+direction*RADIUS]
    screen.fill((255,255,255))
    pygame.draw.circle(screen, (71,153,192), CENTER, RADIUS)
    pygame.draw.circle(screen, (243,79,79), ball_pos, 16)
    pygame.display.update()
    clock.tick(30)

编辑:如果您希望红色球跟随鼠标,那么如果您将 x 和 y 设置为鼠标 pos x, y = pygame.mouse.get_pos(),您的示例实际上有效。

import sys
import pygame
pygame.init()
screen = pygame.display.set_mode((400, 400))
CENTER = (200, 200)
RADIUS = 100
x = 0
y = 0
satelliteCenter = (CENTER[0]+RADIUS, CENTER[1])
run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
            pygame.quit()
            sys.exit()
    x, y = pygame.mouse.get_pos()
    vector = x-CENTER[0], y-CENTER[1]
    distance = (vector[0]**2 + vector[1]**2)**0.5
    if distance > 0:
        scalar = RADIUS / distance
        satelliteCenter = (
            int(round( CENTER[0] + vector[0]*scalar )),
            int(round( CENTER[1] + vector[1]*scalar ))
        )
    screen.fill((255,255,255))
    pygame.draw.circle(screen, (71,153,192), CENTER, RADIUS)
    pygame.draw.circle(screen, (243,79,79), satelliteCenter, 16)
    pygame.display.update()

最新更新