Pygame——动画的灵活控制,弹弹球实例

2023-10-11 17:59

本文主要是介绍Pygame——动画的灵活控制,弹弹球实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本节视频

【零基础 Python体验课】第四季 pygame游戏开发


关注我的人就知道我的Github上也有这些代码和文档

Pygame动画的灵活控制

做动画不可能只让一个小球动起来就完了,所以控制好每一个部件是最重要的,在帧动画内部,最好不要出现太多固定的数字,最好使用变量存储代替,这样更灵活控制,直接修改变量的大小不就可以直接修改很多地方吗?但是固定的数字就无法实现。

这次我们来一个使用小球弹来弹去,scratch中模拟。[是这样,我本人也很喜欢Scratch,简单且能模拟很多功能,从几个方块中总结思路很好💪
在这里插入图片描述

下面来说怎么实现Pygame的弹弹球,还是纵向移动,就是以Y轴。

重点:如果制作中出现可能变化的量尽量赋值为变量,不要是固定数字,Y轴可变,存入变量y,这说起来简单,但是做起来难!

让球移动的思路就是让球的Y轴变化,每次擦除上次的圆球,然后Y轴增加再画一次。这是一个球的向下运动,试试看,球运动到末尾就下去了,窗口边界拦不住它。说明Pygame窗口是没有给你设置边界的,需要你自己写判断。绘制圆球的时候有一个值是半径,存到r变量里,那么只需要判断y的值是不是大于WIN_HEIGHT(窗口高度常量)-r(圆半径),就知道是不是到达了底边界,顶部就直接是y==r。那么向下运动的时候是y += 1,那么向上的时候y怎么办,既然每次增长的量会变,那么就把1变成变量y_speed,每次y += y_speed,在到达底部的时候将y_speed = -1,在到达顶部的时候y_speed = 1就行了。于是有了清晰的思路,代码出现!核心部分

while True:# 帧动画编辑位置# if num % 10000 == 0:#     pygame.draw.circle(window, (255, 255, 255), (100, y), 50)#     y = y + 1#     pygame.draw.circle(window, (255, 0, 0), (100, y), 50)#     pygame.display.update()# num += 1if num % 10 == 0:sleep(0.001)pygame.draw.circle(window, (255, 255, 255), (100, y), r)y = y + y_speedif y > 550:y_speed = -1if y < 50:y_speed = 1pygame.draw.circle(window, (255, 0, 0), (100, y), r)pygame.display.update()num += 1for event in pygame.event.get():if event.type == pygame.QUIT:exit()

中间if语句是最关键的,sleep函数需要from time import sleep

那我们让Pygame的行动更智能一点,可以支持输入一个速度,然后让它移动,将一个正数变量转为负数只需要这样-var就够了。还可以加上窗口,使用tkinter制作。

完整代码

import pygame
from   time import sleep
from tkinter import *
from tkinter import messageboxWIN_WIDTH = 400
WIN_HEIGHT = 600
pygame.init()
window = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
pygame.display.set_caption("动画的灵活运用")
titlelineico = pygame.image.load("img/airplane.ico")  # 导入窗口图标,规格:32x32,格式:.ico
pygame.display.set_icon(titlelineico)  # 设置窗口图标
window.fill((255, 255, 255))
pygame.display.flip()y = 100
r = 50
pygame.draw.circle(window, (255, 0, 0), (100, y), r)
pygame.display.update()def get_speed(event):global y_speedif txt.get() == "":messagebox.showwarning("Error", "输入为空,按下确定重试")else:y_speed = int(txt.get())root.destroy()root = Tk()
root.geometry("300x180")
root.title("AskSpeed")
lbf = LabelFrame(root, text='输入Y轴移动速度,回车确定')
lbf.pack()
txt = Entry(lbf, width=30)
txt.bind("<Return>", get_speed)
txt.focus_set()
txt.pack()
root.mainloop()
num= 0
while True:# 帧动画编辑位置# if num % 10000 == 0:#     pygame.draw.circle(window, (255, 255, 255), (100, y), 50)#     y = y + 1#     pygame.draw.circle(window, (255, 0, 0), (100, y), 50)#     pygame.display.update()# num += 1if num % 1000 == 0:sleep(0.001)pygame.draw.circle(window, (255, 255, 255), (100, y), r)y = y + y_speedif y > 550:y_speed = -y_speedif y < 50:y_speed = -y_speedpygame.draw.circle(window, (255, 0, 0), (100, y), r)pygame.display.update()num += 1for event in pygame.event.get():if event.type == pygame.QUIT:exit()

这个弹球游戏结束,我遇到一个问题,一个球在移动的时候,擦除上一次的记录,会把在路线中的其他控件同样擦掉,比如图片,所以必须在移动的同时重新渲染在路径上的部件

在这里插入图片描述
好吧,这是小埋,我就喜欢!


解决方法:

每次刷新图片,window.blit(img, (180, 180)) # 重新渲染

while flag:sleep(0.02)pygame.draw.circle(window, (255, 255, 255), (150, y), r)window.blit(img, (180, 180)) # 重新渲染y += 4r += 1pygame.draw.circle(window, (255, 0, 0), (150, y), r)pygame.display.update()# 4.检测事件for event in pygame.event.get():  # 获取事件# 检测关闭按钮被点击的事件if event.type == pygame.QUIT:exit()  # 结束这一个线程# flag = False

在这里插入图片描述
就OK了,这次到这里,麻烦点赞关注!谢谢

这篇关于Pygame——动画的灵活控制,弹弹球实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/189842

相关文章

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

最好用的WPF加载动画功能

《最好用的WPF加载动画功能》当开发应用程序时,提供良好的用户体验(UX)是至关重要的,加载动画作为一种有效的沟通工具,它不仅能告知用户系统正在工作,还能够通过视觉上的吸引力来增强整体用户体验,本文给... 目录前言需求分析高级用法综合案例总结最后前言当开发应用程序时,提供良好的用户体验(UX)是至关重要

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

Python实现局域网远程控制电脑

《Python实现局域网远程控制电脑》这篇文章主要为大家详细介绍了如何利用Python编写一个工具,可以实现远程控制局域网电脑关机,重启,注销等功能,感兴趣的小伙伴可以参考一下... 目录1.简介2. 运行效果3. 1.0版本相关源码服务端server.py客户端client.py4. 2.0版本相关源码1

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

Qt QWidget实现图片旋转动画

《QtQWidget实现图片旋转动画》这篇文章主要为大家详细介绍了如何使用了Qt和QWidget实现图片旋转动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、效果展示二、源码分享本例程通过QGraphicsView实现svg格式图片旋转。.hpjavascript