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