В настоящее время я пишу игру с pygame, и у меня возникла проблема с объектами в качестве аргументов. Итак, 1) У меня есть класс объекта, и 2) Функция, которая принимает объект и целое число и добавляет объект в массив X раз, где X равно целому числу, затем функция возвращает массив, и 3) Выполнение функция, которая инициализирует объекты.
Каждая из этих частей находится в разных файлах. Каждый из них импортирует pygame и 3) импортирует 1) и 2)
1) Файл: Объекты
import pygame
class Obstacle(pygame.sprite.Sprite):
def __init__(self, screen, settings):
# Initialize the lander
#make the lander a sprite
pygame.sprite.Sprite.__init__(self)
#Keep local copy of screen
self.screen = screen
self.image = pygame.image.load('lander.png')
self.imageCopy = self.image.copy()
self.rect = self.image.get_rect()
#Start with each new lander at the top of the screen
self.rect.centerx = random.randint(50, settings.screen_width - 50)
self.rect.centery = 0
2) Файл: GameMethods
import pygame
def random_array(number_needed, object):
#Takes in the number of objects to be created in an array
#and returns that new array
#Use: to make an array that holds randomly located objects
number_assigned = 0
array = []
while number_assigned < number_needed:
array.append(object)
number_assigned += 1
return array
3) Файл: Main
from Objects import Obstacles
import GameMethods as gm
def run_game():
"""Main function to start game and run top-level loop"""
# Initialize pygame, settings and screen object.
pygame.init()
....
some unrelated code
....
number_of_fixed_Obstacles_needed = 5
fixed_Obstacles_array = gm.random_array(number_of_fixed_Obstacles_needed, fixedObstacle(screen, settings)
Проблема возникает в 3), когда я вызываю gm.random_array. Я не уверен на 100%, но когда я вызываю fixedObstacle в качестве аргумента, он берет экземпляр или ссылку на память объекта и добавляет то же самое препятствие 5 раз. Я пытаюсь добавить 5 различных препятствий в массив.
Если вместо этого поместить это в функцию запуска, она будет работать
number_of_Obstacles_assigned = 0
Obstacles_array = []
while number_of_Obstacles_assigned < number_of_Obstacles_needed:
Obstacles_array.append(fixedObstacle(screen, settings)
number_of_Obstacles_assigned += 1
PS. Я пытаюсь заставить функцию делать это, потому что у меня есть много классов Object, которые я хотел бы добавить к различным массивам, поэтому вызов gm.random_array (number, object) намного быстрее, чем вызов цикла while, и это также делает код более объектно-ориентированный.