"""
Platformer Game
"""
import arcade
# Constants
SCREEN_WIDTH = 1000
SCREEN_HEIGHT = 650
SCREEN_TITLE = "Platformer"
# Constants used to scale our sprites from their original size
CHARACTER_SCALING = 1
TILE_SCALING = 0.5
COIN_SCALING = 0.5
# Movement speed of player, in pixels per frame
PLAYER_MOVEMENT_SPEED = 10
GRAVITY = 1
PLAYER_JUMP_SPEED = 20
class MyGame(arcade.Window):
"""
Main application class.
"""
def __init__(self):
# 调用父类并设置窗口大小和标题
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
# 地图对象
self.tile_map = None
# 场景对象
self.scene = None
# 玩家角色精灵
self.player_sprite = None
# 物理引擎
self.physics_engine = None
# 一个用于滚动屏幕的相机
self.camera = None
# 一个用于绘制GUI元素的相机
self.gui_服务器托管网camera = None
# 记分板
self.score = 0
# 加载音效
self.collect_coin_sound = arcade.load_sound(":resources:sounds/coin1.wav")
self.jump_sound = arcade.load_sound(":resources:sounds/jump1.wav")
arcade.set_background_color(arcade.csscolor.CORNFLOWER_BLUE)
def setup(self):
"""在这里设置游戏。调用此函数以重新开始游戏。"""
# 设置相机
self.camera = arcade.Camera(self.width, self.height)
self.gui_camera = arcade.Camera(self.width, self.height)
# 地图文件名
map_name = ":resources:tiled_maps/map.json"
# 每个图层的选项定义在一个字典中
# 这里为平台图层配置了空间哈希检测
layer_options = {
"Platforms": {
"use_spatial_hash": True,
},
}
# 读取Tiled地图
self.tile_map = arcade.load_tilemap(map_name, TILE_SCALING, layer_options)
# 使用TileMap初始化Scene,并自动将地图的所有图层作为SpriteLists添加到Scene中
self.scene = arcade.Scene.from_tilemap(self.tile_map)
# 设置初始得分为0
self.score = 0
# 设置玩家角色精灵的位置
image_source = ":resources:images/animated_characters/female_adventurer/femaleAdventurer_idle.png"
self.player_sprite = arcade.Sprite(image_source, CHARACTER_SCA服务器托管网LING)
self.player_sprite.center_x = 128
self.player_sprite.center_y = 128
self.scene.add_sprite("Player", self.player_sprite)
# --- 其他设置
# 设置背景颜色
if self.tile_map.background_color:
arcade.set_background_color(self.tile_map.background_color)
# 创建物理引擎
self.physics_engine = arcade.PhysicsEnginePlatformer(
self.player_sprite, gravity_constant=GRAVITY, walls=self.scene["Platforms"]
)
def on_draw(self):
"""绘制屏幕。"""
# 清除屏幕为背景颜色
self.clear()
# 使用游戏相机绘制场景
self.camera.use()
self.scene.draw()
# 使用GUI相机绘制GUI元素
self.gui_camera.use()
score_text = f"得分: {self.score}"
arcade.draw_text(
score_text,
10,
10,
arcade.csscolor.WHITE,
18,
)
def on_key_press(self, key, modifiers):
"""按下键盘时调用此函数。"""
if key == arcade.key.UP or key == arcade.key.W:
if self.physics_engine.can_jump():
self.player_sprite.change_y = PLAYER_JUMP_SPEED
arcade.play_sound(self.jump_sound)
elif 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, modifiers):
"""释放键盘时调用此函数。"""
if 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 center_camera_to_player(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_y 0:
screen_center_y = 0
player_centered = screen_center_x, screen_center_y
self.camera.move_to(player_centered)
def on_update(self, delta_time):
"""游戏逻辑更新和移动处理。"""
# 使用物理引擎移动玩家角色
self.physics_engine.update()
# 检查是否碰到硬币
coin_hit_list = arcade.check_for_collision_with_list(
self.player_sprite, self.scene["Coins"]
)
# 遍历每个被碰到的硬币,移除它并播放音效
for coin in coin_hit_list:
coin.remove_from_sprite_lists()
arcade.play_sound(self.collect_coin_sound)
self.score += 1
# 摄像机跟随玩家角色
self.center_camera_to_player()
def main():
"""主函数"""
window = MyGame()
window.setup()
arcade.run()
if __name__ == "__main__":
main()
该程序是一个平台游戏,使用arcade库进行开发。
在主函数中,创建一个MyGame对象,然后调用它的setup()方法进行初始化,并最后调用arcade的run()方法来开始游戏循环。
MyGame类继承自arcade.Window类,作为主应用程序类。在MyGame的构造函数中,设置了窗口的大小和标题,并初始化了一些变量。
setup()方法用于设置游戏,包括设置相机、加载地图、场景、玩家角色精灵和物理引擎。
on_draw()方法用于绘制屏幕,包括使用游戏相机绘制场景和使用GUI相机绘制GUI元素。
on_key_press()和on_key_release()方法用于处理键盘按下和释放事件,控制玩家角色的移动。
center_camera_to_player()方法用于将相机居中于玩家角色。
on_update()方法用于更新游戏逻辑和处理移动,包括使用物理引擎移动玩家角色、检查是否碰到硬币、播放音效和摄像机跟随玩家角色。
主函数main()创建了MyGame对象并调用了它的setup()方法,最后调用arcade的run()方法开始游戏循环。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
服务器托管网 大家好,我是小悟 支付宝小程序备案整体流程总共分为五个环节:备案信息填写、平台初审、工信部短信核验、通管局审核和备案成功。 服务商可以代小程序发起备案申请。在申请小程序备案之前,需要确保小程序基本信息已填写完成、小程序至少存在一个审核通过的类目。…