微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pygame 点击图片事件

如何解决Pygame 点击图片事件

我目前正在使用 Python 和 PyGame 开发游戏。我做了一个鸡蛋精灵,点击它可以赚钱,但我不知道如何使图像可点击,所以你可以通过点击任何地方来赚钱。 源代码

import pygame,sys,time
from pygame.locals import *
from millify import millify,prettify

pygame.init()
WHITE = 255,255,255
font = pygame.font.SysFont(None,44)
cpsecond = open("clickpersecond.txt","r+")
cps = int(cpsecond.read())
baltotal = open("totalbal.txt","r+")
totalbal = int(baltotal.read())
totalbalM = prettify(totalbal,'.')
ev = pygame.event.get()
clock = pygame.time.Clock()
w = 800
h = 600
screen = pygame.display.set_mode((w,h))
pygame.display.set_caption('Tap Simulator')
Loop = True
background = pygame.image.load("C:\\Users\\Lenovo\\Desktop\\Tap Simulator\\Background.jpg")
egg = pygame.image.load("C:\\Users\\Lenovo\\Desktop\\Tap Simulator\\egg.png")
resized_egg = pygame.transform.scale(egg,(282,352))
text = font.render(f'Your total clicks are {totalbalM}',True,WHITE)
while Loop: # main game loop
    for event in pygame.event.get():
        if event.type == QUIT:
            Loop = False

        if event.type == MOUSEBUTTONDOWN: #detecting mouse click
                totalbal += cps
                totalbalM = prettify(totalbal,'.')
                text = font.render(f'Your total clicks are {totalbalM}',WHITE)
                print("Your total clicks are",totalbalM,end="\r")

    #print(pygame.mouse.get_pos()) #to get mouse pos
    screen.blit(background,(0,0))
    screen.blit(text,(235,557))
    screen.blit(resized_egg,(260,150))
    pygame.display.flip()
    pygame.display.update()
    clock.tick(30)

with open("totalbal.txt","w") as baltotal:
    baltotal.write(str(totalbal))
baltotal.close

pygame.quit()
sys.exit()

解决方法

使用 pygame.Rectcollidepoint 检测矩形中的点击。

MOUSEBUTTONDOWN 生成的 pygame.event.Event() 对象有两个提供鼠标事件信息的属性。 pos 是一个存储被点击位置的元组。 button 存储被点击的按钮。

使用 pygame.Surface.get_rect.get_rect() 得到一个与图像大小相同的矩形。矩形总是从 (0,0) 开始,因为 Surface 对象没有位置。 表面 blit 位于屏幕上的某个位置。矩形的位置可以通过关键字参数指定。例如,矩形的左上角可以用关键字参数 topleft:

指定
while Loop: # main game loop
    for event in pygame.event.get():
        if event.type == QUIT:
            Loop = False

        if event.type == MOUSEBUTTONDOWN:
            egg_rect = resized_egg.get_rect(topleft = (260,150))
            if egg_rect.collidepoint(event.pos):
                totalbal += cps
                totalbalM = prettify(totalbal,'.')
                text = font.render(f'Your total clicks are {totalbalM}',True,WHITE)
                print("Your total clicks are",totalbalM,end="\r")

    # [...]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。