Коллизии игры Pygame сверху вниз [дубликат]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Коллизии игры Pygame сверху вниз [дубликат]

Сообщение Anonymous »

Я работаю над игрой 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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