Hej napisałem prosty kodzik w Pythonie z pomocą biblioteki Pygame. Problem leży w tym, że kiedy zaczynam ruszać obiektem, on robi lekki skok i później dopiero idzie płynnie. Dodatkowo jeżeli mam naciśnięte dwa klawisze, np W i D to wszystko idzie okej, natomiast jeżeli puszczę W z dalej przyciśniętym D, to obiekt się zatrzymuje.
import pygame as pg
pg.init()
class Control:
@staticmethod
def keys_control():
for event in pg.event.get():
if event.type == pg.QUIT:
raise SystemExit
elif event.type == pg.KEYDOWN:
if event.key == pg.K_ESCAPE:
raise SystemExit
keys = pg.key.get_pressed()
if keys[pg.K_w]:
hero.change_pos((0, -5))
if keys[pg.K_s]:
hero.change_pos((0, 5))
if keys[pg.K_a]:
hero.change_pos((-5, 0))
if keys[pg.K_d]:
hero.change_pos((5, 0))
class Hero:
def __init__(self, pos: tuple):
image = pg.image.load("hero.png")
image = pg.transform.scale(image, (100, 100))
self._surface = image
self._pos = pos
def change_pos(self, pos_add: tuple):
new_pos = (self._pos[0] + pos_add[0], self._pos[1] + pos_add[1])
self._pos = new_pos
def get_pos(self):
return self._pos
def get_surface(self):
return self._surface
class Window:
def __init__(self):
self._window = pg.display.set_mode()
def clear(self):
self._window.fill((0, 0, 0))
def update_frame(self):
pg.display.flip()
self.clear()
def update_window(self, *to_blit):
list_to_blit = []
for el in to_blit:
tmp = (el.get_surface(), el.get_pos())
list_to_blit.append(tmp)
self._window.blits(list_to_blit)
window = Window()
hero = Hero((0, 0))
while True:
Control.keys_control()
window.update_window(hero)
window.update_frame()