我真的很想在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()
答案 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 ..