python arcade库_python游戏库:Arcade教程(2)

挂王之王----上天入地https://www.zhihu.com/video/1237047080927444992

步骤2-添加精灵

Setup vs. Init

在本次的代码示例中,我们将使用一个__init__方法和一个setup方法来设置游戏。

__init__只设置变量,但不创建任何类实例。它们只是默认为0或None。setup实际上会创建对象实例,例如图形精灵。

他们被一分为二是有原因的。有了一个分开的setup方法,以后我们可以很容易地在游戏中添加“重启/再次玩”功能。调用一个简单的setup函数将重置所有内容。我们还可以添加额外的关卡,如设置setup_level_1和setup_level_2。

在游戏中添加精灵

一旦我们成功启动窗口,下一步要做的就是放一些图形。“精灵”是可以与之交互的图形项目,例如玩家角色、硬币和墙壁。要使用“精灵”,我们将使用Sprite类。

我们通过创建sprite类的实例来创建精灵:

self.player_sprite = arcade.Sprite("images/player_1/player_stand.png", CHARACTER_SCALING))

将Sprite类引用提供给要使用的图像,并且(可选)可以将其放大或缩小。如果第二个参数是0.5,精灵是128x128,那么缩小50%后就是64x64。

接下来,我们需要知道精灵去了哪里。可以使用属性center_x和center_y定位精灵。您还可以使用“上”、“下”、“左”和“右”来获取或设置精灵的位置,让它不是在中心。也可以使用position属性同时设置x和y。self.player_sprite.center_x = 64

self.player_sprite.center_y = 120

最后,Sprite类的所有实例都需要进入SpriteList类。self.player_list.append(self.player_sprite)

我们根据精灵所在的列表来管理它们。在下面的示例中,有一个wall_list,其中包含玩家角色无法通过的所有内容,还有一个coin_list,其中包含了我们可以用来获取点数的精灵。还有一个coin_list,里面只有玩家。

请注意,代码通过三种方式创建精灵:

1. 创建一个Sprite类,定位它,将它添加到列表中

2. 在循环中创建一系列精灵

3. 使用坐标创建一系列精灵

"""Platformer Game02_draw_sprites - 绘制指定位置的精灵"""

import arcade

# 定义常量,屏幕的宽、高和标题

SCREEN_WIDTH = 1000

SCREEN_HEIGHT = 650

SCREEN_TITLE = "Platformer"

# 用于缩放精灵原始大小的常数

CHARACTER_SCALING = 1

TILE_SCALING = 0.5

COIN_SCALING = 0.5

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

arcade.set_background_color(arcade.csscolor.CORNFLOWER_BLUE)

def setup(self):

""" 在这里设置游戏。调用此函数重新启动游戏. """

# 创建精灵列表

self.player_list = arcade.SpriteList()

self.wall_list = arcade.SpriteList()

self.coin_list = arcade.SpriteList()

# 设置玩家,注意将其放置在指定坐标处.

image_source = "images/player_1/player_stand.png"

self.player_sprite = arcade.Sprite(image_source, CHARACTER_SCALING)

self.player_sprite.center_x = 64

self.player_sprite.center_y = 128

self.player_list.append(self.player_sprite)

# 创建背景

# 这显示了如何使用循环水平放置多个精灵

for x in range(0, 1250, 64):

wall = arcade.Sprite("images/tiles/grassMid.pngg", TILE_SCALING)

wall.center_x = x

wall.center_y = 32

self.wall_list.append(wall)

# 把一些板条箱放在地上

# 这显示了如何使用坐标列表来放置精灵

coordinate_list = [[512, 96],

[256, 96],

[768, 96]]

for coordinate in coordinate_list:

# 添加一个地板

wall = arcade.Sprite("images/tiles/boxCrate_double.png", TILE_SCALING)

wall.position = coordinate

self.wall_list.append(wall)

def on_draw(self):

""" 渲染屏幕 """

# 将屏幕设置为背景色

arcade.start_render()

# 画出我们的精灵

self.wall_list.draw()

self.coin_list.draw()

self.player_list.draw()

def main():

""" 主函数,大佬们往往把功能封装成类在main函数里写测试的代码,如果直接运行该脚本就会运行测试"""

window = MyGame()

window.setup()

arcade.run()

if __name__ == "__main__":

main()

备注:代码示例启动并运行后:

1. 调整代码并尝试将精灵放置在新位置。

2. 对精灵使用不同的图像(请参见“图像”文件夹)

3. 练习通过循环和列表中的坐标单独放置。

步骤3-添加用户控制

现在我们需要能够让用户移动。如何做到这一点:

1. 每个精灵都有center_x和center_y属性。更改这些将更改精灵的位置。(也有将移动精灵的顶部、底部、左侧、右侧和角度的属性。)

2. 每个精灵都有change_x和change_y变量。这些可以用来保持精灵移动的速度。我们将根据用户点击的键调整这些。如果用户点击右箭头键,我们希望更改x的值为正值。如果值为5,则每帧移动5像素。

3.我们可以在精灵列表上调用update 方法,它将根据它们的速度移动所有精灵。我们也可以使用一个(非常)简单的物理引擎physicenginesimple类来移动精灵,但不能让它们穿过墙壁。

"""Platformer Game03_user_control.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

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

arcade.set_background_color(arcade.csscolor.CORNFLOWER_BLUE)

def setup(self):

""" 在这里设置游戏。调用此函数重新启动游戏. """

# 创建精灵列表

self.player_list = arcade.SpriteList()

self.wall_list = arcade.SpriteList()

self.coin_list = arcade.SpriteList()

# 设置玩家,注意将其放置在指定坐标处.

image_source = "images/player_1/player_stand.png"

self.player_sprite = arcade.Sprite(image_source, CHARACTER_SCALING)

self.player_sprite.center_x = 64

self.player_sprite.center_y = 128

self.player_list.append(self.player_sprite)

# 创建背景

# 这显示了如何使用循环水平放置多个精灵

for x in range(0, 1250, 64):

wall = arcade.Sprite("images/tiles/grassMid.pngg", TILE_SCALING)

wall.center_x = x

wall.center_y = 32

self.wall_list.append(wall)

# 把一些板条箱放在地上

# 这显示了如何使用坐标列表来放置精灵

coordinate_list = [[512, 96],

[256, 96],

[768, 96]]

for coordinate in coordinate_list:

# 添加一个地板

wall = arcade.Sprite("images/tiles/boxCrate_double.png", TILE_SCALING)

wall.position = coordinate

self.wall_list.append(wall)

# 添加物理引擎

self.physics_engine = arcade.PhysicsEngineSimple(self.player_sprite, self.wall_list)

def on_draw(self):

""" 渲染屏幕 """

# 将屏幕设置为背景色

arcade.start_render()

# 画出我们的精灵

self.wall_list.draw()

self.coin_list.draw()

self.player_list.draw()

def on_key_press(self, key, modifiers):

"""每当按下键时调用 . """

if key == arcade.key.UP or key == arcade.key.W:

self.player_sprite.change_y = PLAYER_MOVEMENT_SPEED

elif key == arcade.key.DOWN or key == arcade.key.S:

self.player_sprite.change_y = -PLAYER_MOVEMENT_SPEED

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.UP or key == arcade.key.W:

self.player_sprite.change_y = 0

elif key == arcade.key.DOWN or key == arcade.key.S:

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):

""" 移动画面与游戏逻辑 """

# 用物理引擎移动玩家

self.physics_engine.update()

def main():

""" 主函数,大佬们往往把功能封装成类在main函数里写测试的代码,如果直接运行该脚本就会运行测试"""

window = MyGame()

window.setup()

arcade.run()

if __name__ == "__main__":

main()

备注:如果您对一种更好的、更复杂的键盘控制方法感兴趣,请参见此示例和“按键盘移动”示例之间的区别。叫我彪哥:python游戏库:Arcade教程(3)​zhuanlan.zhihu.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以帮你使用Pythonarcade来创建一个平台类游戏arcade提供了一个简单而强大的API,可以帮助你创建2D游戏。它还有一个文档,可以帮助你开始创建游戏,并且拥有许多示例代码,可以让你学习如何使用这个。 ### 回答2: 使用Pythonarcade可以很方便地制作平台类游戏arcade提供了许多内置函数和类,用于处理游戏循环、精灵、碰撞检测等常见的游戏开发任务。 首先,我们需要创建一个游戏窗口。通过arcade提供的Window类,我们可以创建一个指定大小的窗口,并设置背景颜色。 接下来,我们可以创建角色或者其他游戏中的物体,这些物体被称为精灵。arcade提供了Sprite类用于创建精灵。我们可以设置精灵的外观、位置、大小等属性。 在游戏循环中,我们可以监听用户输入,例如键盘按键、鼠标点击等事件。通过事件处理函数,我们可以根据用户的操作来更新精灵的状态。 在平台类游戏中,通常会涉及到角色的跳跃、移动、碰撞检测等功能。arcade提供了一些内置函数和方法来处理这些功能。例如,我们可以使用移动函数来控制角色的水平和垂直移动。我们还可以使用碰撞检测函数来判断角色是否与其他物体发生了碰撞。 此外,arcade还可以处理音效、动画等高级功能,以及绘制背景、地图等元素。它还提供了一些内置的工具函数,用于计算距离、旋转等常见操作。 总的来说,使用Pythonarcade可以实现一个简单而又有趣的平台类游戏。通过利用arcade提供的丰富功能,可以很方便地创建精灵、处理用户输入、实现碰撞检测等游戏开发任务。无论是新手还是有经验的开发者,都可以轻松上手使用arcade制作自己的平台类游戏。 ### 回答3: 使用Pythonarcade可以很方便地制作平台类游戏。首先,我们需要导入arcade。然后创建一个继承自arcade.Window的类,作为游戏窗口。 在窗口类中,我们可以定义一些属性,比如玩家的位置和角色模型等。然后,我们可以使用arcade提供的绘图函数来渲染游戏界面。 接着,我们可以定义一些事件处理函数,比如按键事件或鼠标事件。根据不同的事件,我们可以更新游戏状态,比如移动玩家或触发一些特殊的效果。 在游戏循环中,我们可以使用arcade提供的定时器函数来设定游戏帧率。每一帧,我们可以调用draw函数来绘制游戏界面,并在需要时更新游戏状态。 此外,我们可以使用arcade提供的物理引擎功能,比如重力或碰撞检测,来增加游戏的真实性和挑战性。 最后,当玩家达到游戏的胜利条件或失败条件时,我们可以显示游戏结束画面,并提供一些重新开始或退出游戏的选项。 总的来说,使用Pythonarcade可以很方便地制作一个平台类游戏。通过定义游戏窗口、绘制游戏界面、处理事件和更新游戏状态等步骤,我们可以创建一个有趣且具有挑战性的游戏体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值