Pygame.Как реализовать неравномерное перемещение?
Я хочу написать небольшой физический движок на Pygame, где взаимодействуют различные геометрические примитивы. Суть в том,что мой объект при перемещении двигается рывками и застревает в границах.Я полагаю,это происходит из-за того что объект имеет скорость,например,5 пикселей за итерацию цикла,таким образом перемещение выглядит разорванным,а объекты могут застревать в границах.Но и сделать скорость 1 пиксель в итерацию я тоже не могу,иначе в чем вообще смысл движка.Есть ли способы реализовать такое перемещение?Спасибо!

class Border(pygame.sprite.Sprite):
def __init__(self, x1, y1, x2, y2):
super().__init__(all_sprites)
if x1 == x2:
self.add(vertical_borders)
self.image = pygame.Surface([1, y2 - y1])
self.rect = pygame.Rect(x1, y1, 1, y2 - y1)
else:
self.add(horizontal_borders)
self.image = pygame.Surface([x2 - x1, 1])
self.rect = pygame.Rect(x1, y1, x2 - x1, 1)
class PhysRect(pygame.sprite.Sprite):
def __init__(self, x, y, mass=2, width=30, height=20):
super().__init__(all_sprites)
self.image = pygame.Surface((width, height), pygame.SRCALPHA, 32)
self.rect = pygame.Rect(x, y, width, height)
self.x = x
self.y = y
self.mass = mass
self.width = width
self.height = height
self.vectors = {}
pygame.draw.rect(self.image, pygame.Color("red"), (0, 0, width, height))
def phys_counts(self):
self.vectors['F_GRAV'] = [0, GRAVITY * self.mass]
def update(self, *args):
self.phys_counts()
for i in self.vectors.keys():
if not pygame.sprite.spritecollideany(self, horizontal_borders):
self.rect.x += self.vectors[i][0]
if not pygame.sprite.spritecollideany(self, horizontal_borders):
self.rect.y += self.vectors[i][1]
Border(5, 5, WIDTH_SCREEN - 5, 5)
Border(5, HEIGHT_SCREEN - 5, WIDTH_SCREEN - 5, HEIGHT_SCREEN)
Border(5, 5, 5, HEIGHT_SCREEN - 5)
Border(WIDTH_SCREEN - 5, 5, WIDTH_SCREEN - 5, HEIGHT_SCREEN - 5)
while running:
screen.fill(pygame.Color('white'))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.MOUSEBUTTONDOWN:
# if check_position(*event.pos, 60, 60):
PhysRect(*event.pos)
all_sprites.draw(screen)
all_sprites.update()
pygame.display.flip()
clock.tick(fps)
pygame.quit()