@OpenYouEyes20

Как удалить объект при выходе за экран?

Пишу игру по примеру, есть задание удалить пулю при выходе за правую часть экрана.
Ври выходе пули за экран она не удаляется, что соответственно не дает выпустить новую, хотя в коде вроде все прописал(смотри внизу)

import sys

import pygame

from bullet import Bullet

def check_keydown_events(event, ai_settings, screen, ship, bullets):
#"""Реагирует на нажатие клавиш."""
if event.key == pygame.K_UP:
ship.moving_up = True
elif event.key == pygame.K_DOWN:
ship.moving_down = True
elif event.key == pygame.K_SPACE:
fire_bullet(ai_settings, screen, ship, bullets)

def fire_bullet(ai_settings, screen, ship, bullets):
#"""Выпускает пулю, если максимум еще не достигнут."""
# Создание новой пули и включение ее в группу bullets.
if len(bullets) < ai_settings.bullets_allowed:
new_bullet = Bullet(ai_settings, screen, ship)
bullets.add(new_bullet)
# Создание новой пули и включение ее в группу bullets.



def check_keyup_events(event, ship):
#"""Реагирует на отпускание клавиш."""
if event.key == pygame.K_UP:
ship.moving_up = False
elif event.key == pygame.K_DOWN:
ship.moving_down = False


def check_events(ai_settings, screen, ship, bullets):
"""Обрабатывает нажатия клавиш и события мыши."""
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
check_keydown_events(event, ai_settings, screen, ship, bullets)
elif event.type == pygame.KEYUP:
check_keyup_events(event, ship)

def update_screen(ai_settings, screen, ship, bullets):
#"""Обновляет изображения на экране и отображает новый экран."""
# При каждом проходе цикла перерисовывается экран.
screen.fill(ai_settings.bg_color)
# Все пули выводятся позади изображений корабля и пришельцев.
for bullet in bullets.sprites():
bullet.draw_bullet()
ship.blitme()
# Отображение последнего прорисованного экрана.
pygame.display.flip()

def update_bullets(bullets):
bullets.update()
# Удаление пуль, вышедших за край экрана.
for bullet in bullets.copy():
if bullet.rect.right <= 0:
bullets.remove(bullet)
  • Вопрос задан
  • 199 просмотров
Решения вопроса 1
@Yatagarashy
Во первых есть специальный раздел в редакторе вопросов чтобы писать сюда код

Пример:
print ("Hello World")

Во вторых, в самом классе Bullet в метод update передавай значения размера экрана, и дальше используй self.kill()

Class Bullet(pygame.sprite.Sprite):
    def update(self, W, H):
         #W - ширина экрана
         #H - высота экрана
         if self.rect.x > W:
             self.kill


И так со всеми сторонами
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы