Помогите, в чём ошибка?
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