Pygame入门 2022 (2)

这篇具有很好参考价值的文章主要介绍了Pygame入门 2022 (2)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

动画

前面已经知道如何显示图片,只需要改变图片(位置),就可以做出动画的效果了。
首先和前面一样,我们把一只蜗牛显示在窗口中:

snail_surface = pygame.image.load('graphics/snail/snail1.png')
...
screen.blit(snail_surface,(600,250))

Pygame入门 2022 (2)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rWyPFMCL-1661269394793)(assets/snail_static.png)]

只需要修改蜗牛的位置,就可以让蜗牛动起来了:

snail_surface = pygame.image.load('graphics/snail/snail1.png')
snail_x_pos = 600
...

snail_x_pos -= 1
screen.blit(snail_surface,(snail_x_pos,250))

Pygame入门 2022 (2)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rbPi9DhS-1661269394795)(assets/snail_move.gif)]

很“快”,蜗牛会跑出屏幕外。如果你想让蜗牛一直跑下去,可以用一个if语句,当蜗牛跑出去时,重置蜗牛位置:

if snail_pos_x < -100 : snail_pos_x = 800

这样蜗牛就会一直跑下去了。

拖影

Pygame入门 2022 (2)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tx9icZsf-1661269394797)(assets/tuoying.gif)]
如果我们把背景注释掉,会发现,蜗牛的移动形成了一个轨迹。
实际上,Pygame每次都会在原来的基础上绘制一次(而不会清空之前的图像),如果没有重新绘制背景将之前的蜗牛遮盖掉,就会出现这种情况。

convert

sky_surface = pygame.image.load('graphics/Sky.png').convert()
ground_surface  = pygame.image.load('graphics/ground.png').convert()
test_font = pygame.font.Font('font/Pixeltype.ttf',50)
text_surface = test_font.render("My game",False,'Black')

snail_surface = pygame.image.load('graphics/snail/snail1.png').convert_alpha()

在加载png后用.convert() 可以将图片转化成Pygame更适合处理的形式,加快运行速度。
对于物体,使用.convert_alpha(),否则会出现奇怪的边框。

长方形

长方形(Rectangles)
作用:
提供surface精确位置;
基本的碰撞
Pygame入门 2022 (2)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8hweJcLr-1661269394798)(assets/rect.png)]
可以使用pygame.Rect() 创建长方形,但是一般我们是从图片中创建。这里新建一个人物,并从中创建长方形:

player_surf = pygame.image.load('graphics/Player/player_walk_1.png').convert_alpha()
player_rect = player_surf.get_rect(midbottom=(80,300))

然后,我们就可以通过长方形来修改图片位置:

    ...
    player_rect.left += 1
    screen.blit(player_surf,player_rect)

类似地,我们把之前的蜗牛也用长方形来控制:

snail_surface = pygame.image.load('graphics/snail/snail1.png').convert_alpha()
snail_rect = snail_surface.get_rect(midbottom=(600,300))

    ...
    snail_rect.x -= 4
    if snail_rect.right <= 0: snail_rect.left = 800
    screen.blit(snail_surface,snail_rect)

长方形的碰撞检测

Collsion

两个长方形之间碰撞检测:
rect1.colliderect(rect2)

长方形和点的碰撞检测,这很适合检测鼠标和长方形的碰撞。
rect1.collidepoint((x,y))

获取鼠标位置的方式:
Pygame入门 2022 (2)

1.通过pygame.mouse
通过get_pos()获取鼠标位置(x,y),
通过get_pressed() 获取鼠标(左,中,右)是否按下。


mouse_pos = pygame.mouse.get_pos()
if player_rect.collidepoint(mouse_pos):
    print(pygame.mouse.get_pressed())

2.通过event

if event.type == pygame.MOUSEMOTION:
    print(event.pos)

长方形的绘制

pygame.draw.xx 可以绘制各种图形,包括长方形,圆形,直线等。可以去官网文档查看,这里只展示长方形:

pygame.draw.rect(screen,'Pink',score_rect)
pygame.draw.rect(screen,'Pink',score_rect,10)

颜色

Pygame入门 2022 (2)
Pygame支持RGB及其16进制形式显示颜色。
Pygame入门 2022 (2)
RGB 即(Red,Green,Blue) 三原色数组,值为0-255.
hexadecimal(16进制形式)为 #rrggbb
在绘图时,可以通过rgb或其16进制形式指定颜色。

pygame.draw.rect(screen,'#c0e8ec',score_rect)

角色

1.键盘输入

Pygame入门 2022 (2)
1.pygame.key
pygame.key.get_pressed()会返回一个字典,记录每个键的是否被按。

keys = pygame.key.get_pressed()
if keys[pygame.K_SPACE]:
    print("JUMP")

2.event loop

if event.type == pygame.KEYDOWN:
    if event.key == pygame.K_SPACE:
        print("JUMP")

pygame.keys 适合与类相关的控制,
事件循环适合更一般的事情,例如关闭游戏。

2. 跳跃和掉落(重力)

设置和现实中类似的重力,跌落时会加速下降,

player_gravity = 0
...
    player_gravity += 1
    player_rect.y += player_gravity

(这里用词有误,实际上重力是不变的,这里的player_gravity实际是玩家在y轴移动的距离。)
跳跃是掉落的相反方向:

if event.type == pygame.KEYDOWN:
    if event.key == pygame.K_SPACE and player_rect.bottom>=300:
        player_gravity -= 20

3. 地板

我们不想人物一直掉落,他应该在掉到地板的时候就停止掉落:

if player_rect.bottom >= 300:
    player_rect.bottom = 300
    player_gravity = 0

Pygame入门 2022 (2)

附上完整代码:文章来源地址https://www.toymoban.com/news/detail-432703.html

import pygame
from sys import  exit

# 初始化 引擎
pygame.init()
# 设置屏幕
screen = pygame.display.set_mode((800,400)) # 宽度800,高度400
pygame.display.set_caption('Runner') # 设置标题
# 时钟
clock = pygame.time.Clock()
# surface
sky_surface = pygame.image.load('graphics/Sky.png').convert()
ground_surface  = pygame.image.load('graphics/ground.png').convert()
test_font = pygame.font.Font('font/Pixeltype.ttf',50)
score_surf = test_font.render("My game", False, 'Black')
score_rect = score_surf.get_rect(center=(400,50))

snail_surface = pygame.image.load('graphics/snail/snail1.png').convert_alpha()
snail_rect = snail_surface.get_rect(midbottom=(600,300))

player_surf = pygame.image.load('graphics/Player/player_walk_1.png').convert_alpha()
player_rect = player_surf.get_rect(midbottom=(80,300))
player_gravity = 0

while True:
    # 获取用户输入
    for event in pygame.event.get():
        # 用户点击退出,关闭游戏
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE and player_rect.bottom>=300:
                player_gravity -= 20
    # 绘图,更新
    screen.blit(sky_surface, (0, 0))  # 将test_surface放到screen上。(0,0):放置后test_surface的左上角位于screen的(0,0)处
    screen.blit(ground_surface,(0,300))

    pygame.draw.rect(screen,'#c0e8ec',score_rect)
    pygame.draw.rect(screen,'#c0e8ec',score_rect,10)

    screen.blit(score_surf, score_rect)

    snail_rect.x -= 4
    if snail_rect.right <= 0: snail_rect.left = 800
    screen.blit(snail_surface,snail_rect)

    player_gravity += 1
    player_rect.y += player_gravity
    if player_rect.bottom >= 300:
        player_rect.bottom = 300
        player_gravity = 0
    screen.blit(player_surf,player_rect)


    pygame.display.update()
    clock.tick(60) # 不超过60 fps

到了这里,关于Pygame入门 2022 (2)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【译】GPT-4 没有弄清楚事情,但它已经知道了

    原作:史蒂夫·纽曼 引子:它是一只随机鹦鹉,但大多数时候你也是如此,而且它记住的东西比你多得多        关于ChatGPT已经有无数的笔墨了。然而,大部分关注点要么是非常短期和战术性的(“从 ChatGPT 获得出色营销文案的八个魔法提示”),要么是非常长期和理论性的

    2024年01月21日
    浏览(74)
  • 摊牌了,我已经不知道摆烂了多少天了!

    是的,你没有看错! 我觉得用这个词来形容,我还是很合适的吧,怎么说呢, 可能接下来的行文逻辑,会有写无厘头,甚至说毫无章法可言,或是题不对文? but,这已经不重要了,嘘别说话,感觉来了! 人很难做到心无旁骛,毫无波澜,常会被这样那样的人和事所打乱计划

    2024年01月22日
    浏览(53)
  • python3.8.8 :pygame实现角色动画

    用途:通过不同的序列图片在界面上展示连贯的动画 结果如下:  参考文章:pygame之旅 - 知乎 (zhihu.com) 项目结构目录  角色类 角色生成类: 代码入口 结果如下:  发现出现问题,动画出现残影,看网上说需要先绘制背景,再绘制角色可以解决,随意填个颜色screen.fill(255)

    2024年02月05日
    浏览(58)
  • Pygame 基础教程12: 使用 精灵(Sprite) 实现 帧动画(Animation)

    原文链接:https://xiets.blog.csdn.net/article/details/131395288 版权声明:原创文章禁止转载 专栏目录:Pygame 专栏(总目录) 精灵(Sprite) 表示游戏画面中基本的显示元素,前面所介绍的精灵虽然位置可以动态移动,但都是一张静态图片。游戏中还有许多动态的动画精灵,如一只飞翔的

    2024年01月17日
    浏览(61)
  • el-table 单击某一行,该行的前面的多选框显示已勾选

    目   录         官网:       1.  单页面        2. table是组件 案例: 官网:   1.  单页面 通过单击获取当前行的数据,然后传给选中显示勾选的方法。 2. table是组件 2.1  在table组件中添加方法 2.2  在主页面调用

    2024年02月11日
    浏览(48)
  • 【python进阶】列表排序已经掌握?这种将变量插入列表序列的方法你该知道了

    🙋‍♂️作者简介:生鱼同学,大数据科学与技术专业硕士在读👨‍🎓,曾获得华为杯数学建模国家二等奖🏆,MathorCup 数学建模竞赛国家二等奖🏅,亚太数学建模国家二等奖🏅。 ✍️研究方向:复杂网络科学 🏆兴趣方向:利用python进行数据分析与机器学习,数学建模竞

    2023年04月08日
    浏览(43)
  • 【ConfluxNews】2023.2.15 你知道 Conflux 基金会已经燃烧了近 5 亿 CFX 吗?!

    1.【网络状态】当前版本V2.2.1-fixpos,全网算力≈3.5T,昨日交易次数29K,昨日新增账户0.66K,昨日新增合约2个; 2.【POS参数】总锁仓199M(+1),节点总数247,年利率15.5%(理论计算),总奖励175M; 3.【官方消息】你知道 Conflux 基金会已经燃烧了近 5 亿 CFX 吗?! 我们最新的关于

    2024年02月10日
    浏览(41)
  • 已安装Pygame却显示“没有名称为 ‘pygame‘ 的模块”

    本来用pip已经成功安装Pygame到游戏程序所在文件夹,却无法导入该模块,如下: 打开设置 选择“项目” 选”“Python解释器” 如图选择python.exe,然后确定 发现可以导入Pygame模块了,运行就可以看到一个Pygame窗口                   另外,因为Pygame版本必须和Python版本

    2024年02月11日
    浏览(45)
  • Pygame程序的屏幕显示

    在Pygame中,需要将所有需要在屏幕上显示的内容都绘制在一个display surface上。该Surface通常称为screen surface,它是pygame.display.set_mode()函数返回的Surface对象。 在绘制不同对象时,可以使用不同的绘制方法。下面介绍一些常用的绘制方法: 绘制图像: 使用pygame.image.load()函数加载

    2024年01月20日
    浏览(44)
  • Pygame显示文字

    使用Pygame显示文字的步骤如图1所示。 图1 显示文字的步骤 通过以下代码实现Pygame的初始化。 其中,第1行代码的作用是在程序中导入pygame模块;第2行代码的作用是实现pygame的初始化。 使用如下代码实现屏幕的创建 其中,第1行代码定义了表示屏幕大小的变量screen_size,该变量

    2023年04月08日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包