"""arcade角色移动碰墙测试.py 简单的展示如何使用基本的角色的。如果安装了Python和Arcade街机游戏模块,那么支持它就能按上下左右键来操作小人。 由于内置了简单物理引擎,所以小人碰到墙不会前进。 """ import arcade import os SPRITE_SCALING = 0.5 SCREEN_WIDTH = 800 SCREEN_HEIGHT = 600 SCREEN_TITLE = "Python街机游戏模块arcade角色移动碰墙测试_翻译与改编:李兴球" MOVEMENT_SPEED = 5 class MyGame(arcade.Window): """ 主应用程序类 """ def __init__(self, width, height, title): """ 初始化器,首先初始化超类的同名方法。 """ super().__init__(width, height, title) # 定义角色列表 self.coin_list = None self.wall_list = None self.player_list = None # 设置角色 self.score = 0 self.player_sprite = None self.physics_engine = None def setup(self): """ 对游戏进行设置与初始化变量们。 """ # 新建角色列表 self.player_list = arcade.SpriteList() self.wall_list = arcade.SpriteList() # 设置角色 self.score = 0 self.player_sprite = arcade.Sprite("images/character.png",SPRITE_SCALING*2) self.player_sprite.center_x = 50 # 设置角色的中心点x坐标 self.player_sprite.center_y = 64 # 设置角色的中心点y坐标 self.player_list.append(self.player_sprite) # 添加到角色列表 # -- 设置墙,就是铺一些图片 # 创建一行墙 for x in range(173, 650, 52): wall = arcade.Sprite("images/boxCrate_double.png", SPRITE_SCALING ) wall.center_x = x wall.center_y = 200 self.wall_list.append(wall) # 添加到墙列表 # 创建一列墙 for y in range(273, 500, 52): wall = arcade.Sprite("images/boxCrate_double.png", SPRITE_SCALING) wall.center_x = 465 wall.center_y = y self.wall_list.append(wall) # 添加简单物理引擎 self.physics_engine = arcade.PhysicsEngineSimple(self.player_sprite,self.wall_list) # 设置背景颜色 arcade.set_background_color(arcade.color.AMAZON) def on_draw(self): """ 渲染屏幕 """ # 此命令要写在开始画角色之前 arcade.start_render() # 画所有的角色 self.wall_list.draw() self.player_list.draw() def on_key_press(self, key, modifiers): """当有键按下时,会调用这个方法. """ if key == arcade.key.UP: # 如果按了上方向箭头 self.player_sprite.change_y = MOVEMENT_SPEED # 玩家角色上移 elif key == arcade.key.DOWN: self.player_sprite.change_y = -MOVEMENT_SPEED elif key == arcade.key.LEFT: self.player_sprite.change_x = -MOVEMENT_SPEED elif key == arcade.key.RIGHT: # 如果按了右方向箭头 self.player_sprite.change_x = MOVEMENT_SPEED # 玩家角色右移 def on_key_release(self, key, modifiers): """当有键松开时,调用这个方法 """ if key == arcade.key.UP or key == arcade.key.DOWN: self.player_sprite.change_y = 0 elif key == arcade.key.LEFT or key == arcade.key.RIGHT: self.player_sprite.change_x = 0 def update(self, delta_time): """ 移动与游戏逻辑 """ # 更新所有角色。 (此例中角色们并没有做什么.) self.physics_engine.update() def main(): """ 程序的主要方法 """ window = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE) window.setup() arcade.run() if __name__ == "__main__": main()
发表评论