Skip to content

AStar: Path lays through obstacles #806

@alderven

Description

@alderven

AStar path lays through obstacles:

изображение

Code to reproduce:

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()

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions