我正在尝试在PyGame中制作我的第一款游戏。目标是点击一个罐子(标题为“jar.png”)以获得更多的沙子。还有文字经常告诉你你有多少沙子。
我有一个问题,我需要一个脚本,确保当你点击“jar.png”时它会将变量沙子增加1.另外,如果我确实找到了解决这个问题的方法,我不确定如果文本将正确显示变量。
我目前的代码如下:
import sys, pygame
from pygame.locals import *
pygame.init()
size = width, height = 800,500
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Sand Maker (Created by - Not Really Working Lamp Productions:)")
CORNBLUE = (100,149,237)
WHITE = (255,255,255)
sand = 0
liams = 0
screen.fill (CORNBLUE)
jar = pygame.image.load("jar.png")
screen.blit(jar,(90,50))
liambutton = pygame.image.load("liam button.png")
screen.blit(liambutton,(450,50))
liamdesc = pygame.image.load("liam desc.png")
screen.blit(liamdesc,(350,50))
myfont = pygame.font.SysFont("monospace", 16)
scoretext = myfont.render("Number of sand = "+str(sand), 1, (255,255,255))
screen.blit(scoretext, (5, 10))
liamscoretext = myfont.render("Number of Liams = "+str(liams), 1, (255,255,255))
screen.blit(liamscoretext, (350, 10))
import time
while 1:
for event in pygame.event.get():
pygame.display.flip()
if event.type == pygame.QUIT:sys.exit()
while 1:
time.sleep(5)
sand = sand + 1 * liams
那么,您能否请我提供一段包含我想要的功能的编辑代码。谢谢。
答案 0 :(得分:0)
您的代码不是结构良好的pygame应用程序。 一个小的pygame应用程序代码如何:
在这里我们放置pygame.init()
,获取我们的屏幕变量,加载所有必要的图像和文件,创建我们程序中可能需要的任何其他变量。
这里我们列出了所有需要更新的内容。 我们可以将代码分为3部分:
这3个部分必须明确分开!
很少有其他事情:永远不要打电话给sleep()
,因为这会冻结你的游戏。
此外,您的第二个while循环永远不会执行。
现在回到问题:
在事件循环中,检查与jar rect的冲突。使用的方法是:Rect.collidepoint
当点在矩形中时返回True。
答案 1 :(得分:0)
我有两件事要说:
首先,正如Bartlomiej Lewandowski所述,这是一些无组织的pygame代码。我推荐this免费电子书关于pygame和一般来自inventwithpython的gameLoop组织。
其次,我也使用过tkinter这种问题。首先,有一个函数会增加一个计算点击次数的全局变量:
clickCount = 0
multiplier = 1
def incrementClickCount():
global clickCount
global multiplier
click += 1 * multiplier
然后你所做的是测试按下它时鼠标光标的位置,如果它在你想要的坐标上。 (您可以为此添加按钮动画):
def checkForCursorPressed(x,y):
if pygame.mouse.get_pressed() == (1, 0, 0) and pygame.mouse.get_pos() == (x,y):
incrementClickCount()
您可以通过不同的用户操作和/或使用简单的检查点来更改多路复用器的值!我不建议使用乘数作为参数,因为它会降低你的app中的felxibilty。
如果您发现它有用,请不要忘记接受答案!干杯:)
顺便说一句,这个例子测试鼠标光标点击测试的逐像素精度。要检查区域点击,请检查(x,y)是否位于按钮/单击区域内。