我正在玩pygame游戏,在第一个屏幕上我希望有按钮可以按下(i)启动游戏,(ii)加载带有说明的新屏幕,以及(iii)退出程序
我已经在网上找到了这个用于按钮制作的代码,但我并不是真的理解它(我在面向对象编程方面并不擅长)。如果我能得到一些关于它正在做什么的解释那将是伟大的。此外,当我使用它并尝试使用文件路径在我的计算机上打开文件时,我得到错误sh:filepath:Permission denied,我不知道如何解决。
#load_image is used in most pygame programs for loading images
def load_image(name, colorkey=None):
fullname = os.path.join('data', name)
try:
image = pygame.image.load(fullname)
except pygame.error, message:
print 'Cannot load image:', fullname
raise SystemExit, message
image = image.convert()
if colorkey is not None:
if colorkey is -1:
colorkey = image.get_at((0,0))
image.set_colorkey(colorkey, RLEACCEL)
return image, image.get_rect()
class Button(pygame.sprite.Sprite):
"""Class used to create a button, use setCords to set
position of topleft corner. Method pressed() returns
a boolean and should be called inside the input loop."""
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image, self.rect = load_image('button.png', -1)
def setCords(self,x,y):
self.rect.topleft = x,y
def pressed(self,mouse):
if mouse[0] > self.rect.topleft[0]:
if mouse[1] > self.rect.topleft[1]:
if mouse[0] < self.rect.bottomright[0]:
if mouse[1] < self.rect.bottomright[1]:
return True
else: return False
else: return False
else: return False
else: return False
def main():
button = Button() #Button class is created
button.setCords(200,200) #Button is displayed at 200,200
while 1:
for event in pygame.event.get():
if event.type == MOUSEBUTTONDOWN:
mouse = pygame.mouse.get_pos()
if button.pressed(mouse): #Button's pressed method is called
print ('button hit')
if __name__ == '__main__': main()
感谢任何可以帮助我的人。
答案 0 :(得分:12)
我没有适合你的代码示例,但我将如何做到:
这类似于你的例子,尽管仍然不同。
答案 1 :(得分:0)
&#39;代码&#39;你在网上找到的并不是那么好。你需要做一个按钮就是这个。把它放在代码的开头附近:
def Buttonify(Picture, coords, surface):
image = pygame.image.load(Picture)
imagerect = image.get_rect()
imagerect.topright = coords
surface.blit(image,imagerect)
return (image,imagerect)
将以下内容放入游戏循环中。也在游戏循环的某个地方:
Image = Buttonify('YOUR_PICTURE.png',THE_COORDS_OF_THE_BUTTON'S_TOP_RIGHT_CORNER, THE_NAME_OF_THE_SURFACE)
在您完成for event in pygame.event.get
if event.type == MOUSEBUTTONDOWN and event.button == 1:
mouse = pygame.mouse.getpos
if Image[1].collidrect(mouse):
#code if button is pressed goes here
因此,buttonify会加载按钮上的图像。此图像必须是.jpg文件或与代码位于同一目录中的任何其他PICTURE文件。图片就是它的名字。该名称必须包含.jpg或其后的任何内容,并且名称必须使用引号。 Buttonify中的coords参数是从pygame打开的屏幕或窗口的右上角坐标。表面就是这个:
blahblahblah = pygame.surface.set_mode((WindowSize))
/|\
|
Surface's Name
因此,该功能会生成名为“图像”的内容。这是一个pygame表面,它在它周围放了一个矩形,称为&#39; imagerect&#39; (将其设置在某个位置,然后设置为blitting时的第二个参数),然后设置它的位置,并在倒数第二个到最后一行上将其点亮。
下一段代码会使&#39; Image&#39;两个&#39;图像&#39;的元组。并且&#39; imagerect。&#39;
最后一个代码有if event.type == MOUSEBUTTONDOWN and event.button == 1:
,这基本上意味着如果按下鼠标左键。此代码必须位于for event in pygame.event.get
中。下一行使鼠标成为鼠标位置的元组。最后一行检查鼠标是否与Image [1]相撞,而Image [1]正如我们知道的那样是&#39; imagerect。&#39;代码如下。
告诉我是否需要进一步解释。
答案 2 :(得分:0)
所以你必须创建一个名为button的函数,它接收8个参数。 1)按钮消息 2)按钮左上角的X位置 3)按钮左上角的Y位置 4)按钮的宽度 5)按钮的高度 6)非活动颜色(背景颜色) 7)活动颜色(悬停时的颜色) 8)您要执行的操作的名称
result.data.info = {};
console.log(result.data);
result.data.info.UUID = uuid;
result.data.info.totalStressValue = totalValue;
console.log(result.data);
因此,当您创建游戏循环并调用按钮功能时:
按钮(&#34;开始&#34;,600,120,120,25,蓝色,青色,&#34;开始&#34;)
答案 3 :(得分:0)
这是我很久以前制作的按钮类: https://www.dropbox.com/s/iq5djllnz0tncc1/button.py?dl=0 据我所知,按钮是Windows 7风格,我最近无法测试它,因为我在我使用的计算机上没有pygame。希望这有帮助!
答案 4 :(得分:0)
另一种在pygame上创建按钮的好方法(在Python中)是安装名为 pygame_widgets (pip3 install pygame_widgets
)的软件包。
# Importing modules
import pygame as pg
import pygame_widgets as pw
# Creating screen
pg.init()
screen = pg.display.set_mode((800, 600))
running = True
button = pw.Button(
screen, 100, 100, 300, 150, text='Hello',
fontSize=50, margin=20,
inactiveColour=(255, 0, 0),
pressedColour=(0, 255, 0), radius=20,
onClick=lambda: print('Click')
)
正在运行:
events = pg.event.get()
for event in events:
if event.type == pg.QUIT:
running = False
button.listen(events)
button.draw()
pg.display.update()