変数all_spritesをpygame.Group()として呼び出すと値が返されず、理由がわかりません。グループを使用してpygameで画面に描画するのに問題があります
class game:
def __init__(self):
pg.init()
self.screen = pg.display.set_mode((screenwidth, screenheight))
pg.display.set_caption("Gammee")
self.clock = pg.time.Clock()
def run(self):
while True:
self.dt = self.clock.tick(FPS)/1000
self.events()
self.update()
self.draw()
def new(self):
self.othersprites = pg.sprite.Group()
def draw(self):
self.screen.fill(BGCOLOR)
self.othersprites.draw(self.screen)
pg.display.flip()
def quit(self):
pg.quit()
sys.exit()
def update(self):
self.othersprites.update()
def events(self):
for event in pg.event.get():
if event.type == pg.QUIT:
self.quit()
g = game()
while True:
g.new()
g.run()
これは、しかし、何もがれに描かれていないゲーム
class Player(pg.sprite.Sprite):
def __init__(self, game, x, y):
self.groups = game.all_sprites
pg.sprite.Sprite.__init__(self, self.groups)
self.game = game
self.image = pg.Surface((30, 30), SRCALPHA)
self.image.fill(YELLOW)
self.rect = self.image.get_rect()
self.vx, self.vy = 0, 0
self.x = x
self.y = y
def get_keys(self):
keys = pg.key.get_pressed()
if keys[pg.K_LEFT] or keys[pg.K_a]:
self.vx = -PLAYER_SPEED
if keys[pg.K_RIGHT] or keys[pg.K_d]:
self.vx = PLAYER_SPEED
if keys[pg.K_UP] or keys[pg.K_w]:
self.vy = -PLAYER_SPEED
if keys[pg.K_DOWN] or keys[pg.K_s]:
self.vy = PLAYER_SPEED
if len(keys) != 0:
self.vx *= 0.9
self.vy *= 0.9
def update(self):
self.get_keys()
self.x += self.vx * self.game.dt
self.y += self.vy * self.game.dt
self.rect.x = self.x
self.rect.y = self.y
ためのコードです。私はまた、スプライトに出力先に使用
for sprite in self.all_sprites:
print(sprite)
を置くことによってテストされたが、今私が間違ってやっているのと、
任意のアイデアを何もしませんか?
「Player」をインスタンス化するのを忘れていましたか?コードはエラーを見つけるのに十分ではありませんので、質問を編集し、[最小で完全で検証可能な例]を提供してください(http://stackoverflow.com/help/mcve)。 – skrx
返信いただきありがとうございます。質問を更新して完全なゲームコードを追加しました。プレイヤーをインスタンス化するために、iitがグループに追加されたときに自動的にインスタンス化されると仮定して間違っていなければなりませんか?例えば、クラスには、上とキャメルケースの名前が必要です(例: –