pygame3 图像

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

屏幕上画矩形,圆,或是画点,画曲线只是制作图形的一种方式。有时候我们还想用从别处得来的图片显示在我们的程序中。

1、获取图片  

my_ball = pygame.image.load("beach_ball.png")
screen.blit(my_ball, [50, 50])

第一行代码表示将图片文件加载到内存中,以变量my_ball的形式以备调用

第二行代码表示将图片放在窗口[50, 50]的位置

当然,如果想看到效果,和前面的一样,窗口中的图像需要通过

pygame.display.flip()函数将之从缓存打印到实际的显示器上,我们才能看到。

完整代码如下:文章来源地址https://www.toymoban.com/news/detail-405446.html

import pygame, sys
pygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
my_ball = pygame.image.load("beach_ball.png")
screen.blit(my_ball, [50, 50])
pygame.display.flip()
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

效果图:

pygame3 图像

2 让图片动起来 

想移动球,就要改变图片的位置,即改变screen.blit的坐标值,代码如下:

import pygame, sys
pygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
my_ball = pygame.image.load("beach_ball.png")
screen.blit(my_ball, [50, 50])
pygame.display.flip()
pygame.time.delay(2000)     # 等待2秒
screen.blit(my_ball, [150, 50]) # 向右移动100像素
pygame.display.flip()
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

效果图:

pygame3 图像

我们发现,球确实移动了,但左边的球还在,说明移动球需要把原来的球擦除掉。

3、动画

利用计算机做动画时,需要做到两步:

1. 在新的位置上画出图形

2. 把原来的图形擦掉

关于擦掉的讨论:

黑板上的擦掉是用黑板擦,如果是画的水彩画呢,比如蓝天上画的小鸟不想要了,想将之擦掉,只能重新画上蓝天将小鸟覆盖。计算机中的擦掉类似于水彩画的擦掉,是不能像黑板上那样擦的,只能画上物体之前的背景将想擦除的物体覆盖

我们要擦除的对象是一个球,像素为90*90的大小,可以考虑用一个rect画出白色的方框,将球覆盖,关键代码:

pygame.draw(screen, [255, 255, 255], [50, 50, 90, 90], 0)

此代码在原先小球的位置画上一个白色方框,将原先的小球完全覆盖

完整代码:

import pygame, sys
pygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
my_ball = pygame.image.load("beach_ball.png")
screen.blit(my_ball, [50, 50])
pygame.display.flip()
pygame.time.delay(2000)
screen.blit(my_ball, [150, 50])
pygame.draw.rect(screen, [255, 255, 255], [50, 50, 90, 90], 0)  # 将原先的小球用白色的方框覆盖
pygame.display.flip()
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
            

 讨论,如果背景是红色的呢,我们怎么擦除?

如果是混合着其它颜色呢?

4、让球一直动

前面球动的时候我们调用blit(my_ball, [150, 50]), 球的坐标是写死的,想让球一直动,一般我们将坐标写成变量[x, y], 然后通过修改变量的值,使得球不断动起来

关键代码:

x = 50
y = 50
for looper in range(1, 100):
    pygame.time.delay(20)
    pygame.draw.rect(screen, [255, 255, 255], [x, y, 90, 90], 0)
    x = x + 5
    screen.blit(my_ball, [x, y])
    pygame.display.flip()

通过for循环,不断增加x坐标值,使得球不断向右移动

思考一个问题,怎样改变球的速度?

如果把循环100次增大到200次,会发生什么?

5、让球反弹

考虑一下,什么样的情况,球是碰到了右边框呢?screen.get_width()表示右边框

x + 90 > screen.get_width()即表示达到了右边框

在让球反弹时,我们想关闭程序可以吗?

如果想要随时关闭程序,应该把动画放在While循环中

关键代码:

x = 50
y = 50
x_speed = 10
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    pygame.time.delay(20)
    pygame.draw.rect(screen, [255, 255, 255], [x, y, 90, 90], 0)
    x = x + x_speed
    if x + 90 > screen.get_width() or x < 0:
        x_speed = -x_speed
    screen.blit(my_ball, [x, y])
    pygame.display.flip()

程序中 x + 90 > screen.get_width()是右边框的判断, x < 0是左边框的判断

当 x_speed = 10时,球是从右向上移动,移动到右边框,即判断x+90 > screen.get_width()时, 

x_speed = -x_speed即表示x_speed=-10了,每次x = x + x_speed即表示x = x - 10,即表示每次x坐标减少10,球向左移动,直到x<0时,判断球该反弹了, x_speed又为正10,如此循环往复。

在此过程中,由于都是在while循环中,每移动一下都会检查有没有执行exit,有的话程序退出

6、让球在整个画面中反弹

这个简单,加上对y坐标的变化y_speed即可,完整代码如下:

import pygame, sys

pygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
my_ball = pygame.image.load("beach_ball.png")
x = 50
y = 50
x_speed = 10
y_speed = 10
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

    pygame.time.delay(20)
    pygame.draw.rect(screen, [255, 255, 255], [x, y, 90, 90], 0)
    x = x + x_speed
    y = y + y_speed
    if x + 90 > screen.get_width() or x < 0:
        x_speed = -x_speed
    if y + 90 > screen.get_height() or y < 0:
        y_speed = -y_speed
    screen.blit(my_ball, [x, y])
    pygame.display.flip()

7、让球翻转,进到屏幕中,从另一边出来

以横向运动为例,当完全进入屏幕右边,相当于x>screen.get_width(),此时只需将x坐标重置为0即可,更精确重置为0-90

完整代码如下:

import pygame, sys
pygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
my_ball = pygame.image.load("beach_ball.png")
x = 50
y = 50
x_speed = 5
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

    pygame.time.delay(20)
    pygame.draw.rect(screen, [255, 255, 255], [x, y, 90, 90], 0)
    x = x + x_speed
    if x > screen.get_width():
        x = 0 - 90
    screen.blit(my_ball, [x, y])
    pygame.display.flip()

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

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

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

相关文章

  • pygame学习(二)——绘制线条、圆、矩形等图案

    大家好!我是 码银 ,代码的 码 ,银子的 银 🥰 欢迎关注🥰: CSDN:码银 公众号:码银学编程 pygame是一个跨平台Python库(pygame news),专门用来开发游戏。pygame主要为开发、设计2D电子游戏而生,提供图像模块(image)、声音模块(mixer)、输入/输出(鼠标、键盘、显示屏)模

    2024年02月03日
    浏览(34)
  • 绘制一个可以移动的矩形,当矩形碰到屏幕边界时,矩形都将会改变颜色

    参考资料:pygame学习(二)——绘制线条、圆、矩形等图案-CSDN博客

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

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

    2024年01月20日
    浏览(44)
  • 【Pygame手册02/20】pygame模块display控制窗口和屏幕

       本篇我们介绍pygame的display接口;该接口针对显性窗口的方方面面,在该文中,基本参考了官方手册,保证内容的覆盖,并且,作为代码支援,作者因此做了一些测试代码,和图片动画项目供相关人员参考。    display是pygame下的接口之一,所谓接口,就是本身无什么功

    2024年02月19日
    浏览(46)
  • pygame中将图片填充到适合显示屏幕大小

            在pygame中显示背景图片时有时候会出现背景图片与显示屏幕大小不一的情况,这个程序应该能帮到你。 

    2024年02月06日
    浏览(51)
  • Qt音视频开发43-采集屏幕桌面并推流(支持分辨率/矩形区域/帧率等设置/实时性极高)

    采集电脑屏幕桌面并推流一般是用来做共享桌面、远程协助、投屏之类的应用,最简单入门的做法可能会采用开个定时器或者线程抓图,将整个屏幕截图下来,然后将图片传出去,这种方式很简单但是性能要低不少,一般采用ffmpeg来做桌面推流的居多,毕竟如果不采用代码直

    2024年02月03日
    浏览(49)
  • 图像练习-矩形4点OpenCV(01)

    提取出里面最大矩形的四个顶点坐标  源图像 结果展示 代码

    2024年02月07日
    浏览(37)
  • OpenCV图像识别:使用矩形框框选目标

    OpenCV图像识别:使用矩形框框选目标 OpenCV是一款广泛应用于计算机视觉领域的开源计算机视觉库。在图像识别任务中,矩形框是一种常见的工具,可以用来框选出感兴趣区域。本文将介绍如何使用OpenCV选择矩形框。 首先,需要导入OpenCV库和Numpy库,以及读取图像: 然后,可

    2024年02月11日
    浏览(37)
  • OpenCv (C++) 使用矩形 Rect 覆盖图像中某个区域

    推荐参考博客:OpenCV实现将任意形状ROI区域置黑(多边形区域置黑) 比较常用的是使用 Rect 矩形实现该功能,代码如下: 效果如下: 推荐参考博客:OpenCV 中 cv::Rect 矩形类用法 cv::Rect 用于创建矩形,API 参数如下: 源码如下:

    2024年02月16日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包