动次打次+金币https://www.zhihu.com/video/1237694139854061568
步骤6-添加金币和音效
下面的代码添加了我们可以收集的硬币。它还添加了一个声音,当用户点击硬币,或按下跳转按钮时播放。
我们用arcade.check_for_collision_with_list函数检查玩家是否接触金币。它的使用方式为玩家精灵和带有金币的列表作为传入参数。函数返回与玩家精灵接触的金币列表。如果没有硬币接触,则列表为空。
Sprite.remove_from_sprite_lists函数将从所有列表中删除该精灵,并有效地执行游戏。
请注意,图像周围的任何透明“空白”都将被视为hitbox。您可以在图形编辑器中修剪空间,或者在第二部分中,我们将向您展示如何指定hitbox。
"""Platformer Game06_coins_and_sound.py - 添加金币和音效"""
import arcade
# 定义常量,屏幕的宽、高和标题
SCREEN_WIDTH = 1000
SCREEN_HEIGHT = 650
SCREEN_TITLE = "Platformer"
# 用于缩放精灵原始大小的常数
CHARACTER_SCALING = 1
TILE_SCALING = 0.5
COIN_SCALING = 0.5
# 玩家的移动速度、重力以及跳跃速度,以每帧像素为单位
PLAYER_MOVEMENT_SPEED = 5
GRAVITY = 1
PLAYER_JUMP_SPEED = 15
# 在人物和游戏边框之间保留多少像素作为最小边距
# 就是人物不能太靠近边框,太近就该移动摄像头了
LEFT_VIEWPORT_MARGIN = 150
RIGHT_VIEWPORT_MARGIN = 150
BOTTOM_VIEWPORT_MARGIN = 50
TOP_VIEWPORT_MARGIN = 100
class MyGame(arcade.Window):
"""封装成的主类"""
def __init__(self):
# 初始化父类并设置窗口
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
# 这些是跟踪我们精灵的“列表”。每个精灵应该
# 被放入列表.
self.coin_list = None
self.wall_list = None
self.player_list = None
# 保存玩家精灵的单独变量
self.player_sprite = None
# 我们的物理引擎
self.physics_engine = None
# 用来跟踪我们的滚动
self.view_bottom = 0
self.view_left = 0
# 加载音效
self.collect_coin_sound = arcade.load_sound("sounds/coin1.wav")
self.jump_sound = arcade.load_sound("sounds/jump1.wav")
arcade.set_background_color(arcade.csscolor.CORNFLOWER_BLUE)
def setup(self):
""" 在这里设置游戏。调用此函数重新启动游戏. """
# 用来跟踪我们的滚动
self.view_bottom = 0
self.view_left = 0
# 创建精灵列表
self.player_list = arcade.SpriteList()
self.wall_list = arcade.SpriteList()
self.coin_list = arcade.SpriteList()
# 设置玩家,注意将其放置在指定坐标处.
self.player_sprite = arcade.Sprite("images/player_1/player_stand.png", CHARACTER_SCALING)
self.player_sprite.center_x = 64
self.player_sprite.center_y = 96
self.player_list.append(self.player_sprite)
# 创建背景
# 这显示了如何使用循环水平放置多个精灵
for x in range(0, 1250, 64):
wall = arcade.Sprite("images/tiles/grassMid.png", TILE_SCALING)
wall.center_x = x
wall.center_y = 32
self.wall_list.a