如何只在图像上注册点击[Pygame]

时间:2014-07-24 02:34:51

标签: python pygame

我真的很想在pygame中编程和制作游戏。我一直在努力制作自己的简单游戏,但最近我陷入困境,我不知道如何编程。

我正在制作2D Mining游戏。我的光标是一个选择,我的屏幕中央有一块岩石图像。我如何才能做到这一点,只有当我点击它将会有所反应(选择将有一个动画,声音将播放,将在“库存”中获得1个摇滚

我制作了岩石并给它一个透明的背景......可见岩石的每个部分都必须是可点击的。

(现在我可以点击屏幕上的任意位置,它会在我的库存中添加一块石头,显然我不想要这个。)

这是我的代码:

import pygame, sys
from pygame.locals import *

pygame.init()
pygame.font.init()
pygame.display.set_caption("Miner Click")

clock = pygame.time.Clock()
screen = pygame.display.set_mode((960,600))
width = 960
height = 600

GREEN = (0,255,0)
RED = (255,0,0)
BLUE = (0,0,255)
BLACK = (0,0,0)
WHITE = (255,255,255)
BROWN = (84,27,1) 
GREY = (198,198,198)

greenbg = pygame.image.load("greenbg.jpg").convert()
rockbutton = pygame.image.load("rockbutton.png").convert_alpha()
woodbutton = pygame.image.load("woodbutton.png").convert_alpha()

pygame.mouse.set_visible(0)
pick = pygame.image.load("pick.png").convert_alpha()
axe = pygame.image.load("axesmall.png").convert_alpha()
rock = pygame.image.load("rock.png").convert_alpha()

clicks = 0
wood = 0

stonefont = pygame.font.SysFont("verdana", 29, True)
woodfont = pygame.font.SysFont("verdana", 29, True)
clicktext = stonefont.render('Rock: ' +str(clicks), 2, (GREY))
woodtext = woodfont.render('Wood: ' +str(wood), 2, (BROWN))
boxsize = clicktext.get_rect()
RocksX = 125
WoodX = 113

class Rock:
def __init__(self, rock):
    self.rock = rock

coordfont = pygame.font.SysFont("verdana", 12, True)



while True:
clock.tick(60)
screen.fill((255,255,255))
screen.blit(greenbg, (0,0))
screen.blit(rock, (250,210))
x,y = pygame.mouse.get_pos()
coords = x,y
label = coordfont.render("Coordinates: "+str(coords), 1, (GREY))
screen.blit(label, (790, 10))
screen.blit(rockbutton, (25,25))
screen.blit(woodbutton, (25,100))
clicktext = stonefont.render(' ' +str(clicks), 2, (GREY))
woodtext = woodfont.render(' ' +str(wood), 2, (BROWN))
screen.blit(clicktext, [RocksX,38])
screen.blit(woodtext, [139,WoodX])
screen.blit(pick, (x-75,y-50))
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        sys.exit()
    elif event.type == KEYDOWN and event.key == K_ESCAPE: 
        sys.exit()
    elif event.type == MOUSEBUTTONDOWN:
        clicks+=1
    elif event.type == KEYDOWN and event.key == K_SPACE:
        wood+=1


    pygame.display.flip()

2 个答案:

答案 0 :(得分:0)

基于以下事实:变量点击在stonefont中使用如下:

stonefont.render(' ' +str(clicks), 2, (GREY)

我将假设这是对库存中岩石数量的参考。但是我注意到在你的MOUSEBUTTONDOWN事件中它会在点击鼠标时添加一块石头,所以为了解决这个问题,我会检查鼠标是否在岩石上点击时如此,(替换你当前的MOUSEBUTTONDOWN事件。)

   elif event.type == MOUSEBUTTONDOWN:
        if x>125 and x<(entertherockswidthhere) and y>38 and y<(entertherocksheighthere):
             clicks+=1

答案 1 :(得分:0)

在这样的鼠标点击事件处理程序下单击时,您可以检查鼠标坐标的边界。

if x > rock.x and x < rock.x + rock.width:
    clicks += 1 # or whatever you want to happen here ..
相关问题