pygame入门04.03——鼠标拖动物体移动 |
|
原来是稀琳
L7
• 2024-10-10 • 回复 1 • 只看楼主
• 举报
|
我是一个python入门的小白,做这个系列即是为了巩固pygame的相关知识,也是为了考验自己坚持做一件事。
另外如果以下内容有错误或不规范的请各位大佬积极指出,谢谢大家
效果:在窗口上我会画一个圆,我可以用鼠标拖动它移动。
代码展示:
import pygame
import sys
#初始化pygame
from pygame.locals import*
pygame.init()
#创建游戏窗口
width =640
height = 480
screen = pygame.display.set_mode((width,height))
#给游戏窗口命名
pygame.display.set_caption("拖动圆")
# 定义颜色
WHITE = (25, 55, 5)
BLACK = (150, 100, 30)
# 圆的初始位置和半径
circle_pos = [400, 300]
circle_radius = 50
# 是否在拖动圆
dragging = False
runing = True
while runing:
for event in pygame.event.get():
if event.type == pygame.QUIT:
runing = False
# 处理鼠标按下事件
if event.type == pygame.MOUSEBUTTONDOWN:
# 检查鼠标是否在圆内
if (event.pos[0] - circle_pos[0]) ** 2 + (event.pos[1] - circle_pos[1]) ** 2 <= circle_radius ** 2:
dragging = True
# 处理鼠标释放事件
if event.type == pygame.MOUSEBUTTONUP:
dragging = False
# 处理鼠标移动事件
if event.type == pygame.MOUSEMOTION and dragging:
circle_pos = list(event.pos)
# 填充背景
screen.fill(WHITE)
# 绘制圆
pygame.draw.circle(screen, BLACK, circle_pos, circle_radius)
#刷新游戏窗口
pygame.display.update()
#关闭游戏窗口
pygame.quit()
sys.exit()
思维过程:
其实就是简单的勾股定理和逻辑语句的运用
1、勾股定理的运用:我们画的图形必定有一个中点,比如:圆有圆心,正方形有对称点,三角形有重心,将它们对应在X-Y平面直角坐标系中就会有唯一的一个(x,y)坐标。另外我们知道鼠标所经过的每一个位置都是有其对应的(x,y)坐标。
就拿圆作为案例:
#圆的坐标
circle_pos = [400, 300]
'''
这里用列表的原因是为下面进行勾股定理运用代码更加的美观
event.pos[0] - circle_pos[0]) ** 2 + (event.pos[1] - circle_pos[1]) ** 2 <= circle_radius ** 2
都是运用列表的形式,更加统一和美观
'''
接下来我们根据一组图片来看一下为什么需要勾股定理
r^2 = Δx ^2 + Δy^2
接下来就是逻辑语句上的关系:
if r^2 <= R ---->确定鼠标在圆内,接下来我们就可以根据此条件在进行移动圆,详细可以看上面的代码。
总而言之,这是一个很巧妙的方法,通过勾股定理来确定鼠标在圆内,在以此控制圆移动,其他图形也是差不多,先确定鼠标位置在图形中,再根据逻辑移动它。遇到困难,不要怕,像下雨时遇见寒风一样,走过去,不要怕,你有伞,你不是一无所有,你可以挺过去。
与君共勉,下期再见。