Почему гравитация не обновляется для объекта класса: симуляция движения снаряда в Python с использованием pygamePython

Программы на Python
Anonymous
Почему гравитация не обновляется для объекта класса: симуляция движения снаряда в Python с использованием pygame

Сообщение Anonymous »


При запуске симулятора мяч движется по прямой траектории, а не по параболе, как ожидалось.

импортировать pygame импорт математики pygame.init() #единицы измеряются в пикселях... # экран framespd = 10 # что такое частота кадров для гравитации = 9,81 гравитация = 9,8 часы = pygame.time.Clock() ширина, высота = 1000, 1000 #изменить обратно на 500 pygame.display.set_caption("Движение снаряда: 1000") экран = pygame.display.set_mode([ширина, высота]) отскок = .2 класс мяча: def __init__(self, угол, скорость, x_pos, y_pos, цвет, радиус, удержание): self.angle=angle*math.pi/180# нужно ли это self.velocity = скорость self.x_pos = x_pos self.y_pos = y_pos self.color = цвет self.radius = радиус self.retention = удержание self.circle = '' self.path = '' защита ничья (сам): self.circle = pygame.draw.circle(экран, self.color, (self.x_pos, self.y_pos), self.radius) self.path = pygame.draw.aalines(screen, 'white', True, ((0,250), (self.x_pos, self.y_pos))) # Нарисовать дугу, следующую за мячом защита скорости_x (сам): если self.y_pos < высота - self.radius: self.x_velocity = self.velocity * math.cos(self.angle) если self.y_pos > 998 - self.radius: self.x_velocity = ((self.x_velocity * self.retention)) вернуть self.x_velocity # сделать имена переменных согласованными защита скорости_y (сам): self.y_velocity = self.velocity * math.sin(self.angle) если self.y_pos < высота - self.radius: self.y_velocity += гравитация #добавить время позже если self.y_pos > 998 - self.radius: self.y_velocity = - ((self.y_velocity + гравитация) * self.retention) #if self.y_velocity == отказ: #self.y_velocity = 0 вернуть self.y_velocity #добавляем цикл отскока защита update_position (сам): self.x_pos = self.x_pos + self.velocity_x() self.y_pos = self.y_pos + self.velocity_y() возврат (self.x_pos, self.y_pos) ball1 = Ball(-10, 8, 0, 250, 'blue', 10, .8) #handle - скорость ball2 = Ball(70, 40, 0, 250, «желтый», 20, .9) защита запуска(а, б): значение = Истина пока значение: clock.tick(framespd) screen.fill('черный') pygame.draw.line(экран, «белый», (0,250), (1000, 250), 2) pygame.draw.line(экран, «белый», (0,998), (1000, 998), 2) ничья() б.дро() а.velocity_x() а.velocity_y() б.velocity_x() б.velocity_y() a.update_position() б.update_position() для события в pygame.event.get(): если event.type == pygame.QUIT: значение = Ложь pygame.display.flip() pygame.quit() бежать (шар1, мяч2) Я пробовал добавлять гравитацию каждый раз, когда позиция обновлялась, но это никак не повлияло на путь. Я не уверен, почему += гравитация не заставляет позицию y увеличиваться быстрее, чем позиция x. Я предполагаю, что мне не нужно на самом деле вычислять изменяющиеся углы.

Вернуться в «Python»