返回顶部
首页 > 资讯 > 精选 >怎么用Pygame使你的游戏角色移动起来
  • 755
分享到

怎么用Pygame使你的游戏角色移动起来

2023-06-16 21:06:37 755人浏览 安东尼
摘要

怎么用Pygame使你的游戏角色移动起来,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。我们将使用 Pygame 来添加键盘控制,如此一来你就可以控制你的角色的移动。在 Pyga

怎么用Pygame使你的游戏角色移动起来,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

我们将使用 Pygame 来添加键盘控制,如此一来你就可以控制你的角色的移动。

在 Pygame 中有许多函数可以用来添加(除键盘外的)其他控制,但如果你正在敲击 python 代码,那么你一定是有一个键盘的,这将成为我们接下来会使用的控制方式。一旦你理解了键盘控制,你可以自己去探索其他选项。

在本系列的第二篇文章中,你已经为退出游戏创建了一个按键,移动角色的(按键)原则也是相同的。但是,使你的角色移动起来要稍微复杂一点。

让我们从简单的部分入手:设置控制器按键。

为控制你的玩家妖精设置按键

在 IDLE、Ninja-IDE 或文本编辑器中打开你的 Python 游戏脚本。

因为游戏需要时刻“监听”键盘事件,所以你写的代码需要连续运行。你知道应该把需要在游戏周期中持续运行的代码放在哪里吗?

如果你回答“放在主循环中”,那么你是正确的!记住除非代码在循环中,否则(大多数情况下)它只会运行仅一次。如果它被写在一个从未被使用的类或函数中,它可能根本不会运行。

要使 Python 监听传入的按键,将如下代码添加到主循环。目前的代码还不能产生任何的效果,所以使用 print 语句来表示成功的信号。这是一种常见的调试技术。

while main == True:    for event in pygame.event.get():        if event.type == pygame.QUIT:            pygame.quit(); sys.exit()            main = False         if event.type == pygame.KEYDOWN:            if event.key == pygame.K_LEFT or event.key == ord('a'):                print('left')            if event.key == pygame.K_RIGHT or event.key == ord('d'):                print('right')            if event.key == pygame.K_UP or event.key == ord('w'):                print('jump')         if event.type == pygame.KEYUP:            if event.key == pygame.K_LEFT or event.key == ord('a'):                print('left stop')            if event.key == pygame.K_RIGHT or event.key == ord('d'):                print('right stop')            if event.key == ord('q'):                pygame.quit()                sys.exit()                main = False

一些人偏好使用键盘字母 WASD 来控制玩家角色,而另一些偏好使用方向键。因此确保你包含了两种选项。

注意:当你在编程时,同时考虑所有用户是非常重要的。如果你写代码只是为了自己运行,那么很可能你会成为你写的程序的唯一用户。更重要的是,如果你想找一个通过写代码赚钱的工作,你写的代码就应该让所有人都能运行。给你的用户选择权,比如提供使用方向键或  WASD 的选项,是一个优秀程序员的标志。

使用 Python 启动你的游戏,并在你按下“上下左右”方向键或 ADW 键的时候查看控制台窗口的输出。

$ python ./your-name_game.py  left  left stop  right  right stop  jump

这验证了 Pygame 可以正确地检测按键。现在是时候来完成使妖精移动的艰巨任务了。

编写玩家移动函数

为了使你的妖精移动起来,你必须为你的妖精创建一个属性代表移动。当你的妖精没有在移动时,这个变量被设为 0

如果你正在为你的妖精设置动画,或者你决定在将来为它设置动画,你还必须跟踪帧来使走路循环保持在轨迹上。

Player 类中创建如下变量。开头两行作为上下文对照(如果你一直跟着做,你的代码中就已经有这两行),因此只需要添加三行:

    def __init__(self):        pygame.sprite.Sprite.__init__(self)        self.movex = 0 # 沿 X 方向移动        self.movey = 0 # 沿 Y 方向移动        self.frame = 0 # 帧计数

设置好了这些变量,是时候去为妖精移动编写代码了。

玩家妖精不需要时刻响应控制,有时它并没有在移动。控制妖精的代码,仅仅只是玩家妖精所有能做的事情中的一小部分。在 Python 中,当你想要使一个对象做某件事并独立于剩余其他代码时,你可以将你的新代码放入一个函数。Python 的函数以关键词 def 开头,(该关键词)代表了定义函数。

在你的 Player 类中创建如下函数,来为你的妖精在屏幕上的位置增加几个像素。现在先不要担心你增加几个像素,这将在后续的代码中确定。

    def control(self,x,y):        '''        控制玩家移动        '''        self.movex += x        self.movey += y

为了在 Pygame 中移动妖精,你需要告诉 Python 在新的位置重绘妖精,以及这个新位置在哪里。

因为玩家妖精并不总是在移动,所以更新只需要是 Player 类中的一个函数。将此函数添加前面创建的 control 函数之后。

要使妖精看起来像是在行走(或者飞行,或是你的妖精应该做的任何事),你需要在按下适当的键时改变它在屏幕上的位置。要让它在屏幕上移动,你需要将它的位置(由 self.rect.xself.rect.y 属性指定)重新定义为当前位置加上已应用的任意 movexmovey。(移动的像素数量将在后续进行设置。)

    def update(self):        '''        更新妖精位置        '''        self.rect.x = self.rect.x + self.movex

对 Y 方向做同样的处理:

        self.rect.y = self.rect.y + self.movey

对于动画,在妖精移动时推进动画帧,并使用相应的动画帧作为玩家的图像:

        # 向左移动        if self.movex < 0:            self.frame += 1            if self.frame > 3*ani:                self.frame = 0            self.image = self.images[self.frame//ani]         # 向右移动        if self.movex > 0:            self.frame += 1            if self.frame > 3*ani:                self.frame = 0            self.image = self.images[(self.frame//ani)+4]

通过设置一个变量来告诉代码为你的妖精位置增加多少像素,然后在触发你的玩家妖精的函数时使用这个变量。

首先,在你的设置部分创建这个变量。在如下代码中,开头两行是上下文对照,因此只需要在你的脚本中增加第三行代码:

player_list = pygame.sprite.Group()player_list.add(player)steps = 10  # 移动多少个像素

现在你已经有了适当的函数和变量,使用你的按键来触发函数并将变量传递给你的妖精。

为此,将主循环中的 print 语句替换为玩家妖精的名字(player)、函数(.control)以及你希望玩家妖精在每个循环中沿 X 轴和 Y 轴移动的步数。

        if event.type == pygame.KEYDOWN:            if event.key == pygame.K_LEFT or event.key == ord('a'):                player.control(-steps,0)            if event.key == pygame.K_RIGHT or event.key == ord('d'):                player.control(steps,0)            if event.key == pygame.K_UP or event.key == ord('w'):                print('jump')         if event.type == pygame.KEYUP:            if event.key == pygame.K_LEFT or event.key == ord('a'):                player.control(steps,0)            if event.key == pygame.K_RIGHT or event.key == ord('d'):                player.control(-steps,0)            if event.key == ord('q'):                pygame.quit()                sys.exit()                main = False

记住,steps 变量代表了当一个按键被按下时,你的妖精会移动多少个像素。如果当你按下 D 或右方向键时,你的妖精的位置增加了 10 个像素。那么当你停止按下这个键时,你必须(将 step)减 10(-steps)来使你的妖精的动量回到 0。

现在尝试你的游戏。注意:它不会像你预想的那样运行。

为什么你的妖精仍无法移动?因为主循环还没有调用 update 函数。

将如下代码加入到你的主循环中来告诉 Python 更新你的玩家妖精的位置。增加带注释的那行:

    player.update()  # 更新玩家位置    player_list.draw(world)    pygame.display.flip()    clock.tick(fps)

再次启动你的游戏来见证你的玩家妖精在你的命令下在屏幕上来回移动。现在还没有垂直方向的移动,因为这部分函数会被重力控制,不过这是另一篇文章中的课程了。

与此同时,如果你拥有一个摇杆,你可以尝试阅读 Pygame 中 joystick 模块相关的文档,看看你是否能通过这种方式让你的妖精移动起来。或者,看看你是否能通过鼠标与你的妖精互动。

最重要的是,玩的开心!

教程中用到的所有代码

为了方便查阅,以下是目前本系列文章用到的所有代码。

#!/usr/bin/env python3# 绘制世界# 添加玩家和玩家控制# 添加玩家移动控制 # GNU All-Permissive License# Copying and distribution of this file, with or without modification,# are permitted in any medium without royalty provided the copyright# notice and this notice are preserved.  This file is offered as-is,# without any warranty. import pygameimport sysimport os '''Objects''' class Player(pygame.sprite.Sprite):    '''    生成玩家    '''    def __init__(self):        pygame.sprite.Sprite.__init__(self)        self.movex = 0        self.movey = 0        self.frame = 0        self.images = []        for i in range(1,5):            img = pygame.image.load(os.path.join('images','hero' + str(i) + '.png')).convert()            img.convert_alpha()            img.set_colorkey(ALPHA)            self.images.append(img)            self.image = self.images[0]            self.rect  = self.image.get_rect()     def control(self,x,y):        '''        控制玩家移动        '''        self.movex += x        self.movey += y     def update(self):        '''        更新妖精位置        '''         self.rect.x = self.rect.x + self.movex        self.rect.y = self.rect.y + self.movey         # 向左移动        if self.movex < 0:            self.frame += 1            if self.frame > 3*ani:                self.frame = 0            self.image = self.images[self.frame//ani]         # 向右移动        if self.movex > 0:            self.frame += 1            if self.frame > 3*ani:                self.frame = 0            self.image = self.images[(self.frame//ani)+4]  '''设置'''worldx = 960worldy = 720 fps = 40        # 帧刷新率ani = 4        # 动画循环clock = pygame.time.Clock()pygame.init()main = True BLUE  = (25,25,200)BLACK = (23,23,23 )WHITE = (254,254,254)ALPHA = (0,255,0) world = pygame.display.set_mode([worldx,worldy])backdrop = pygame.image.load(os.path.join('images','stage.png')).convert()backdropbox = world.get_rect()player = Player()   # 生成玩家player.rect.x = 0player.rect.y = 0player_list = pygame.sprite.Group()player_list.add(player)steps = 10      # 移动速度 '''主循环'''while main == True:    for event in pygame.event.get():        if event.type == pygame.QUIT:            pygame.quit(); sys.exit()            main = False         if event.type == pygame.KEYDOWN:            if event.key == pygame.K_LEFT or event.key == ord('a'):                player.control(-steps,0)            if event.key == pygame.K_RIGHT or event.key == ord('d'):                player.control(steps,0)            if event.key == pygame.K_UP or event.key == ord('w'):                print('jump')         if event.type == pygame.KEYUP:            if event.key == pygame.K_LEFT or event.key == ord('a'):                player.control(steps,0)            if event.key == pygame.K_RIGHT or event.key == ord('d'):                player.control(-steps,0)            if event.key == ord('q'):                pygame.quit()                sys.exit()                main = False #    world.fill(BLACK)    world.blit(backdrop, backdropbox)    player.update()    player_list.draw(world) # 更新玩家位置    pygame.display.flip()    clock.tick(fps)

看完上述内容,你们掌握怎么用Pygame使你的游戏角色移动起来的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 怎么用Pygame使你的游戏角色移动起来

本文链接: https://lsjlt.com/news/285330.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么用Pygame使你的游戏角色移动起来
    怎么用Pygame使你的游戏角色移动起来,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。我们将使用 Pygame 来添加键盘控制,如此一来你就可以控制你的角色的移动。在 Pyga...
    99+
    2023-06-16
  • 教你如何在Pygame 中移动你的游戏角色
    Pygame是一组跨平台的 Python 模块,专为编写视频游戏而设计。它包括旨在与 Python 编程语言一起使用的计算机图形和声音库。您可以使用 pygame 创建不同类型的游...
    99+
    2024-04-02
  • 怎么用Java代码实现经典角色扮演侦探游戏游戏
    本篇内容主要讲解“怎么用Java代码实现经典角色扮演侦探游戏游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Java代码实现经典角色扮演侦探游戏游戏”吧!前言游戏背景百变山庄坐落于太平洋...
    99+
    2023-06-29
  • 教你使用Python的pygame模块实现拼图游戏
    目录pygame介绍安装pygamepygame常用模块pygame入门案例pygame实现拼图游戏总结pygame介绍 Python Pygame 是一款专门为开发和设计 2D 电...
    99+
    2024-04-02
  • 怎么使用Python+Pygame实现泡泡游戏
    这篇文章主要讲解了“怎么使用Python+Pygame实现泡泡游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Python+Pygame实现泡泡游戏”吧!一、环境安装1)素材(图片...
    99+
    2023-07-02
  • 传奇怎么用云服务器登录游戏角色
    在云服务器上登录游戏角色,你需要按照以下步骤进行操作: 首先,选择你要登录的游戏服务器和游戏角色。选择好你想要的游戏服务器后,下一步需要输入你的游戏账户和密码。这个账户和密码应该是唯一的,不能重复。 输入账户和密码后,进入游戏服务器登录...
    99+
    2023-10-26
    角色 服务器 传奇
  • 传奇怎么用云服务器登录游戏角色号
    首先,需要使用游戏中的虚拟IP地址登录游戏,这样才能使用云服务器进行登录游戏。你可以在游戏主界面中,进入游戏登录页面,然后使用输入账号密码的登录方式登录游戏。 你也可以使用游戏中的登录器进行登录,登录器可以帮助你快速登录游戏角色号,并可以...
    99+
    2023-10-27
    角色 服务器 传奇
  • 怎么使用Python+Pygame实现走四棋儿游戏
    一、游戏解说“走四儿”大部分活跃在山东济南、聊城、菏泽等地,是一种棋类游戏,特别适合儿童试玩。在一个4&times;4的棋盘上,双方各有4子,分别摆放在棋盘两个最上面的两端线的四个位置上。下图就是“走四儿”开局的样子。二、游戏规则“...
    99+
    2023-05-15
    Python Pygame
  • 传奇怎么用云服务器登录游戏角色账号
    首先,你可以尝试在浏览器中打开游戏官网,进入游戏登录界面。 点击进入登录页面,选择一个游戏帐号。 点击“立即登录”按钮,登录成功后,你会看到登录界面右上方会出现一个名为“游戏角色账号”的选项,勾选这个选项后,你就可以进入游戏角色账号。...
    99+
    2023-10-27
    账号 角色 服务器
  • 传奇怎么用云服务器登录游戏角色设置
    首先,要将云服务器账户绑定到游戏账户,这样可以保证登录时的安全性。建议使用游戏账号作为登录云服务器的账户名。 然后,在账户界面上,点击“服务器设置”选项,在弹出的窗口中,将服务器的IP地址和端口号填写好,以便云服务器的服务端能够识别到你的...
    99+
    2023-10-27
    角色 服务器 传奇
  • 怎么使用Python+Pygame实现简单的单词小游戏
    本篇内容主要讲解“怎么使用Python+Pygame实现简单的单词小游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Python+Pygame实现简单的单词小游戏”吧!一、环境准备1)...
    99+
    2023-07-05
  • 怎么用Python Pygame实现的画饼图游戏
    这篇文章主要介绍“怎么用Python Pygame实现的画饼图游戏”,在日常操作中,相信很多人在怎么用Python Pygame实现的画饼图游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-06-22
  • 传奇怎么用云服务器登录游戏角色不显示
    如果您想使用云服务器登录游戏,那么可能需要一些额外的设置。以下是一些可能有用的指南: 首先,检查您的 Wi-Fi 网络连接是否稳定。您可能需要确保您连接到的网络环境足够稳定,以便登录游戏的过程不会受到干扰。 在登录页面上,您可以选择“创...
    99+
    2023-10-27
    角色 服务器 传奇
  • 怎么使用python+pygame实现简易五子棋小游戏
    本篇内容主要讲解“怎么使用python+pygame实现简易五子棋小游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用python+pygame实现简易五子棋小游戏”吧!tkinter库...
    99+
    2023-07-05
  • 传奇怎么用云服务器登录游戏角色设置密码
    首先,选择合适的云服务器。有很多云服务器提供商可以为您提供不同类型的云服务器,包括阿里云、腾讯云、亚马逊云等。根据您的需求和预算,选择最适合您的云服务器。如果您只需要简单地登录游戏,那么可以选择便宜的阿里云云服务器,它可以提供较好的性能和较...
    99+
    2023-10-27
    角色 密码 服务器
  • 传奇怎么用云服务器登录游戏角色不显示了
    首先,传奇云服务器登录遇到这个问题可能是由于游戏账号密码的输入错误造成的。在传奇游戏中,账号密码是非常重要的,一旦密码输入错误,将会导致账号被封禁。因此,建议玩家在登录传奇游戏时,先确认自己的账号密码是否正确。如果确认密码正确,那么可以尝试...
    99+
    2023-10-27
    角色 服务器 传奇
  • 传奇怎么用云服务器登录游戏角色设置不了
    在传奇游戏中,登录失败可能有多种原因,其中最常见的原因是由于云服务器出现故障导致的。云服务器是一种基于网络的服务,它的可靠性是非常重要的。如果云服务器出现故障,玩家的游戏账号将无法登录,从而导致无法进行游戏操作。 针对这种情况,传奇游戏公...
    99+
    2023-10-28
    角色 服务器 传奇
  • 移动服务器租用怎么搭建游戏网站
    搭建游戏网站需要以下步骤:1. 选择合适的服务器租用方案:选择适合你游戏网站需求的服务器租用方案,一般需要考虑带宽、存储空间、CPU...
    99+
    2023-06-15
    移动服务器租用 服务器
  • Android使用libgdx实现模拟方向键控制角色移动的方法
    本文实例讲述了Android使用libgdx实现模拟方向键控制角色移动的方法。分享给大家供大家参考,具体如下: package com.demo; import androi...
    99+
    2022-06-06
    libgdx 方法 Android
  • VUE移动端开发中的性能优化技巧:让你的应用飞起来
    【】 一、合理使用v-if和v-for v-if和v-for是VUE中常用的指令,但使用不当会影响性能。 v-if:v-if控制元素的显示和隐藏,应避免在频繁变化的元素上使用v-if,因为每次更新都会重新渲染元素。 v-for:v...
    99+
    2024-02-27
    【】VUE、移动端开发、性能优化、应用性能
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作