Я создал объект «персонаж» и группу «блок». Я позволил объекту «персонаж» двигаться плавно. Я бы хотел, чтобы «персонаж» не перекрывался с «блоком». Текущая блокировка столкновений работает следующим образом:Объект «персонаж» может перекрываться с объектом «блок», но если ключ отпущен, «символ» выйдет из «блока».Я хотел бы исправить это
# an object that can move
class Character():
def __init__(self, screen, ai_settings):
self.screen = screen
self.ai_settings = ai_settings
self.screen_rect = screen.get_rect()
self.image = pygame.image.load('images/character.bmp')
self.rect = self.image.get_rect()
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = self.screen_rect.bottom
self.moving_up = False
self.moving_down = False
self.moving_left = False
self.moving_right = False
def update(self):
if self.moving_up:
self.rect.y -= self.ai_settings.CHARACTER_SPEED_FACTOR
if self.moving_down:
self.rect.y += self.ai_settings.CHARACTER_SPEED_FACTOR
if self.moving_left:
self.rect.x -= self.ai_settings.CHARACTER_SPEED_FACTOR
if self.moving_right:
self.rect.x += self.ai_settings.CHARACTER_SPEED_FACTOR
class Block(Sprite):
def __init__(self, screen, x, y):
super().__init__()
self.screen = screen
self.image = pygame.image.load('images/block.bmp')
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
Попробуйте столкновение блоков
def check_keydown_events(event, character, blocks):
if event.key == pygame.K_UP:
#Start up smoothly moving up
character.moving_up = True
for block in blocks:
if character.rect.colliderect(block.rect):
character.rect.top = block.rect.bottom
#Attempt to block a collision
Полный код: https://github.com/Deweri/IncompleateMaze