| 
                         | 
                    
                                                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 ---->确定鼠标在圆内,接下来我们就可以根据此条件在进行移动圆,详细可以看上面的代码。
总而言之,这是一个很巧妙的方法,通过勾股定理来确定鼠标在圆内,在以此控制圆移动,其他图形也是差不多,先确定鼠标位置在图形中,再根据逻辑移动它。遇到困难,不要怕,像下雨时遇见寒风一样,走过去,不要怕,你有伞,你不是一无所有,你可以挺过去。
与君共勉,下期再见。
