From 5859d67376f1f3c5ea2223cdd8a7ee5bca1e4173 Mon Sep 17 00:00:00 2001 From: Anton Laktionov Date: Tue, 26 May 2026 17:20:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=81=D0=B5=20=D0=B5=D1=89=D0=B5=20?= =?UTF-8?q?=D0=B2=D0=BE=D1=8E=D1=8E=20=D1=81=20=D1=84=D0=B8=D0=B7=D0=B8?= =?UTF-8?q?=D0=BA=D0=BE=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 9 ++++++--- tank.py | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/main.py b/main.py index 5817ef5..a4603b7 100644 --- a/main.py +++ b/main.py @@ -16,7 +16,9 @@ class MainView(arcade.View): self.map = Map(SCREEN_WIDTH,SCREEN_HEIGHT,64,64) self.player = list(filter(lambda tank: tank.type=='player', Tank.ls))[0] - self.physics_engine = arcade.PhysicsEngineSimple(self.player.get_sprite(),Map.block_list) + self.physics_engine = arcade.PymunkPhysicsEngine(gravity=(0, 0),damping=0.01) + self.physics_engine.add_sprite(self.player.get_sprite(), friction=0.5, mass=1.0) + #self.physics_engine.add_sprite_list(Map.block_list, friction=0.5, collision_type="wall") def on_draw(self): self.clear() @@ -26,7 +28,7 @@ class MainView(arcade.View): Bullet.draw() def on_update(self,time_delta): - self.physics_engine.update() + self.physics_engine.step() Tank.update() Bonus.update_list(time_delta) Bullet.update_list() @@ -37,7 +39,8 @@ class MainView(arcade.View): def on_key_press(self,key,mod): if key == arcade.key.A: self.last_key = key - self.player.move(-1,0) + #self.player.move(-1,0) + self.player.move_engine(self.physics_engine,-1,0) elif key == arcade.key.D: self.last_key = key self.player.move(1,0) diff --git a/tank.py b/tank.py index da9b3e1..dd04dfc 100644 --- a/tank.py +++ b/tank.py @@ -46,6 +46,13 @@ class Tank(): Tank.ls.append(self) def get_sprite(self): return self.sp_body[0] + def get_sprite_list(self): + sp = arcade.SpriteList() + for sprite in self.sp_body: + sp.append(sprite) + for sprite in self.sp_gun: + sp.append(sprite) + return sp def gun_to_xy(self,x,y): for gun in self.sp_gun: gun.angle = math.atan2(x-gun.center_x,y-gun.center_y) * 180 / math.pi @@ -56,8 +63,11 @@ class Tank(): if dx != 0 or dy != 0: body.angle = math.atan2(dx,dy) * 180 / math.pi for gun in self.sp_gun: - gun.change_x = self.sp_body[0].change_x - gun.change_y = self.sp_body[0].change_y + gun.change_x = dx*self.speed + gun.change_y = dy*self.speed + def move_engine(self,engine,dx,dy): + for sprite in self.sp_body:#,*self.sp_gun]: + engine.apply_force(sprite,(dx*self.speed,dy*self.speed)) def shoot(self): for gun in self.sp_gun: Bullet(