Я работаю над игрой Topdown, используя pygame для моего NEA в области компьютерных наук, и у меня есть группа объектов, которая в настоящее время проверяет, не сталкиваются ли какие-либо объекты внутри групп с какими-либо объектами, с которыми не следует сталкиваться (стены, перила, столы). , камни и т. д.) и не дает сущности пройти сквозь него. В настоящее время он работает нормально в одном направлении, например, удерживая d, чтобы войти в стену, но если вы удерживаете d, а затем нажимаете a (например), чтобы подняться вверх, это В этом примере телепортирует вас в нижний левый угол, вместо того, чтобы игрок обнимал стену, двигаясь вверх. Я понимаю почему, просто не знаю, как это исправить.
Я не привык писать код на Python, поэтому мои методы и идеи могут отличаться от того, что обычно делается в pygame, но я надеюсь, что вы любезно поможете.< /p>
entityGroup.py:
import pygame
from pygame.locals import *
class EntityGroup(pygame.sprite.Group):
def __init__(self):
super().__init__()
def update(self, collision_group):
for sprite in self.sprites():
# Calculate the new position
new_x = sprite.rect.x + sprite.velocity_x
new_y = sprite.rect.y + sprite.velocity_y
# Horizontal movement collision detection
temp_rect = sprite.rect.copy()
temp_rect.x = new_x
collision_detected = False
for collision in collision_group:
if temp_rect.colliderect(collision.rect):
collision_detected = True
if sprite.velocity_x > 0: # Moving right
sprite.rect.right = collision.rect.left
elif sprite.velocity_x < 0: # Moving left
sprite.rect.left = collision.rect.right
sprite.velocity_x = 0
break
if not collision_detected:
pass
# Vertical movement collision detection
temp_rect.y = new_y
collision_detected = False
for collision in collision_group:
if temp_rect.colliderect(collision.rect):
collision_detected = True
if sprite.velocity_y > 0: # Moving down
sprite.rect.bottom = collision.rect.top
elif sprite.velocity_y < 0: # Moving up
sprite.rect.top = collision.rect.bottom
sprite.velocity_y = 0
break
if not collision_detected:
pass
# Update the player's position
sprite.pos = [sprite.rect.x, sprite.rect.y]
```
Подробнее здесь: https://stackoverflow.com/questions/787 ... collisions
Коллизии игры Pygame сверху вниз [дубликат] ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Не уверен, почему квадратичное зондирование не поможет разрешить коллизии при хешировании.
Anonymous » » в форуме C++ - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-