#31 layer を GameObject の 属性化
このコミットが含まれているのは:
@@ -146,7 +146,7 @@ class Game:
|
||||
frame (int): フレーム・カウンタ
|
||||
last_answered_at (datetime): 最後に回答した時刻
|
||||
now (datetime): 基準日時
|
||||
redrawers (list[Redrawer]): 再描画するクラスのリスト
|
||||
objects (list[GameObject]): 再描画するクラスのリスト
|
||||
screen (Surface): 基底スクリーン
|
||||
sky (Sky): 天体情報
|
||||
"""
|
||||
@@ -156,7 +156,7 @@ class Game:
|
||||
frame: int
|
||||
last_answered_at: datetime
|
||||
now: datetime
|
||||
redrawers: list[Redrawer]
|
||||
objects: list[GameObject]
|
||||
screen: Surface
|
||||
sky: Sky
|
||||
|
||||
@@ -167,7 +167,7 @@ class Game:
|
||||
self.screen = pygame.display.set_mode ((CWindow.WIDTH, CWindow.HEIGHT))
|
||||
self.clock = Clock ()
|
||||
self.frame = 0
|
||||
self.redrawers = []
|
||||
self.objects = []
|
||||
self.bgm = Sound ('assets/bgm.mp3')
|
||||
self.bgm.set_volume (.15)
|
||||
self.bgm.play (loops = -1)
|
||||
@@ -178,9 +178,9 @@ class Game:
|
||||
) -> None:
|
||||
self.now = datetime.now ()
|
||||
self.sky.observer.date = self.now - timedelta (hours = 9)
|
||||
for redrawer in sorted (self.redrawers, key = lambda x: x['layer']):
|
||||
if redrawer['obj'].enabled:
|
||||
redrawer['obj'].redraw ()
|
||||
for obj in sorted (self.objects, key = lambda obj: obj.layer):
|
||||
if obj.enabled:
|
||||
obj.redraw ()
|
||||
pygame.display.update ()
|
||||
self.clock.tick (FPS)
|
||||
|
||||
@@ -219,6 +219,7 @@ class GameObject:
|
||||
frame: int
|
||||
game: Game
|
||||
height: int
|
||||
layer: float
|
||||
vx: float = 0
|
||||
vy: float = 0
|
||||
width: int
|
||||
@@ -228,22 +229,23 @@ class GameObject:
|
||||
def __init__ (
|
||||
self,
|
||||
game: Game,
|
||||
layer: int | None = None,
|
||||
enabled: bool = True,
|
||||
x: float = 0,
|
||||
y: float = 0,
|
||||
layer: float | None = None,
|
||||
enabled: bool = True,
|
||||
x: float = 0,
|
||||
y: float = 0,
|
||||
):
|
||||
self.game = game
|
||||
self.enabled = enabled
|
||||
self.frame = 0
|
||||
if layer is None:
|
||||
if self.game.redrawers:
|
||||
layer = max (r['layer'] for r in self.game.redrawers) + 10
|
||||
if self.game.objects:
|
||||
layer = max (obj.layer for obj in self.game.objects) + 10
|
||||
else:
|
||||
layer = 0
|
||||
self.game.redrawers.append ({ 'layer': layer, 'obj': self })
|
||||
self.layer = layer
|
||||
self.x = x
|
||||
self.y = y
|
||||
self.game.objects.append (self)
|
||||
|
||||
def redraw (
|
||||
self,
|
||||
@@ -346,7 +348,7 @@ class Deerjika (Creature):
|
||||
game: Game,
|
||||
pattern: DeerjikaPattern = DeerjikaPattern.NORMAL,
|
||||
direction: Direction = Direction.LEFT,
|
||||
layer: int | None = None,
|
||||
layer: float | None = None,
|
||||
x: float = 0,
|
||||
y: float = 0,
|
||||
balloon: Balloon | None = None,
|
||||
@@ -699,19 +701,6 @@ class CWindow:
|
||||
HEIGHT = 768
|
||||
|
||||
|
||||
class Redrawer (TypedDict):
|
||||
"""
|
||||
再描画処理を行ふゲーム・オブゼクトとその優先順位のペア
|
||||
|
||||
Attributes:
|
||||
layer (int): レイア
|
||||
obj (GameObject): ゲーム・オブゼクト
|
||||
"""
|
||||
|
||||
layer: int
|
||||
obj: GameObject
|
||||
|
||||
|
||||
def get_surfaces_from_video (
|
||||
video_path: str,
|
||||
) -> list[Surface]:
|
||||
|
||||
新しい課題から参照
ユーザをブロックする