pygame学习笔记——检测鼠标碰到、点击图片
一、碰到效果实现思路
1.坐标检测
时刻检测鼠标的坐标,有没有移到目标图片的坐标范围内,此方法无法准确描述不规则图像的坐标范围。
2.精灵碰撞检测
创建一个鼠标精灵类,创建鼠标对象,一直跟着鼠标移动,鼠标对象==鼠标指针
检测鼠标对象精灵,有没有和其他精灵碰撞即可。
二、碰到效果代码实现
1.案例说明
一个飞机精灵 (方向键可控制移动).
一个鼠标精灵,鼠标精灵跟随鼠标。
检测两个精灵对象有无碰撞,碰撞就退出。
2.代码
-
import pygame,sys
-
-
pygame.init()#pygame库的初始化
-
-
root_sf = pygame.display.set_mode((480,600))#创建窗口,设置大小
-
-
'''
-
1.初始化 __init__
-
2.重写update
-
3.image、rect属性或变量
-
'''
-
#战斗机
-
class Plane(pygame.sprite.Sprite):
-
def __init__(self):
-
pygame.sprite.Sprite.__init__(self)
-
self.image = pygame.Surface((50,50))
-
self.image.fill('green')
-
self.rect = self.image.get_rect()#rect移动的方式更多
-
self.rect.center = (220,550)#初始化位置,updata方法会将突破移到这个位置
-
-
def update(self):
-
keys = pygame.key.get_pressed()
-
-
if keys[pygame.K_LEFT] and self.rect.left > 0:
-
self.rect = self.rect.move((-10,0))
-
elif keys[pygame.K_RIGHT] and self.rect.right < root_sf.get_width():
-
self.rect = self.rect.move((10,0))
-
elif keys[pygame.K_UP] and self.rect.top > 0:
-
self.rect = self.rect.move((0,-10))
-
elif keys[pygame.K_DOWN] and self.rect.bottom < root_sf.get_height():
-
self.rect = self.rect.move((0,10))
-
-
root_sf.blit(self.image,self.rect)
-
-
-
#鼠标类
-
class Mouse(pygame.sprite.Sprite):
-
def __init__(self):
-
self.image = pygame.Surface((1,1))
-
self.image.fill('red')
-
self.rect = self.image.get_rect()
-
self.rect.center = pygame.mouse.get_pos()#初始位置到鼠标指针
-
def update(self):
-
self.rect.center = pygame.mouse.get_pos()#移到鼠标指针位置
-
root_sf.blit(self.image, self.rect)
-
-
#创建鼠标精灵
-
mouse = Mouse()
-
-
wj_plane = Plane()
-
-
clock = pygame.time.Clock()
-
while True:#阻止窗口关闭
-
#事件判断
-
for event in pygame.event.get():
-
if event.type == pygame.QUIT:
-
sys.exit()
-
-
#更新画面
-
root_sf.fill('black')
-
mouse.update()
-
wj_plane.update()
-
#检测玩家飞机是否碰到鼠标指针
-
if pygame.sprite.collide_mask(mouse, wj_plane):
-
sys.exit()#玩家飞机碰到鼠标指针,就退出
-
-
#刷新屏幕
-
pygame.display.flip()
-
clock.tick(30)
三、点击效果
碰到鼠标 且 鼠标点击 == 图片被点击
1.代码实现
-
import pygame,sys
-
-
pygame.init()#pygame库的初始化
-
-
root_sf = pygame.display.set_mode((480,600))#创建窗口,设置大小
-
-
'''
-
1.初始化 __init__
-
2.重写update
-
3.image、rect属性或变量
-
'''
-
#战斗机
-
class Plane(pygame.sprite.Sprite):
-
def __init__(self):
-
pygame.sprite.Sprite.__init__(self)
-
self.image = pygame.Surface((50,50))
-
self.image.fill('green')
-
self.rect = self.image.get_rect()#rect移动的方式更多
-
self.rect.center = (220,550)#初始化位置,updata方法会将突破移到这个位置
-
-
def update(self):
-
keys = pygame.key.get_pressed()
-
-
if keys[pygame.K_LEFT] and self.rect.left > 0:
-
self.rect = self.rect.move((-10,0))
-
elif keys[pygame.K_RIGHT] and self.rect.right < root_sf.get_width():
-
self.rect = self.rect.move((10,0))
-
elif keys[pygame.K_UP] and self.rect.top > 0:
-
self.rect = self.rect.move((0,-10))
-
elif keys[pygame.K_DOWN] and self.rect.bottom < root_sf.get_height():
-
self.rect = self.rect.move((0,10))
-
-
root_sf.blit(self.image,self.rect)
-
-
-
#鼠标类
-
class Mouse(pygame.sprite.Sprite):
-
def __init__(self):
-
self.image = pygame.Surface((1,1))
-
self.image.fill('red')
-
self.rect = self.image.get_rect()
-
self.rect.center = pygame.mouse.get_pos()#初始位置到鼠标指针
-
def update(self):
-
self.rect.center = pygame.mouse.get_pos()#移到鼠标指针位置
-
root_sf.blit(self.image, self.rect)
-
-
#创建鼠标精灵
-
mouse = Mouse()
-
-
wj_plane = Plane()
-
-
clock = pygame.time.Clock()
-
while True:#阻止窗口关闭
-
#事件判断
-
for event in pygame.event.get():
-
if event.type == pygame.QUIT:
-
sys.exit()
-
-
#更新画面
-
root_sf.fill('black')
-
mouse.update()
-
wj_plane.update()
-
#检测玩家飞机是否碰到鼠标指针 且 鼠标点击
-
if pygame.sprite.collide_mask(mouse, wj_plane) and pygame.mouse.get_pressed()[0]:
-
sys.exit()#玩家飞机是否碰到鼠标指针 且 鼠标点击,就退出
-
-
#刷新屏幕
-
pygame.display.flip()
-
clock.tick(30)
2.鼠标点击事件参考
pygame.mouse — pygame v2.1.1 documentation
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggcfka
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01