как это правильно сделать
надо сделать так чтобы градус полета начинался с 1 градуса и с каждым шагом увеличивался на 1 градус. код недоделан. нужно использовать синусы и косинусы.
import pygame
import sys
import math
pygame.init()
W, H = 500, 500
screen = pygame.display.set_mode((W, H))
clock = pygame.time.Clock()
YELLOW = (225, 225, 0)
y = 0
g = -10
dt = 0.1
x = 0
t = 0
V = 10
a = 10
vx = V *
vy = 0
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
dv = g * dt
dy = vy * dt
vy = vy + dv
y = y + dy
dx = vx *dt
x = x +dx
t = t + dt
print(t,x,y)
Y = -50 * y + 500
X = 50 * x + 0
pygame.draw.circle(screen, YELLOW, (X, Y), 5)
pygame.display.flip()
clock.tick(60)
if y < 0 and vy < 0:
break
pygame.time.delay(20000)
Ответы (1 шт):
Автор решения: GxdTxnz
→ Ссылка
import pygame
import sys
import math
pygame.init()
W, H = 500, 500
screen = pygame.display.set_mode((W, H))
clock = pygame.time.Clock()
YELLOW = (225, 225, 0)
g = -10
dt = 0.1
V = 10
t = 0
angle = 1 # начальный угол в градусах
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# Преобразование угла в радианы
radians = math.radians(angle)
vx = V * math.cos(radians)
vy = V * math.sin(radians)
dv = g * dt
dy = vy * dt
vy = vy + dv
y = y + dy
dx = vx * dt
x = x + dx
t = t + dt
print(t, x, y)
Y = -50 * y + 500
X = 50 * x + 0
screen.fill((0, 0, 0)) # Очистка экрана
pygame.draw.circle(screen, YELLOW, (int(X), int(Y)), 5)
pygame.display.flip()
clock.tick(60)
if y < 0 and vy < 0:
break
angle += 1 # Увеличение угла на 1 градус
pygame.time.delay(20000)
Скорости vx
и vy
вычисляются с использованием тригонометрических функций math.cos
и math.sin
. screen.fill((0, 0, 0))
, чтобы очистить экран перед каждым новым кадром.
В конце каждого цикла угол увеличивается на один градус: angle += 1
.