Добавил врагов и анимацию урона

This commit is contained in:
2026-05-28 11:32:50 +03:00
parent e543a298ab
commit 29219bc874
2 changed files with 58 additions and 12 deletions
+2 -2
View File
@@ -10,9 +10,9 @@
},
"level1.tmj": {
"scale": 0.25,
"selectedLayer": 1,
"selectedLayer": 3,
"viewCenter": {
"x": 1500,
"x": 1092,
"y": 5412
}
},
+51 -5
View File
@@ -10,20 +10,35 @@ class Player(arcade.SpriteList):
super().__init__()
self.sprite = sp[0]
self.append(self.sprite)
self.damage_cooldown = 0
self.visible = True
def draw(self):
if self.damage_cooldown > 0:
self.damage_cooldown -= 1
self.visible = not self.visible
else:
self.visible = True
if self.visible:
super().draw()
def update(self):
def update(self,delta_time):
if self.damage_cooldown > 0:
self.damage_cooldown -= 1
super().update()
def damage(self,cooldown):
self.damage_cooldown = cooldown
class Coin(arcade.Sprite):
#Подготовка текстур для анимации
coin_texture = arcade.SpriteSheet('./tiles/gold.png').get_texture_grid((64,64),4,4)
coin_texture_reverse = coin_texture[1:-1]
coin_texture_reverse.reverse()
coin_texture.extend(coin_texture_reverse)
coin_texture_reverse = None
del coin_texture_reverse
class Coin(arcade.Sprite):
sprite_list = arcade.SpriteList()
texture_list = coin_texture
del coin_texture
def __init__(self,sprite):
super().__init__(sprite.textures[0],scale=sprite.scale)
self.center_x = sprite.center_x
@@ -51,6 +66,20 @@ class Coin(arcade.Sprite):
def update_list(cls):
cls.sprite_list.update()
class Enemy(arcade.Sprite):
sprite_list = arcade.SpriteList()
def __init__(self,sprite):
super().__init__(sprite.texture,scale=sprite.scale)
self.center_x = sprite.center_x
self.center_y = sprite.center_y
self.angle = sprite.angle
Enemy.sprite_list.append(self)
def collision(self):
pass
@classmethod
def draw(cls):
cls.sprite_list.draw()
class MainView(arcade.View):
def __init__(self):
super().__init__()
@@ -60,18 +89,25 @@ class MainView(arcade.View):
self.key_left = False
self.key_right = False
self.tile_map = arcade.load_tilemap('./level1.tmj',scaling=0.5)
#Стены
self.walls = self.tile_map.sprite_lists["map"]
#Фоновые тайлы
self.background = self.tile_map.sprite_lists["back"]
#Объекты монеток
for coin in self.tile_map.sprite_lists["coins"]:
Coin(coin)
#Объекты врагов
for enemy in self.tile_map.sprite_lists["enemy"]:
Enemy(enemy)
#Объект игрока
self.player = Player(self.tile_map.sprite_lists["player"])
#Подключаем физику только для стен и гравитации
self.engine = arcade.PhysicsEnginePlatformer(
player_sprite=self.player.sprite,
gravity_constant=GRAVITY,
walls=self.walls
)
self.engine.allow_multi_jump = False
#Создаем камеру
self.camera = arcade.Camera2D()
def on_update(self, delta_time):
@@ -83,7 +119,9 @@ class MainView(arcade.View):
self.player.sprite.change_x = 10
else:
self.player.sprite.change_x = 0
#self.player.update(delta_time)
self.engine.update()
#Перемещение камеры на игрока
screen_center_x, screen_center_y = self.player.sprite.position
if screen_center_x < self.camera.viewport_width/2:
screen_center_x = self.camera.viewport_width/2
@@ -92,15 +130,23 @@ class MainView(arcade.View):
if screen_center_x > (self.tile_map.width*self.tile_map.tile_width*self.tile_map.scaling) - self.camera.viewport_width/2:
screen_center_x = (self.tile_map.width*self.tile_map.tile_width*self.tile_map.scaling) - self.camera.viewport_width/2
self.camera.position = screen_center_x,screen_center_y
#Анимация монеток
Coin.update_list()
#Подбор монеток при колизии
colls = arcade.check_for_collision_with_list(self.player.sprite,Coin.sprite_list)
for coin in colls:
coin.collision()
#Столкновения с врагами
colls = arcade.check_for_collision_with_list(self.player.sprite,Enemy.sprite_list)
for enemy in colls:
enemy.collision()
self.player.damage(10)
def on_draw(self):
self.clear()
self.camera.use()
self.background.draw()
Enemy.draw()
Coin.draw()
self.player.draw()
self.walls.draw()