Все еще воюю с физикой
This commit is contained in:
@@ -16,7 +16,9 @@ class MainView(arcade.View):
|
|||||||
|
|
||||||
self.map = Map(SCREEN_WIDTH,SCREEN_HEIGHT,64,64)
|
self.map = Map(SCREEN_WIDTH,SCREEN_HEIGHT,64,64)
|
||||||
self.player = list(filter(lambda tank: tank.type=='player', Tank.ls))[0]
|
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):
|
def on_draw(self):
|
||||||
self.clear()
|
self.clear()
|
||||||
@@ -26,7 +28,7 @@ class MainView(arcade.View):
|
|||||||
Bullet.draw()
|
Bullet.draw()
|
||||||
|
|
||||||
def on_update(self,time_delta):
|
def on_update(self,time_delta):
|
||||||
self.physics_engine.update()
|
self.physics_engine.step()
|
||||||
Tank.update()
|
Tank.update()
|
||||||
Bonus.update_list(time_delta)
|
Bonus.update_list(time_delta)
|
||||||
Bullet.update_list()
|
Bullet.update_list()
|
||||||
@@ -37,7 +39,8 @@ class MainView(arcade.View):
|
|||||||
def on_key_press(self,key,mod):
|
def on_key_press(self,key,mod):
|
||||||
if key == arcade.key.A:
|
if key == arcade.key.A:
|
||||||
self.last_key = key
|
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:
|
elif key == arcade.key.D:
|
||||||
self.last_key = key
|
self.last_key = key
|
||||||
self.player.move(1,0)
|
self.player.move(1,0)
|
||||||
|
|||||||
@@ -46,6 +46,13 @@ class Tank():
|
|||||||
Tank.ls.append(self)
|
Tank.ls.append(self)
|
||||||
def get_sprite(self):
|
def get_sprite(self):
|
||||||
return self.sp_body[0]
|
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):
|
def gun_to_xy(self,x,y):
|
||||||
for gun in self.sp_gun:
|
for gun in self.sp_gun:
|
||||||
gun.angle = math.atan2(x-gun.center_x,y-gun.center_y) * 180 / math.pi
|
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:
|
if dx != 0 or dy != 0:
|
||||||
body.angle = math.atan2(dx,dy) * 180 / math.pi
|
body.angle = math.atan2(dx,dy) * 180 / math.pi
|
||||||
for gun in self.sp_gun:
|
for gun in self.sp_gun:
|
||||||
gun.change_x = self.sp_body[0].change_x
|
gun.change_x = dx*self.speed
|
||||||
gun.change_y = self.sp_body[0].change_y
|
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):
|
def shoot(self):
|
||||||
for gun in self.sp_gun:
|
for gun in self.sp_gun:
|
||||||
Bullet(
|
Bullet(
|
||||||
|
|||||||
Reference in New Issue
Block a user