Помогите, в чём ошибка?

import arcade

weidht = 1000
height = 650
name = 'atgame'
PLAYER_MOVEMENT_SPEED = 5
PLAYER_JUMP_SPEED = 10
GRAVITY = 1


class Win(arcade.View):
    def __init__(self, game_view):
        super().__init__()
        self.game_view = game_view
        arcade.set_background_color(arcade.color.LIGHT_GREEN)
        arcade.set_viewport(0,weidht,0,height)

    def on_draw(self):
        self.clear()

    def on_mouse_press(self, x: int, y: int, button: int, modifiers: int):
        game_view = Game()
        game_view.setup()
        self.window.show_view(game_view)

class Game(arcade.View):
    def __init__(self):
        super().__init__()
        arcade.set_background_color(arcade.color.AQUA)
        self.player_sprite = None
        self.scene = None
        self.physics_engine = None
        self.camera = None
        self.enemy_sprite = None
        self.exit = None

    def on_show_view(self):
        arcade.set_background_color(arcade.color.AQUA)

    def setup(self):
        self.scene = arcade.Scene()
        self.scene.add_sprite_list("Player")
        self.scene.add_sprite_list("Walls", use_spatial_hash=True)
        player_image = ":resources:images/animated_characters/male_adventurer/maleAdventurer_idle.png"
        ground_image = ":resources:images/tiles/dirtMid.png"
        box_image = ":resources:images/tiles/boxCrate_double.png"
        enemy_image = ":resources:images/animated_characters/zombie/zombie_idle.png"
        exit_image = ":resources:images/tiles/signExit.png"
        self.player_sprite = arcade.Sprite(player_image)
        self.player_sprite.center_x = 64
        self.player_sprite.center_y = 128
        self.scene.add_sprite('Player', self.player_sprite)
        for x in range(1, 1250, 64):
            ground = arcade.Sprite(ground_image, 0.5)
            ground.center_x = x
            ground.center_y = 32
            self.scene.add_sprite('Walls', ground)
        coordinate_list = [[512, 96], [256, 96], [768, 96]]
        for coordinate in coordinate_list:
            box = arcade.Sprite(box_image, 0.5)
            box.position = coordinate
            self.scene.add_sprite('Walls', box)
        self.physics_engine = arcade.PhysicsEnginePlatformer(
            player_sprite=self.player_sprite,
            gravity_constant=GRAVITY,
            walls=self.scene.get_sprite_list('Walls')
        )
        self.camera = arcade.Camera(self.camera.viewport_width / 2,self.camera.viewport_height / 2)
        self.enemy_sprite = arcade.Sprite(enemy_image)
        self.enemy_sprite.center_x = 400
        self.enemy_sprite.center_y = 128
        self.scene.add_sprite("Enemy", self.enemy_sprite)
        self.exit = arcade.Sprite(exit_image, 0.5)
        self.exit.center_x = 1200
        self.exit.center_y = 80
        self.scene.add_sprite('Exit',self.exit)

    def on_key_press(self, key: int, modifiers: int):
        if key == arcade.key.UP or key == arcade.key.W:
            if self.physics_engine.can_jump():
                self.player_sprite.change_y = PLAYER_JUMP_SPEED
            self.player_sprite.change_y = PLAYER_JUMP_SPEED
            self.isGround = False
        if key == arcade.key.LEFT or key == arcade.key.A:
            self.player_sprite.change_x = -PLAYER_MOVEMENT_SPEED
        elif key == arcade.key.RIGHT or key == arcade.key.D:
            self.player_sprite.change_x = PLAYER_MOVEMENT_SPEED

    def on_key_release(self, key: int, modifiers: int):
        if key == arcade.key.UP or key == arcade.key.W:
            self.player_sprite.change_y = 0
        elif key == arcade.key.LEFT or key == arcade.key.A:
            self.player_sprite.change_x = 0
        elif key == arcade.key.RIGHT or key == arcade.key.D:
            self.player_sprite.change_x = 0

    def on_update(self, delta_time: float):
        self.player_sprite.update()
        self.physics_engine.update()
        self.center_camera_to_payer()
        if arcade.check_for_collision(self.player_sprite, self.enemy_sprite):
            self.enemy_sprite.kill()
            arcade.close_window()
            print('loser')
        if arcade.check_for_collision(self.player_sprite,self.exit):
            win_view = Win(arcade.View)
            self.window.show_view(win_view)

    def on_draw(self):
        self.clear()
        self.scene.draw()
        self.camera.use()

    def center_camera_to_payer(self):
        screen_center_x = self.player_sprite.center_x - (self.camera.viewport_width / 2)
        screen_center_y = self.player_sprite.center_y - (self.camera.viewport_height / 2)
        if screen_center_x < 0:
            screen_center_x = 0
        if screen_center_x < 0:
            screen_center_y = 0
        player_centered = screen_center_x, screen_center_y
        self.camera.move_to(player_centered)

window = arcade.Window(weidht,height,name)
start_view = Game()
window.show_view(start_view)
arcade.run()

Ошибка:

Traceback (most recent call last):
  File "C:\всё тут\python\ates\A3.py", line 127, in <module>
    arcade.run()
  File "C:\Users\2-8-9\AppData\Local\Programs\Python\Python310\lib\site-packages\arcade\window_commands.py", line 323, in run
    pyglet.app.run()
  File "C:\Users\2-8-9\AppData\Local\Programs\Python\Python310\lib\site-packages\pyglet\app\__init__.py", line 107, in run
    event_loop.run(interval)
  File "C:\Users\2-8-9\AppData\Local\Programs\Python\Python310\lib\site-packages\pyglet\app\base.py", line 184, in run
    timeout = self.idle()
  File "C:\Users\2-8-9\AppData\Local\Programs\Python\Python310\lib\site-packages\pyglet\app\base.py", line 245, in idle
    self.clock.call_scheduled_functions(dt)
  File "C:\Users\2-8-9\AppData\Local\Programs\Python\Python310\lib\site-packages\pyglet\clock.py", line 277, in call_scheduled_functions
    item.func(now - item.last_ts, *item.args, **item.kwargs)
  File "C:\Users\2-8-9\AppData\Local\Programs\Python\Python310\lib\site-packages\arcade\application.py", line 318, in _dispatch_updates
    self.dispatch_event('on_update', delta_time)
  File "C:\Users\2-8-9\AppData\Local\Programs\Python\Python310\lib\site-packages\pyglet\window\__init__.py", line 1361, in dispatch_event
    super().dispatch_event(*args)
  File "C:\Users\2-8-9\AppData\Local\Programs\Python\Python310\lib\site-packages\pyglet\event.py", line 415, in dispatch_event
    if handler(*args):
  File "C:\всё тут\python\ates\A3.py", line 98, in on_update
    self.player_sprite.update()
AttributeError: 'NoneType' object has no attribute 'update'

Process finished with exit code 1

Ответы (0 шт):