Я довольно новичок в Python и после изучения принципов я хочу улучшить свои навыки, программируя игры. Итак, я начал с игры, в которой игроку просто нужно было собирать книги (это не так скучно).
Для книг у меня есть два списка: list_classes с разными именами (например, Book1, Book2, Book3 ... Book 15) и list_book_images, который включает в себя четыре разных изображения для книг. Поскольку должны быть видны только три книги одновременно, я создаю их с помощью следующего метода в главном l oop:
def draw_books(list_classes, reset=False, degree=BACHELOR):
global num_books_drawn
while len(books_sprites) < BOOKS_MAX_VISIBLE:
name = random.randint(0,len(list_classes)-1)
image = random.randint(0,len(list_book_images)-1)
ects = random.randint(3,5)
value = random.randint(100,1000)
book = Book(str(list_classes[name]), list_book_images[image], value, ects)
book.draw()
books_sprites.add(book)
all_sprites.add(book)
num_books_drawn += 1
Вот класс Book с методом draw.
class Book(pygame.sprite.Sprite):
def __init__(self, ID, image, value, ECTS, onscreen=False):
pygame.sprite.Sprite.__init__(self)
self.onscreen = onscreen
self.ID = ID
self.value = value
self.ECTS = ECTS
self.image = image
self.costs = 50
self.text = font_books.render(str(ID), True , WHITE)
self.rect = self.image.get_rect()
self.x = random.randint(0,WIDTH_IN_CLASSES-self.rect.width)
self.y = random.randint(MENUHEIGHT_IN_CLASSES, HEIGHT_IN_CLASSES-self.rect.height)
def draw(self):
#get width and height of text for destination
w = self.text.get_rect().width
h = self.text.get_rect().height
#blits the image on x and y
self.rect.x = self.x
self.rect.y = self.y
#prints the name of the book
self.image.blit(self.text, [int(w/2),h+10])
Так что книги почти нарисованы так, как я хочу, три книги одновременно, и они появляются случайно. Но, как вы можете видеть из функции рисования (класс Book), я также хочу пометить имя (self.text). Каждый раз, когда появляется новая книга с изображением, которое уже было показано, название новой книги будет перекрывать старую, и она больше не будет читаться. Я не знаю, почему это происходит, потому что старая книга была убита с помощью .kill () (она полностью исчезла, также имя), когда столкновение обнаружено.
Как получается, что книги убивают, но self.text "выживает" и все еще отображается, когда рисуется следующая книга.? Я пока не могу найти решение для этого - не могли бы вы дать мне дополнительную информацию, как решить эту проблему?
Большое спасибо!