Я пытаюсь сделать платформер в Pygame.Я, будучи идиотом, не пользуюсь классами, которые, вероятно, облегчили бы мою работу.Это для школьного проекта, и он должен состояться через 2 дня, поэтому у меня нет времени проводить занятия.Я пытаюсь заставить игрока столкнуться с землей, но когда это происходит, я получаю джиттер спрайта (например, спрайт слегка «отскакивает»)
Вот функции (touchGround обрабатывает столкновение с землей):
def touching(entityDat,entityRect,rlist,cpos):
entityRect.center = (entityDat[0] - cpos[0],entityDat[1] - cpos[1])
entityDat[4] = False
for i in rlist:
if entityRect.colliderect(i):
entityDat[4] = True
return True
def touchingGround(entityDat,entityRect,rlist,cpos,gravity):
while touching(entityDat,entityRect,rlist,cpos):
if entityDat[5]:
entityDat[1] += gravity/10
else:
entityDat[1] -= gravity/10
entityDat[3] = 0
if touching(entityDat,entityRect,rlist,cpos):
if entityDat[5]:
entityDat[1] += entityDat[3]
else:
entityDat[1] -= entityDat[3]
entityDat[3] = 0
def walk(entityDat,entityRect,rlist,cpos):
entityDat[0] += entityDat[2]
if touching(entityDat,entityRect,rlist,cpos):
entityDat[0] -= entityDat[2]
entityDat[2] = 0
вот обработчик движения:
if not moveLock:
#player movement
touching(playerDat,playerRect,rlist,cpos)
if jump or playerDat[3] < 4:
playerDat[3] += gravity
elif not touching(playerDat,playerRect,rlist,cpos):
playerDat[3] += gravity * 2
touchingGround(playerDat,playerRect,rlist,cpos,gravity)
playerDat[1] += playerDat[3]
playerDat[2] *= 0.7
if moveRight:
playerDat[2] += 3
if moveLeft:
playerDat[2] -= 3
if playerDat[2] > -0.5 or playerDat[2] < 0.5:
walk(playerDat,playerRect,rlist,cpos)
if touching(playerDat,playerRect,rlist,cpos) and jump == True:
playerDat[3] = 20
jump = False
playerRect.center = (playerDat[0] - cpos[0],playerDat[1] - cpos[1])
и вот ключ к значению всех значений playerDat:
playerDat = [0:xPos,1:yPos,2:xMomentum,3:yMomentum,4:touchingGround,5:goingUp?,6:direction,7:frame]
Извините, еслиЯ должен был включить больше, но все равно спасибо.