pygame - 图片移动优化

news2024/11/18 23:03:11

目录

一、优化过程分析

1、pygame - 图片移动中图片移动模式

2、优化过程

二、代码段

1、附注释

2、无注释 

三、效果展示 


一、优化过程分析

1、pygame - 图片移动中图片移动模式

按一次方向键,图片移动一小步;

若需要一直往某个方向移动,则需要反复按方向键

2、优化过程

(1)将move()函数放在while True循环当中,并且处在循环最外层的位置;

(2)设置图片移动开关stop防止程序一运行图片就移动;

(3)将循环获取事件并监听事件状态写成GetEvent()函数;

(4)在GetEvent()函数中根据方向键的状态修改stop和direction;

(5)导入time模块,使用time.sleep()使得循环速度变慢,从而使得图片移动速度变慢;

(6)将stop和direction设定为全局变量,并注意global的使用;

(7)因没有使用global出现bug,特写文记录——变量作用域和关键字global

二、代码段

1、附注释

import sys
import time
import pygame

pygame.init()
# 使用pygame之前必须初始化

LENGTH = 1000  # 主屏窗口长度
WIDTH = 680  # 主屏窗口宽度
screen = pygame.display.set_mode((LENGTH, WIDTH))  # 设置主屏窗口
# 说明:set_mode()可以短时间显示主屏窗口
pygame.display.set_caption("图片移动优化测试")  # 设置窗口标题
# 说明:若不设置窗口标题,则窗口标题默认为“pygame window”

img = pygame.image.load("t02_img.png")  # 加载本地图片
rect = img.get_rect()  # 获取图片区域
rect.x = 500  # 设置显示位置
rect.y = 340  # 设置显示位置
stop = True        # 图片移动开关
direction = 'U'    # 图片移动方向

def move():  # 图片移动函数
    # 说明:图片移动实质是改变rect.top或rect.left,并确保图片不会移出主屏窗口
    speed = 5  # 移动速度
    if rect.top - speed >= 0 and direction == 'U':  # 上
        rect.top -= speed
    elif rect.top + rect.height + speed <= WIDTH and direction == 'D':  # 下
        rect.top += speed
    elif rect.left - speed >= 0 and direction == 'L':  # 左
        rect.left -= speed
    elif rect.left + rect.width + speed <= LENGTH and direction == 'R':  # 右
        rect.left += speed

def GetEvent():  # 获取事件函数
    global stop
    global direction
    # 注意global的使用

    for event in pygame.event.get():  # 循环获取事件并监听事件状态

        if event.type == pygame.KEYDOWN:  # 按下了按键
            if event.key == pygame.K_UP:  # 上
                stop = False
                direction = 'U'
            elif event.key == pygame.K_DOWN:  # 下
                stop = False
                direction = 'D'
            elif event.key == pygame.K_LEFT:  # 左
                stop = False
                direction = 'L'
            elif event.key == pygame.K_RIGHT:  # 右
                stop = False
                direction = 'R'
        elif event.type == pygame.KEYUP:  # 松开了按键
            if event.key == pygame.K_UP or event.key == pygame.K_DOWN or event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                stop = True

        elif event.type == pygame.QUIT:  # 点击了关闭按钮
            pygame.quit()  # 卸载模块
            sys.exit()  # 退出程序

while True:
    # 说明:while True循环可以使得主屏窗口得以保留
    time.sleep(0.02)  # 使得循环速度变慢,从而使得图片移动速度变慢
    screen.fill((0, 0, 0))    # 填充
    GetEvent()      # 获取事件
    if not stop: 
        move()      # 图片移动
    screen.blit(img, rect)    # 传送
    pygame.display.update()   # 更新

2、无注释 

import sys
import time
import pygame

pygame.init()

LENGTH = 1000  
WIDTH = 680  
screen = pygame.display.set_mode((LENGTH, WIDTH))
pygame.display.set_caption("图片移动优化测试")

img = pygame.image.load("t02_img.png")  
rect = img.get_rect()  
rect.x = 500  
rect.y = 340  
stop = True        
direction = 'U'    

def move():
    speed = 5  
    if rect.top - speed >= 0 and direction == 'U':  
        rect.top -= speed
    elif rect.top + rect.height + speed <= WIDTH and direction == 'D':  
        rect.top += speed
    elif rect.left - speed >= 0 and direction == 'L':  
        rect.left -= speed
    elif rect.left + rect.width + speed <= LENGTH and direction == 'R':  
        rect.left += speed

def GetEvent():  
    global stop
    global direction

    for event in pygame.event.get():  

        if event.type == pygame.KEYDOWN:  
            if event.key == pygame.K_UP:  
                stop = False
                direction = 'U'
            elif event.key == pygame.K_DOWN:  
                stop = False
                direction = 'D'
            elif event.key == pygame.K_LEFT:  
                stop = False
                direction = 'L'
            elif event.key == pygame.K_RIGHT:  
                stop = False
                direction = 'R'
        elif event.type == pygame.KEYUP:  
            if event.key == pygame.K_UP or event.key == pygame.K_DOWN or event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                stop = True

        elif event.type == pygame.QUIT:  
            pygame.quit()  
            sys.exit()  

while True:
    time.sleep(0.02)  
    screen.fill((0, 0, 0))    
    GetEvent()      
    if not stop:
        move()      
    screen.blit(img, rect)    
    pygame.display.update()   

三、效果展示 

pygame图片移动优化测试 20230107

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LaTex】LaTex 极简安装教程

文章目录Latex 安装教程1. 下载texlive.iso2. 点击装载3. 运行 install-tl-windows.bat 进行安装4. 验证是否安装成功5. 安装开发工具Latex 安装教程 1. 下载texlive.iso https://mirrors.tuna.tsinghua.edu.cn/ctan/systems/texlive/Images/ 2. 点击装载 下载完成后&#x…

【博客580】内核如何决定数据包的源ip

内核如何决定数据包的源ip 1、Traversing of packets Receive&#xff1a; 某个interface收到数据包 -> PREROUTING (manage, nat) -> routing -> 是发送给本机的数据包? -> INPUT (manage, filter) -> app 不是 -> FORWARD (manage, filter) -> POST…

《Dubbo源码剖析与实战》学习笔记 Day1

流量控制 为了系统的健壮性和稳定性考虑&#xff0c;通常要对访问进行有效的控制&#xff0c;防止流量突然暴增&#xff0c;引发一系列服务雪崩效应。 1.单机限流 大概逻辑就是把每个请求当作一个小朋友&#xff0c;把最细粒度Dubbo服务中的方法当作游乐场&#xff0c;每个方…

Go第 12 章 :1-家庭收支记账软件项目

Go第 12 章 &#xff1a;1-家庭收支记账软件项目 12.1 项目开发流程说明 12.2 项目需求说明 模拟实现基于文本界面的《家庭记账软件》该软件能够记录家庭的收入、支出&#xff0c;并能够打印收支明细表 12.3 项目的界面 12.4 项目代码实现 12.4.1 实现基本功能(先使用面向过…

Windows 10/11 中的快速录屏的 5 种方法

在当今世界&#xff0c;出于各种原因&#xff0c;人们更喜欢录制他们的 PC 屏幕。录制计算机屏幕的功能对于在线学习、录制在线会议的特定亮点或帮助您制作抖音视频至关重要。不管是什么原因&#xff0c;屏幕录制让许多人的生活更轻松。截屏是有效的&#xff0c;但录制有助于您…

聚簇索引,二级索引,MRR,联合索引和自适应哈希索引-详细总结

目录 聚簇索引&#xff0c;二级索引&#xff0c;MRR&#xff0c;联合索引和自适应哈希索引-详细总结 聚簇索引 定义&#xff1a; 问题&#xff1a;为什么不采用B树作为MySQL表数据底层的存储数据结构&#xff1f; 作图&#xff1a; 问题&#xff1a;如果数据库表没有设置…

base64和base64url编解码

文章目录[toc]前言1. Base64编码原理2. 加解密图示3. base64编码Code3. base64url编码Code前言 一个字节可以表示256种数值&#xff0c;但是由于一些字节在网络中有特殊的含义。所以当传输字节内容时就不能传输这些具有控制功能的字符。具体的做法就是将这些字符进行转码。   …

A. Sasha and a Bit of Relax(异或的性质 + 前缀和的性质)

Problem - 1109A - Codeforces Sasha喜欢编程。有一次&#xff0c;在一场很长时间的比赛中&#xff0c;萨沙觉得他有点累了&#xff0c;需要放松一下。他照做了。但由于萨沙不是一个普通人&#xff0c;他更喜欢不同寻常地放松。在闲暇时间&#xff0c;萨沙喜欢解决未解决的问题…

JAVA本科毕业设计家庭财务管理系统源码+数据库,基于springboot + mybatis + mysql5.7

家庭财务管理系统 下载地址&#xff1a;JAVA本科毕业设计家庭财务管理系统源码数据库 介绍 1.cwgl 财务管理系统 提供sql 后面系统在另一个版本修改 此版本功能简单 可能有很多没有完善的地方 仅供参考 2.ffms&#xff08;Family Financial Management System&#xff09; …

linux 编译 c++ 静态库(包含类的实例化)给 c 程序调用

文章目录使用场景代码示例编译运行示例程序参考文章使用场景 c 是面向对象的编程语言&#xff0c;比较方便实现某些第三方库&#xff0c;比如翻译其他面向对象语言的代码&#xff0c;比 c 语言要方便的多。而 c 语言跟 c 很亲和&#xff0c;可以用 c 来实现&#xff0c;编译成…

SAP灵活工作流客制化值帮助

目录 1. 创建值帮助CDS视图 2. 添加值帮助CDS视图对应的ODATA服务 3. 在灵活工作流中设置搜索帮助 4. 效果展示 1. 创建值帮助CDS视图 创建值帮助数据源视图 创建值帮助视图 Dummy表结构如下 2. 注册值帮助CDS视图对应的ODATA服务 事务代码 /N/IWFND/MAINT_SERVICE 选择添加…

【mysql】-【innodb数据存储结构】

文章目录数据库的存储结构&#xff1a;页磁盘与内存交互基本单位&#xff1a;页页结构概述页的大小页的上层结构页的内部结构数据库的存储结构&#xff1a;页 一、索引结构给我们提供了高效的索索隐方式&#xff0c;不过索引信息以及数据记录都是保存在文件上的&#xff0c;确…

MongoDB数据库 | 三分钟学会MongoDB索引,快来看看与MySQL索引有何不同?

目录一、创建索引1、创建索引2、通过索引查询二、复合索引三、索引内嵌文档四、索引基数五、explain六、为何不使用索引七、固定集合一、创建索引 1、创建索引 > db.student.createIndex({"name":1}) {"numIndexesBefore" : 1,"numIndexesAfter&…

【unity3D】Audio Source组件

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是unity的Audio Source组件 Audio Source组件常用的属性解释&#xff1a; AudioClip&#xff1a;在这里指定需要播放的音频片段。Output …

Java面试题每日10问(3)

Core Java - OOPs Concepts: static keyword Interview Questions 1.What if the static modifier is removed from the signature of the main method? Program compiles. However, at runtime, It throws an error “NoSuchMethodError.” 2. What is the difference betw…

2023年会发生什么,一点都不会神秘

文/明道云创始人任向晖我很少写市场预测文章&#xff0c;是因为影响经济活动的要素实在太多了。做任何预测的时候&#xff0c;想明白了一二&#xff0c;但没有预计到三&#xff0c;结果可能就完全不一样。过去三年的疫情就是一个典型的例子。但是这个冬天的预测显得格外重要一些…

Redis+注解实现API接口防刷限流

前言 在开发分布式高并发系统时有三把利器来保护系统&#xff1a;缓存、降级、限流。 缓存: 缓存的目的是提升系统访问速度和增大系统处理容量&#xff1b;降级&#xff1a;降级是当服务出现问题或者影响到核心流程时&#xff0c;需要暂时屏蔽掉&#xff0c;待高峰或者问题解…

软件测试之维护性测试

维护性测试用于评估系统能够被预期的维护人员修改的有效性和效率的程度&#xff0c;可从模块化、可重用性、易分析性、易修改性、易测试性、易维护性 1)模块化&#xff1a;评估由独立组件组成的系统或计算机程序&#xff0c;其中一个组件的变更对其他组件的影响大小程度&#x…

【Android 车载 App】实现座椅调节控制十字指针的效果

【Android 车载 App】实现座椅调节控制十字指针的效果效果展示实现方法思路代码第一步&#xff0c;画两条十字虚线第二步&#xff0c;在每个虚线的末端画出圆角三角形第三步&#xff0c;在十字虚线的中间位置画出两个同心圆&#xff0c;一个填充内容&#xff0c;一个描边第四步…

一款新兴的操作pcap的神器

一 前言有机会接触到这款软件&#xff0c;还是同事的一个图&#xff0c;图介绍了开源项目Zed和基于Zed做的一款全流量安全产品Brim。整个产品其实是不少开源项目的一个小集成&#xff0c;只所以感兴趣&#xff0c;除了brim在github有1.5k个star的原因外&#xff0c;更吸引我的是…