다음은 내가 시도한 샘플 코드입니다.
x[0] = 10
y[0]=10
x[1] = 40
y[1]=40
width=10
height=10
pygame.draw.rect(win,(0,0,255),(x[1],y[1],width,height))
pygame.draw.rect(win,(0,0,255),(x[0],y[0],width,height))
응용 프로그램 루프에서 위치를 약간 변경해야합니다.
시작 위치 ( start
), 끝 위치 ( end
) 및 속도 ( speed
)를 정의합니다.
start = 10, 10
end = 40, 40
speed = 1
현재 위치를 초기화합니다. 현재 위치 에서 애플리케이션 루프 의 끝 위치 ( dx
, dy
) 까지 벡터를 계산하고 목표 방향의 속도로 현재 위치를 변경합니다.
pos = start[:]
while run:
# [...]
dx = end[0] - pos[0]
dy = end[1] - pos[1]
dist = math.sqrt(dx*dx + dy*dy)
if dist > speed:
pos = pos[0] + dx*speed/dist, pos[1] + dy*speed/dist
참고 math.hypot
계산 유클리드 거리 및 (dx/dist, dy/dist)
A는 단위 벡터 (단위 벡터 길이를 갖는 1).
pos
모든 프레임 의 현재 위치 ( )에 개체를 그립니다 .
pygame.draw.rect(win,(0,0,255),(round(pos[0]), round(pos[1]), width, height))
직책 목록이있는 경우 :
x = [60, 140, 140, 60]
y = [60, 140, 60, 140]
다음 start
과 end
목록의 위치에서 설정해야합니다. 목록 색인 current_i
을 사용하여 현재 시작 위치를 추적합니다. 개체가 현재 대상 위치 ( end
)에 도달 한 경우 인덱스를 늘립니다 .
예를 참조하십시오.
import pygame
import math
pygame.init()
win = pygame.display.set_mode((500, 500))
clock = pygame.time.Clock()
x = [60, 140, 140, 60]
y = [60, 140, 60, 140]
width, height = 10, 10
speed = 1
current_i = 0
pos = x[current_i], y[current_i]
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
start = x[current_i], y[current_i]
end = x[current_i % len(x)], y[current_i % len(y)],
dx = end[0] - pos[0]
dy = end[1] - pos[1]
dist = math.hypot(dx, dy)
if dist > speed:
pos = pos[0] + dx*speed/dist, pos[1] + dy*speed/dist
else:
pos = end[:]
current_i = current_i + 1 if current_i < len(x)-1 else 0
win.fill(0)
pygame.draw.rect(win,(0,0,255),(round(pos[0]), round(pos[1]), width, height))
pygame.display.flip()
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다