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