《Python编程从入门到实践》day21
# 昨日知识点回顾
设置背景颜色
在屏幕中央绘制飞船
# 今日知识点学习
12.5 重构:方法_check_events()和_update_screen()
12.5.1 方法_check_events()
import sys
import pygame
from Settings import Settings
from Ship import Shipclass AlienInvasion:"""管理游戏资源和行为的类"""def __init__(self):"""初始化游戏并创建游戏资源"""pygame.init()self.settings = Settings()self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))pygame.display.set_caption("Alien Invasion")self.ship = Ship(self)def run_game(self):"""开始游戏的主循环"""while True:self._check_events()# 每次循环是都重绘屏幕self.screen.fill(self.settings.bg_color)self.ship.blitme()def _check_events(self):"""响应按键和鼠标事件"""for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()# screen.fill(bg_color)# screen = pygame.display.set_mode([1200, 800])# 让最近绘制的屏幕可见pygame.display.flip()if __name__ == '__main__':# 创建游戏实例并运行游戏ai = AlienInvasion()ai.run_game()
12.5.2 方法_update_screen()
import sys
import pygame
from Settings import Settings
from Ship import Shipclass AlienInvasion:"""管理游戏资源和行为的类"""def __init__(self):"""初始化游戏并创建游戏资源"""pygame.init()self.settings = Settings()self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))pygame.display.set_caption("Alien Invasion")self.ship = Ship(self)def run_game(self):"""开始游戏的主循环"""while True:self._check_events()self._update_screen()def _check_events(self):"""响应按键和鼠标事件"""for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()# screen.fill(bg_color)# screen = pygame.display.set_mode([1200, 800])def _update_screen(self):"""更新屏幕上的图像,并切换到新屏幕。"""self.screen.fill(self.settings.bg_color)self.ship.blitme()# 让最近绘制的屏幕可见pygame.display.flip()if __name__ == '__main__':# 创建游戏实例并运行游戏ai = AlienInvasion()ai.run_game()
12.6 驾驶飞船
12.6.1 响应按键
import sys
import pygame
from Settings import Settings
from Ship import Shipclass AlienInvasion:"""管理游戏资源和行为的类"""def __init__(self):"""初始化游戏并创建游戏资源"""pygame.init()self.settings = Settings()self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))pygame.display.set_caption("Alien Invasion")self.ship = Ship(self)def run_game(self):"""开始游戏的主循环"""while True:self._check_events()self._update_screen()def _check_events(self):"""响应按键和鼠标事件"""for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:if event.key == pygame.K_RIGHT:# 向右移动飞船self.ship.rect.x += 1def _update_screen(self):"""更新屏幕上的图像,并切换到新屏幕。"""self.screen.fill(self.settings.bg_color)self.ship.blitme()# 让最近绘制的屏幕可见pygame.display.flip()if __name__ == '__main__':# 创建游戏实例并运行游戏ai = AlienInvasion()ai.run_game()
12.6.2 允许持续移动
#Ship.py
import pygameclass Ship:"""管理飞船的类"""def __init__(self, ai_game):"""初始化飞船并设置其初始位置"""self.screen = ai_game.screenself.screen_rect = ai_game.screen.get_rect()# 加载飞船图像并获取其外接矩形self.image = pygame.image.load('images/ship1.bmp')self.rect = self.image.get_rect()# 将每艘飞船放在屏幕底部中央self.rect.midbottom = self.screen_rect.midbottom# 移动标志self.moving_right = Falsedef update(self):"""根据移动标志调整飞船的位置"""if self.moving_right:self.rect.x += 1def blitme(self):"""在指定位置绘制飞船"""self.screen.blit(self.image, self.rect)# 主程序
import sys
import pygame
from Settings import Settings
from Ship import Shipclass AlienInvasion:"""管理游戏资源和行为的类"""def __init__(self):"""初始化游戏并创建游戏资源"""pygame.init()self.settings = Settings()self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))pygame.display.set_caption("Alien Invasion")self.ship = Ship(self)def run_game(self):"""开始游戏的主循环"""while True:self._check_events()self.ship.update()self._update_screen()def _check_events(self):"""响应按键和鼠标事件"""for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:if event.key == pygame.K_RIGHT:self.ship.moving_right = Trueelif event.type == pygame.KEYUP:if event.key == pygame.K_RIGHT:self.ship.moving_right = Falsedef _update_screen(self):"""更新屏幕上的图像,并切换到新屏幕。"""self.screen.fill(self.settings.bg_color)self.ship.blitme()# 让最近绘制的屏幕可见pygame.display.flip()if __name__ == '__main__':# 创建游戏实例并运行游戏ai = AlienInvasion()ai.run_game()
12.6.3 左右移动
# Ship.py
import pygameclass Ship:"""管理飞船的类"""def __init__(self, ai_game):"""初始化飞船并设置其初始位置"""self.screen = ai_game.screenself.screen_rect = ai_game.screen.get_rect()# 加载飞船图像并获取其外接矩形self.image = pygame.image.load('images/ship1.bmp')self.rect = self.image.get_rect()# 将每艘飞船放在屏幕底部中央self.rect.midbottom = self.screen_rect.midbottom# 移动标志self.moving_right = Falseself.moving_left =Falsedef update(self):"""根据移动标志调整飞船的位置"""if self.moving_right:self.rect.x += 1if self.moving_left:self.rect.x -= 1def blitme(self):"""在指定位置绘制飞船"""self.screen.blit(self.image, self.rect)# 主程序
import sys
import pygame
from Settings import Settings
from Ship import Shipclass AlienInvasion:"""管理游戏资源和行为的类"""def __init__(self):"""初始化游戏并创建游戏资源"""pygame.init()self.settings = Settings()self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))pygame.display.set_caption("Alien Invasion")self.ship = Ship(self)def run_game(self):"""开始游戏的主循环"""while True:self._check_events()self.ship.update()self._update_screen()def _check_events(self):"""响应按键和鼠标事件"""for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:if event.key == pygame.K_RIGHT:self.ship.moving_right = Trueelif event.key == pygame.K_LEFT:self.ship.moving_left = Trueelif event.type == pygame.KEYUP:if event.key == pygame.K_RIGHT:self.ship.moving_right = Falsedef _update_screen(self):"""更新屏幕上的图像,并切换到新屏幕。"""self.screen.fill(self.settings.bg_color)self.ship.blitme()# 让最近绘制的屏幕可见pygame.display.flip()if __name__ == '__main__':# 创建游戏实例并运行游戏ai = AlienInvasion()ai.run_game()
12.6.4 调整飞船的速度
# Settings.py
class Settings():"""存储《外星人入侵》的所有设置的类"""def __init__(self):"""初始化游戏的设置"""# 屏幕设置self.screen_width = int(1200)self.screen_height = int(800)self.bg_color = (230, 230, 230)# 飞船设置self.ship_speed = 1.5# Ship.py
import pygameclass Ship:"""管理飞船的类"""def __init__(self, ai_game):"""初始化飞船并设置其初始位置"""self.screen = ai_game.screenself.settings = ai_game.settingsself.screen_rect = ai_game.screen.get_rect()# 加载飞船图像并获取其外接矩形self.image = pygame.image.load('images/ship1.bmp')self.rect = self.image.get_rect()# 将每艘飞船放在屏幕底部中央self.rect.midbottom = self.screen_rect.midbottom# 在飞船的属性x中存储小数值self.x = float(self.rect.x)# 移动标志self.moving_right = Falseself.moving_left = Falsedef update(self):"""根据移动标志调整飞船的位置"""# 更新飞船而不是rect对象的x值if self.moving_right:self.rect.x += self.settings.ship_speedif self.moving_left:self.rect.x -= self.settings.ship_speed# 根据self.x 更新rect对象self.rect.x = self.xdef blitme(self):"""在指定位置绘制飞船"""self.screen.blit(self.image, self.rect)# 主程序
import sys
import pygame
from Settings import Settings
from Ship import Shipclass AlienInvasion:"""管理游戏资源和行为的类"""def __init__(self):"""初始化游戏并创建游戏资源"""pygame.init()self.settings = Settings()# 非全屏运行self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))# 全屏运行# self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)# self.settings.screen_width = self.screen.get_rect().width# self.settings.screen_height = self.screen.get_rect().heightpygame.display.set_caption("Alien Invasion")self.ship = Ship(self)def run_game(self):"""开始游戏的主循环"""while True:self._check_events()self.ship.update()self._update_screen()def _check_events(self):"""响应按键和鼠标事件"""for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:self._check_keydown_events(event)elif event.type == pygame.KEYUP:self._check_keyup_events(event)def _check_keydown_events(self, event):"""响应按键"""if event.key == pygame.K_RIGHT:self.ship.moving_right = Trueelif event.key == pygame.K_LEFT:self.ship.moving_left = Trueelif event.key == pygame.K_q:sys.exit()def _check_keyup_events(self, event):"""响应松开"""if event.key == pygame.K_RIGHT:self.ship.moving_right = Falseelif event.key == pygame.K_LEFT:self.ship.moving_left = Falsedef _update_screen(self):"""更新屏幕上的图像,并切换到新屏幕。"""self.screen.fill(self.settings.bg_color)self.ship.blitme()# 让最近绘制的屏幕可见pygame.display.flip()if __name__ == '__main__':# 创建游戏实例并运行游戏ai = AlienInvasion()ai.run_game()# debug运行显示:
# pydev debugger: CRITICAL WARNING: This version of python seems to be incorrectly compiled (internal generated filenames are not absolute)
# pydev debugger: The debugger may still function, but it will work slower and may miss breakpoints.
# pydev debugger: Related bug: http://bugs.python.org/issue1666807
# -------------------------------------------------------------------------------
# pydev debugger: Unable to find real location for: <frozen codecs>
# pydev debugger: Unable to find real location for: <frozen importlib._bootstrap>
# pydev debugger: Unable to find real location for: <frozen importlib._bootstrap_external>
# pydev debugger: Unable to find real location for: <frozen ntpath>
# pydev debugger: Unable to find real location for: <frozen os>
# pydev debugger: Unable to find real location for: <frozen zipimport>
# pydev debugger: Unable to find real location for: <frozen _collections_abc>
# pygame 2.5.2 (SDL 2.28.3, Python 3.11.5)
# Hello from the pygame community. https://www.pygame.org/contribute.html
# pydev debugger: Unable to find real location for: <frozen posixpath>
# pydev debugger: Unable to find real location for: <frozen genericpath># 编译配置解释器选项设置-Xfrozen_modules=off 治标不治本
运行结果:(与之前飞船能向左或向右移动到屏幕之外不同,飞船纹丝不动)
这里面有问题
debug显示pydev debugger: Unable to find real location for: <frozen codecs>
参考Unable to find real location for: <frozen codecs> - 知乎 (zhihu.com)
解决无果,有待进一步研究解决 ---未完待续---

12.6.5 限制飞船的活动范围
# Ship.py
import pygameclass Ship:"""管理飞船的类"""def __init__(self, ai_game):"""初始化飞船并设置其初始位置"""self.screen = ai_game.screenself.settings = ai_game.settingsself.screen_rect = ai_game.screen.get_rect()# 加载飞船图像并获取其外接矩形self.image = pygame.image.load('images/ship1.bmp')self.rect = self.image.get_rect()# 将每艘飞船放在屏幕底部中央self.rect.midbottom = self.screen_rect.midbottom# 在飞船的属性x中存储小数值self.x = float(self.rect.x)# 移动标志self.moving_right = Falseself.moving_left = Falsedef update(self):"""根据移动标志调整飞船的位置"""# 更新飞船而不是rect对象的x值# 如果飞船右移的标志和飞船外接矩形右边缘的x坐标 小于 屏幕右边缘x坐标,开始右移if self.moving_right and self.rect.right < self.screen_rect.right:self.rect.x += self.settings.ship_speed# 如果飞船左移的标志和飞船外接矩形左边缘的x坐标 大于于 0,开始左移if self.moving_left and self.rect.left > 0:self.rect.x -= self.settings.ship_speed# 根据self.x 更新rect对象self.rect.x = self.xdef blitme(self):"""在指定位置绘制飞船"""self.screen.blit(self.image, self.rect)

12.6.6 重构_check_events()
import sys
import pygame
from Settings import Settings
from Ship import Shipclass AlienInvasion:"""管理游戏资源和行为的类"""def __init__(self):"""初始化游戏并创建游戏资源"""pygame.init()self.settings = Settings()self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))pygame.display.set_caption("Alien Invasion")self.ship = Ship(self)def run_game(self):"""开始游戏的主循环"""while True:self._check_events()self.ship.update()self._update_screen()def _check_events(self):"""响应按键和鼠标事件"""for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:self._check_keydown_events(event)elif event.type == pygame.KEYUP:self._check_keyup_events(event)def _check_keydown_events(self, event):"""响应按键"""if event.key == pygame.K_RIGHT:self.ship.moving_right = Trueelif event.key == pygame.K_LEFT:self.ship.moving_left = Truedef _check_keyup_events(self, event):"""响应松开"""if event.key == pygame.K_RIGHT:self.ship.moving_right = Falseelif event.key == pygame.K_LEFT:self.ship.moving_left = Falsedef _update_screen(self):"""更新屏幕上的图像,并切换到新屏幕。"""self.screen.fill(self.settings.bg_color)self.ship.blitme()# 让最近绘制的屏幕可见pygame.display.flip()if __name__ == '__main__':# 创建游戏实例并运行游戏ai = AlienInvasion()ai.run_game() 
12.6.7 按Q键退出
def _check_keydown_events(self, event):"""响应按键"""if event.key == pygame.K_RIGHT:self.ship.moving_right = Trueelif event.key == pygame.K_LEFT:self.ship.moving_left = Trueelif event.key == pygame.K_q:sys.exit() 
12.6.8 在全屏模式下运行游戏
self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN) self.settings.screen_width = self.screen.get_rect().width self.settings.screen_height = self.screen.get_rect().height
import sys
import pygame
from Settings import Settings
from Ship import Shipclass AlienInvasion:"""管理游戏资源和行为的类"""def __init__(self):"""初始化游戏并创建游戏资源"""pygame.init()self.settings = Settings()self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)self.settings.screen_width = self.screen.get_rect().widthself.settings.screen_height = self.screen.get_rect().heightpygame.display.set_caption("Alien Invasion")self.ship = Ship(self)def run_game(self):"""开始游戏的主循环"""while True:self._check_events()self.ship.update()self._update_screen()def _check_events(self):"""响应按键和鼠标事件"""for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:self._check_keydown_events(event)elif event.type == pygame.KEYUP:self._check_keyup_events(event)def _check_keydown_events(self, event):"""响应按键"""if event.key == pygame.K_RIGHT:self.ship.moving_right = Trueelif event.key == pygame.K_LEFT:self.ship.moving_left = Trueelif event.key == pygame.K_q:sys.exit()def _check_keyup_events(self, event):"""响应松开"""if event.key == pygame.K_RIGHT:self.ship.moving_right = Falseelif event.key == pygame.K_LEFT:self.ship.moving_left = Falsedef _update_screen(self):"""更新屏幕上的图像,并切换到新屏幕。"""self.screen.fill(self.settings.bg_color)self.ship.blitme()# 让最近绘制的屏幕可见pygame.display.flip()if __name__ == '__main__':# 创建游戏实例并运行游戏ai = AlienInvasion()ai.run_game() 

相关文章:
《Python编程从入门到实践》day21
# 昨日知识点回顾 设置背景颜色 在屏幕中央绘制飞船 # 今日知识点学习 12.5 重构:方法_check_events()和_update_screen() 12.5.1 方法_check_events() import sys import pygame from Settings import Settings from Ship import Shipclass AlienInvasion:"…...
上位机图像处理和嵌入式模块部署(树莓派4b镜像烧录经验总结)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 陆陆续续也烧录了好多次树莓派的镜像了,这里面有的时候很快,有的时候很慢。特别是烧录慢的时候,也不知道是自己…...
简单数据加解密,JS和JAVA同时实现
前端Vue调用Java后端接口中的数据进行加密,以避免敏感数据泄露。 现在实现一个高性能加密方法,用来对数据进行加密后传输。算法包括JS的加密和解密方法,也包括Java的加密解密方法。 可以在前端加密,后端解密。也可以在后端加密&…...
Android Framework中PackageManagerService的深度剖析
摘要 Android操作系统的核心服务之一——PackageManagerService(PMS),扮演着至关重要的角色,负责维护系统中所有应用程序的生命周期管理。本文旨在全面探讨PMS的功能特性、工作流程、实际应用场景,并对其进行优劣分析,以期为开发者…...
(AI Web、ChatGPT Native、Ai Loading、AI Tools、知豆AI)
目录 1、AI Web 2、ChatGPT Native 3、Ai Loading 4、AI Tools 5、知豆AI 1、AI Web...
VBA 批量处理Excel文件
目录 一. 批量创建Excel文件1.1 VBA的方式1.2 Powershell方式 二. 批量删除文件三. 批量重命名文件四. 合并多个Excel数据到一个Excel文件中 一. 批量创建Excel文件 1.1 VBA的方式 Sub CreateFiles()Dim strPath As String, strFileName As StringDim i As Long, rDim pathSe…...
PG实例连接访问控制
实例访问控制可以控制来自于不同主机,不同用户是否允许访问指定的数据库,以及验证方式。 与oracle中的连接管理器的功能相同,之前有写过一篇oracleCMAN连接管理器的配置实操: 配置oracle连接管理器(cman)…...
2024-05-07 商业分析-如何在社会层面做一个更好的工具人-记录
摘要: 2024-05-07 商业分析-如何成为一个靠谱的工具人 如何在社会层面做一个更好的工具人 那么今天讲的这个主题呢,对吧?你们一看啊,就觉得这个就不应该我讲是吧啊,但是呢这个逻辑呢我还得跟你们讲一下啊,就是如何成为…...
C++设计模式-创建型设计模式
设计模式 设计模式是什么 设计模式是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案;其实就是解决问题的固定套路。但是要慎用设计模式,有一定的工程代码量之后用它比较…...
code-server容器webpack的ws无法连接解决方法
TLDR 通过指定client的wsrul去连接ws devServer.client.webSocketURL ‘wss://<Forwarded uri>/ws’ 拓扑 1、code-server: 用于编写代码、启动webpack dev-server 服务;[https://<domain>:8001] 2、webpack: 用于浏览dev-server服务;[ht…...
leetcode47-Permutations II
分析 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1: 输入:nums [1,1,2] 输出: [[1,1,2], [1,2,1], [2,1,1]] 题目 由于元素是重复的,要求返回不重复的,所以一定会有…...
246 基于matlab的交流电机动态方程
基于matlab的交流电机动态方程,用于交流电机动态分析。输入电机的额定功率(kW)、电机的额定转速(r/min)、转子外径(m)、铁心长(m)转子槽数、电机极对数 等参数,输出转速变化、力矩变化等结果。程序已调通,可直接运行。 246 交流电机动态 转速…...
7天入门Android开发之第2天——四大组件之活动
一、活动是什么 活动(Activity)是 Android 应用程序中的一个重要组件,它代表用户界面上的单个窗口,通常会填充整个屏幕。通过活动,可以创建各种各样的用户界面,并控制界面的行为。活动可以包含各种 UI 元素…...
自然语言(NLP)
It’s time for us to learn how to analyse natural language documents, using Natural Language Processing (NLP). We’ll be focusing on the Hugging Face ecosystem, especially the Transformers library, and the vast collection of pretrained NLP models. Our proj…...
学习java第六十天
Advice的类型: (1)前置通知(Before Advice):在连接点(Join point)之前执行的通知。 (2)后置通知(After Advice):当连接点退…...
OpenFeign修改HttpClient为Apache HttpClient 5
OpenFeign中http client 如果不做特殊配置,OpenFeign默认使用JDK自带的HttpURLConnection发送HTTP请求, 由于默认HttpURLConnection没有连接池、性能和效率比较低。所以修改为Apache HttpClient 5。 总结为两步: 加依赖改yml 具体操作请往…...
【busybox记录】【shell指令】comm
目录 内容来源: 【GUN】【comm】指令介绍 【busybox】【comm】指令介绍 【linux】【comm】指令介绍 使用示例: 逐行比较两个排序后的文件 - 默认输出 逐行比较两个排序后的文件 - 如果一个文件的排序有问题,那么反错(默认&…...
工作中遇到的问题,如何解决的
1. gorm update 一条记录的某个字段后,立刻(1ms)select这条记录,会有读取不到最新结果的情况: transaction已经提交,数据最后也是更新的。 猜测原因:MySQL没能及时把那条很大的record“刷盘”到…...
数据结构(c):队列
目录 🍺0.前言 1.什么是队列 2. 队列的实现 2.1定义队列节点 2.2定义队列 2.3队尾入队列 2.4判断队列是否为空 2.5队头出队列 2.6 队列首元素 2.7队尾元素 2.8队列内的元素个数 2.9销毁队列 3.试运行 💎4.结束语 🍺0.前言 言C之…...
Vue单页面应用和多页面应用的区别
概念: SPA单页面应用(SinglePage Web Application),指只有一个主页面的应用,一开始只需要加载一次js、css等相关资源。所有内容都包含在主页面,对每一个功能模块组件化。单页应用跳转,就是切换…...
Adobe-GenP 3.0:5分钟解锁Adobe全家桶的专业方案
Adobe-GenP 3.0:5分钟解锁Adobe全家桶的专业方案 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 还在为高昂的Adobe订阅费用发愁吗?Adobe-Ge…...
从Demo到实战:手把手教你用OpenMMLab的MMDetection训练自己的第一个目标检测模型(附数据集制作)
从零构建目标检测模型:OpenMMLab实战指南与数据集制作全流程 当你第一次成功运行OpenMMLab的Demo时,那种成就感可能很快会被新的困惑取代——如何让这套强大的工具识别你自己的数据?本文将带你跨越从"跑通示例"到"训练自定义模…...
Orange Pi 3B深度评测:RK3566创客板在边缘AI与家庭服务器中的应用实战
1. 项目概述:一块“搅局”的创客板最近,Orange Pi 3B的发布在创客圈和嵌入式开发者社区里激起了一阵不小的波澜。官方打出的“创客价”这个标签,更是精准地戳中了许多硬件爱好者和项目开发者的心。简单来说,Orange Pi 3B是一款基于…...
python系列【仅供参考】:mongo4.0.0 加用户认证 motor和pymongo的auth连接
mongo4.0.0 加用户认证 && motor和pymongo的auth连接 mongo4.0.0 加用户认证 摘要 一. 数据库版本 二. 为mongo 添加用户认证 1. 创建超级用户 3. 开启auth 4.重启mongo 5. 添加库用户 三.验证 四.pymongo,motor连接 摘要 正文 mongo4.0.0 加用户认证 摘要 本文介绍…...
Artisan:开源咖啡烘焙软件的终极指南,从入门到精通的完整解决方案
Artisan:开源咖啡烘焙软件的终极指南,从入门到精通的完整解决方案 【免费下载链接】artisan artisan: the worlds most trusted roasting software 项目地址: https://gitcode.com/gh_mirrors/ar/artisan 你是否曾为咖啡烘焙的不可预测性而烦恼&a…...
别只仿真了!手把手教你将Proteus里的AT89C52温控风扇代码烧录进实物单片机
从Proteus仿真到实物落地:AT89C52温控风扇全流程实战指南 当你成功在Proteus中完成了AT89C52温控风扇的仿真,看到虚拟环境中风扇随着温度变化自动启停时,那种成就感不言而喻。但仿真终究只是第一步,真正的挑战在于如何将这个系统…...
基于QT5的串口上位机开发:从零实现数据收发与可视化
1. 项目概述:为什么我们需要自己动手写串口上位机?在嵌入式开发、工业控制、物联网设备调试这些领域,串口通信就像设备与电脑之间最古老也最可靠的“方言”。你可能用过各种现成的串口调试助手,它们功能强大,但当你需要…...
告别轮询!用GD32F4xx的USART中断实现高效串口数据收发(实测对比耗时)
告别轮询!用GD32F4xx的USART中断实现高效串口数据收发(实测对比耗时) 在嵌入式系统中,串口通信是最基础也最常用的外设之一。对于需要同时处理多个任务的系统来说,如何高效地管理串口通信,减少CPU资源的占用…...
别再只用Leaflet了!Mapbox GL JS加载本地MVT矢量瓦片保姆级教程(附避坑点)
从Leaflet到Mapbox GL JS:解锁MVT矢量瓦片的进阶玩法 当传统WebGIS开发者第一次看到Mapbox GL JS渲染的矢量瓦片地图时,那种震撼感不亚于从黑白电视切换到4K HDR。Leaflet就像一把可靠的瑞士军刀,而Mapbox GL JS则像一套专业厨房设备——当你…...
性能优化实战:在Unity项目里管理多个Video Player,如何避免内存泄漏和卡顿?
Unity多视频管理实战:规避内存泄漏与卡顿的深度优化策略 在沉浸式游戏体验和交互式AR/VR应用中,视频内容已成为提升用户参与度的关键要素。但当场景中同时存在多个Video Player组件时,开发者往往会遭遇突如其来的性能断崖——内存占用飙升、播…...
