pygame入门学习(四)位图的使用

大家好!我是码银🥰

欢迎关注🥰:

CSDN:码银

公众号:码银学编程

载入图片

pygame.image.load( ),Pygame 可以通过pygame.image.load( )函数处理位图文件。

大致可以支持以下文件:JPG、PNG、GIF、BMP、PCX、TGA、TIF、LBM、PBM、PGM、PPM、XPM。

1、加载背景图片主要有两行代码:

asurf = pygame.image.load('test.jpg').convert()
screen.blit(asurf, (0, 0))#加载背景图片

下面来看一下这段代码在整体代码中的位置:

import pygame
from pygame.locals import*
import sys


pygame.init()

screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("图片")
asurf = pygame.image.load('test.jpg').convert()
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()
    screen.blit(asurf, (0, 0))
    pygame.display.update()

2、背景图片上显示另一幅图片

import pygame
from pygame.locals import*
import sys


pygame.init()

screen = pygame.display.set_mode((751,521))
pygame.display.set_caption("图片")
asurf = pygame.image.load('test.png').convert()
moon = pygame.image.load('moon.png').convert()
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()
    screen.blit(asurf, (0, 0))
    screen.blit(moon, (100,200))
    pygame.display.update()

可以看到背景图是一张“星星”的图片,左下角贴了一张月球的图片。

screen.blit(asurf, (0, 0))
screen.blit(moon, (100,200))

这段代码按照这个顺序,那么月球就会在背景图的上方显示,代码的先后顺序代表着图片的覆盖关系。

下面部分,本想控制月球移动的,但是图片太大,于是随找了一个小的图片进行测试。

控制图片移动

先看代码

import pygame
import sys

# 初始化Pygame
pygame.init()

# 设置窗口大小和标题
window_width = 800
window_height = 600
window_title = "图片移动示例"
screen = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption(window_title)

# 加载图片
image_path = "brick.png"
image = pygame.image.load(image_path)
image_rect = image.get_rect()

# 设置初始位置
image_rect.x = 0
image_rect.y = 0

# 游戏循环
while True:
    # 处理事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

            # 移动图片
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and image_rect.x > 0:
        image_rect.x -= 1
    if keys[pygame.K_RIGHT] and image_rect.x < window_width - image_rect.width:
        image_rect.x += 1
    if keys[pygame.K_UP] and image_rect.y > 0:
        image_rect.y -= 1
    if keys[pygame.K_DOWN] and image_rect.y < window_height - image_rect.height:
        image_rect.y += 1

        # 绘制图片和窗口边界
    screen.fill((0, 0, 0))  # 填充背景色为黑色
    screen.blit(image, image_rect)  # 在指定位置绘制图片
    pygame.display.update()  # 更新显示内容

如何去控制图片移动,这部分代码是与上一篇文章(pygame学习(三)——支持多种类型的事件-CSDN博客)相结合起来 的,将图片与键盘事件相结合,以此来控制图片的移动。

pygame键盘控制图片移动

image.get_rect()方法

 是 Pygame 中的一个方法,用于获取图像的矩形区域。这个矩形区域表示图像在屏幕上的位置和大小。

当你加载一个图像到 Pygame 中时,你可以使用 get_rect() 方法来获取该图像的矩形对象。这个矩形对象具有 x 和 y 属性,分别表示矩形左上角的坐标,以及 width 和 height 属性,分别表示矩形的宽度和高度。

例如上面代码中设置图片的初始位置:

# 设置初始位置
image_rect.x = 0
image_rect.y = 0

图片移动

        # 移动图片
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and image_rect.x > 0:
    image_rect.x -= 1
if keys[pygame.K_RIGHT] and image_rect.x < window_width - image_rect.width:
    image_rect.x += 1
if keys[pygame.K_UP] and image_rect.y > 0:
    image_rect.y -= 1
if keys[pygame.K_DOWN] and image_rect.y < window_height - image_rect.height:
    image_rect.y += 1

这段代码是使用Pygame库来控制图片在屏幕上的移动。具体来说,它通过检测用户的键盘输入来移动一个图片对象。以下是这段代码的总结:

  • 获取按键状态: 使用pygame.key.get_pressed()函数来获取当前所有按键的状态。

  • 图片移动逻辑:

    • 如果用户按下左键,并且图片的x坐标大于0,则将图片的x坐标减少1,使图片向左移动。
    • 如果用户按下右键,并且图片的x坐标小于屏幕宽度减去图片宽度,则将图片的x坐标增加1,使图片向右移动。
    • 如果用户按下上键,并且图片的y坐标大于0,则将图片的y坐标减少1,使图片向上移动。
    • 如果用户按下下键,并且图片的y坐标小于屏幕高度减去图片高度,则将图片的y坐标增加1,使图片向下移动。

既然都看到这里啦,点点赞吧😁,欢迎关注:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/390229.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI - 碰撞避免算法分析(ORCA)

对比VO/RVO ORCA算法检测碰撞的原理和VO/RVO基本一样的&#xff0c;只是碰撞区域的计算去掉了一定时间以外才可能发生的碰撞&#xff0c;因此碰撞区域的扇形去掉了前面的部分&#xff0c;由圆锥头变成了个圆 另一个最主要的区别是&#xff0c;求新的速度&#xff0c;是根据相…

基于SSM的图书馆预约占座系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的图书馆预约占座系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring…

第7讲 SpringSecurity执行原理概述

SpringSecurity执行原理概述 spring security的简单原理&#xff1a; SpringSecurity有很多很多的拦截器&#xff0c;在执行流程里面主要有两个核心的拦截器 1&#xff0c;登陆验证拦截器AuthenticationProcessingFilter 2&#xff0c;资源管理拦截器AbstractSecurityInterc…

掌握这些机器学习算法优缺点,面试轻松应对

掌握这些机器学习算法优缺点&#xff0c;面试轻松应对 面试官问到机器学习算法&#xff0c;你是否能够信手拈来?今天就为大家分享几个关键算法的优缺点&#xff0c;从KNN到Adaboosting&#xff0c;每个算法都有其独特之处。 比如&#xff0c;KNN简单直观&#xff0c;适合解决分…

交大论文下载器

原作者地址&#xff1a; https://github.com/olixu/SJTU_Thesis_Crawler 问题&#xff1a; http://thesis.lib.sjtu.edu.cn/的学位论文下载系统&#xff0c;该版权保护系统用起来很不方便&#xff0c;加载起来非常慢&#xff0c;所以该下载器实现将网页上的每一页的图片合并…

[ai笔记7] google浏览器ai学习提效定制优化+常用插件推荐

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第7篇分享&#xff01; 工欲善其事必先利其器&#xff0c;为了ai学习的效能提升&#xff0c;放假期间对google浏览器做了一次系统整改&#xff0c;添加了一些配置和插件&#xff0c;这里既有一些显示、主…

离散数学截图2

为什么G中阶大于2的元素&#xff0c;一定有偶数个 在有限群G中&#xff0c;阶大于2的元素个数一定是偶数的原因如下&#xff1a; 设 aaa 是群G中一个阶大于2的元素&#xff0c;那么根据群的定义和阶的概念&#xff08;即某个元素的幂次使得其等于单位元的最小正整数&#xff…

防御保护--内容安全过滤

目录 文件过滤 内容过滤技术 邮件过滤技术 应用行为控制技术 DNS过滤 URL过滤 防火墙 ---- 四层会话追踪技术 入侵防御 ---- 应用层深度检测技术 深度包检测深度流检测 随着以上俩种的成熟与完善&#xff0c;提出了所谓的内容安全过滤 当然上网行为确实需要治理&…

【html学习笔记】2.基本元素

1.标题 标题会自动粗体其中大写的内容&#xff0c;并带有换行的效果会使用<h1>到<h6>表示不同大小的标题 <h1>标题1</h1> <h2>标题2</h2> <h3>标题3</h3> <h4>标题4</h4> <h5>标题5</h5> <h6>…

NumPyML 源码解析(七)

numpy-ml\numpy_ml\trees\gbdt.py # 导入 numpy 库并重命名为 np import numpy as np# 从当前目录下的 dt 模块中导入 DecisionTree 类 # 从当前目录下的 losses 模块中导入 MSELoss 和 CrossEntropyLoss 类 from .dt import DecisionTree from .losses import MSELoss, Cross…

java8新特性——StreamAPI

说明&#xff1a; java8中有两大最为重要的改变。第一个是Lambda表达式&#xff1b;另外一个则是Stream API。 Stream API&#xff08;java.util.stream&#xff09;把真正的函数式编程风格引入java。这是目前为止对java类库最好的补充&#xff0c;因为Stream API可以极大提供j…

基于微信小程序的在线课堂的研究与实现,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Codeforces Round 926 (Div. 2) B. Sasha and the Drawing (Java)

Codeforces Round 926 (Div. 2) B. Sasha and the Drawing (Java) 比赛链接&#xff1a;Codeforces Round 926 (Div. 2) B题传送门&#xff1a;B. Sasha and the Drawing 题目&#xff1a;B. Sasha and the Drawing Example input 3 4 3 3 3 10 3 9 4 7 7 11 2 3output 2 …

VMware Workstation 17.0 虚拟机安装MS-DOS 7.1完整详细步骤图文教程

VMware Workstation 17.0 虚拟机安装MS-DOS 7.1完整详细步骤图文教程 一、配置MS-DOS虚拟机机器环境二、安装MS-DOS磁盘操作系统 一、配置MS-DOS虚拟机机器环境 1.打开VMware Workstation Pro 2.新建虚拟机 3.建议选择【典型】&#xff0c;之后点击【下一步】 关于【自定义…

前端秘法基础式(CSS)(第一卷)

一.认识CSS CSS 指的是层叠样式表&#xff08;Cascading Style Sheets&#xff09;&#xff0c;它是一种用于描述网页外观和布局的语法 CSS 可以定义网页中元素的字体、颜色、大小、位置、背景等样式&#xff0c;使网页具有美观的外观和统 一的风格。 通过将 CSS 样式表与 HTML…

Qt Creator 继承分文件编写代码流程实现简单案列

Qt Creator 继承分文件流程实现简单案列 打开Qt Creator&#xff0c;新建c项目 添加类 完成之后&#xff0c;会自动生成.h和.cpp文件 一、animal.h文件 主要用来写类&#xff0c;包括成员变量和函数 #ifndef ANIMAL_H #define ANIMAL_H #include <iostream> #inclu…

C#上位机与三菱PLC的通信04--MC协议之A-1E报文测试

到目前为止&#xff0c;还没有网上有哪个文章有我如此的报文分析&#xff0c;操作实例&#xff0c;一大批都是抄来抄去&#xff0c;没有截图&#xff0c;没有说明&#xff0c;没有实例&#xff0c;有卵用呀&#xff0c;仅以此文章献给最爱的粉丝&#xff0c;希望对各位大师有些…

vue3 之 商城项目—结算模块

路由配置 chekout/index.vue <script setup> const checkInfo {} // 订单对象 const curAddress {} // 地址对象 </script> <template><div class"xtx-pay-checkout-page"><div class"container"><div class"w…

lenovo联想小新 Pro14 2022 Intel版IAH5R,AMD版ARH5R(82UT),(82UU)原装出厂Win11系统带恢复重置功能

联想小新Pro14笔记本电脑恢复原厂OEM预装Windows11系统镜像包&#xff0c;开箱状态时一模一样 Intel版(82UT)链接&#xff1a;https://pan.baidu.com/s/1jexQXkC6TerUnDQffwLooA?pwdcc09 提取码&#xff1a;cc09 AMD锐龙版(82UU)链接&#xff1a;https://pan.baidu.com/s/…

【FPGA开发】HDMI通信协议解析及FPGA实现

本篇文章包含的内容 一、HDMI简介1.1 HDMI引脚解析1.2 HDMI工作原理1.3 DVI编码1.4 TMDS编码 二、并串转换、单端差分转换原语2.1 原语简介2.2 IO端口组件 笔者在这里使用的开发板是正点原子的达芬奇开发板&#xff0c;FPGA型号为XC7A35TFGG484-2。参考的课程是正点原子的课程手…