Я пытаюсь создать сценический конструктор, который облегчит разработку добавления объектов, индивидуальной проверки их столкновения и т. Д. Для каждого отдельного объекта, я добавляю код.
Моя идея заключается в том, помещать объекты в группы и получать их данные из JSON данных. Хотя казалось, что он работает от сбора и размещения данных, как я кодировал, он просто хочет нарисовать самый последний объект там. То есть, если бы у меня было
100 объектов с соответствующими данными в *, будет вытянут только 100-й объект. *1003*
В этом случае я, конечно, хочу, чтобы все 99-е другие объекты были также drawled.
Из кода, который я разместил ниже, я проверил в заявлении на печать, что я действительно получил данные трех объектов, ''. Это должно означать, что сами данные JSON не являются проблемой.
Если мне нужно угадать, я думаю, что проблема заключается в преобразовании отдельных лиц и добавлении их в группы (); Может быть проблема с функцией StartHorizontObjectRepeats ().
Вот минимальный воспроизводимый код, воссозданный из моей основной программы.
Коды:
main.py
import pygame
from settings import StartupSettings
import mechanic as m
from object import HorizontalObject
from pygame.sprite import Group
if __name__ == "__main__":
pygame.init()
Settings = StartupSettings()
Objects = HorizontalObject(Settings.screen)
Objects = Group()
m.HorizontalObjectRepeats(Settings.screen, Objects)
while True:
m.Refresh(Settings, Objects)
settings.py
import pygame
class StartupSettings():
def __init__(self):
self.screen = pygame.display.set_mode((800,600))
self.background = [70,70,70]
object.py
import pygame
from pygame.sprite import Sprite
class HorizontalObject(Sprite):
def __init__(self, screen):
super().__init__()
self.screen = screen
self.screen_rect = self.screen.get_rect()
self.image = pygame.image.load('img_test_object.png')
self.rect = self.image.get_rect()
mechani c .py
import pygame
import json
from object import HorizontalObject
def HorizontalObjectRepeats(screen, ObjectExport):
'''Initates the repeats of given horizontal test objects.'''
NumberOfObjects = ReadJSONFileGeneral(1)
for PlacementsofObjects in range(NumberOfObjects):
StartHorizontalObjectRepeats(screen, ObjectExport, NumberOfObjects)
def StartHorizontalObjectRepeats(screen, ObjectExport, NumberOfObjects):
'''Starts the repeat.'''
Object = HorizontalObject(screen)
for i in range(NumberOfObjects):
Object.rect = ReadJSONFileObject(0, i)
ObjectExport.add(Object)
print(ObjectExport)
def StageBuilderTemplate(templateKeycode):
'''Template data when starting out the stage builder.'''
dictObjects = {"HorizontalObjectsData": {0: (50, 50, 308, 76), 1: (100, 100, 308, 76), 2: (150, 150, 308, 76)}}
dictGeneral = {"BackgroundColor": (255, 0, 255), "HorizontalObjects": len(dictObjects["HorizontalObjectsData"].keys())}
if templateKeycode == 0:
return dictGeneral
elif templateKeycode == 1:
return dictObjects
def CreateJSONFile(jsonCreationKeycode):
'''Dumps data to the specified json based on the sented keycode.'''
if jsonCreationKeycode == 0:
with open('General.json', 'w') as f:
json.dump(StageBuilderTemplate(0), f)
elif jsonCreationKeycode == 1:
with open('Object.json', 'w') as f:
json.dump(StageBuilderTemplate(1), f)
def ReadJSONFileObject(keycode, Repeats):
'''Attempts to read Object.json file. It will create Object.json
if it does not exist.
After reading and extracting the entire data from Object.json,
it will sent on specific data based on the sented keycode.'''
try:
with open("Object.json", 'r') as f:
data = json.load(f)
if keycode == 0:
return data["HorizontalObjectsData"].get(str(Repeats))
except FileNotFoundError:
CreateJSONFile(1)
def ReadJSONFileGeneral(jsonGeneralKeycode):
'''Attempts to read General.json file. It will create General.json
if it does not exist.
After reading and extracting the entire data from General.json,
it will sent on specific data based on the sented keycode.'''
try:
with open("General.json", 'r') as f:
data = json.load(f)
if jsonGeneralKeycode == 0:
return data.get('BackgroundColor')
elif jsonGeneralKeycode == 1:
return data.get('HorizontalObjects')
except FileNotFoundError:
CreateJSONFile(0)
def Refresh(Settings, Objects):
'''Updates the screen'''
Settings.screen.fill(Settings.background)
Objects.draw(Settings.screen)
pygame.display.flip()
General. json
{"BackgroundColor": [255, 0, 255], "HorizontalObjects": 3}
Объект. json
{"HorizontalObjectsData": {"0": [50, 50, 308, 76], "1": [100, 100, 308, 76], "2": [150, 150, 308, 76]}}
Изображение объекта:
Выход:
Примечания:
- Я понимаю, что для создания новых файлов JSON, в частности General. json, придется cra sh один раз, прежде чем программа вернется в нормальное состояние. Это не связано с этой текущей проблемой, о которой я прошу помощи.
- Для вывода (не отвечает) также не может быть связано, так как у меня нет такого похожего вхождения на моей главной программа.