import arcade
WIDTH = 800
HEIGHT = 600
class MyGame(arcade.Window):
def __init__(self):
super().__init__(WIDTH, HEIGHT)
self.player = arcade.Sprite(':resources:images/animated_characters/female_person/femalePerson_idle.png', center_x=100, center_y=100)
self.enemy = arcade.Sprite(':resources:images/animated_characters/zombie/zombie_idle.png', center_x=WIDTH-100, center_y=HEIGHT-100)
barriers = arcade.SpriteList()
for x in range(-100, WIDTH+100, 100):
sprite = arcade.Sprite(':resources:images/tiles/grassCenter.png', center_x=x, center_y=HEIGHT/2)
barriers.append(sprite)
self.barrier_list = arcade.AStarBarrierList(moving_sprite=self.player,
blocking_sprites=barriers,
grid_size=50,
left=-int(self.player.center_x),
right=int(WIDTH-self.player.center_x),
bottom=-int(self.player.center_y),
top=int(HEIGHT-self.player.center_y))
self.path = None
self.sprites = arcade.SpriteList()
self.sprites.extend([self.player, self.enemy])
self.sprites.extend(barriers)
def on_draw(self):
arcade.start_render()
self.sprites.draw()
if self.path:
arcade.draw_line_strip(self.path, arcade.color.RED, 10)
def on_update(self, delta_time):
self.path = arcade.astar_calculate_path(start_point=self.player.position,
end_point=self.enemy.position,
astar_barrier_list=self.barrier_list,
diagonal_movement=False)
MyGame()
arcade.run()
AStar path lays through obstacles:
Code to reproduce: