Python& PyGame - 如何在单击图像后增加变量?

时间:2013-10-29 19:02:01

标签: python onclick pygame sprite

我正在尝试在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

那么,您能否请我提供一段包含我想要的功能的编辑代码。谢谢。

2 个答案:

答案 0 :(得分:0)

您的代码不是结构良好的pygame应用程序。 一个小的pygame应用程序代码如何:

结构

应用程序初始化

在这里我们放置pygame.init(),获取我们的屏幕变量,加载所有必要的图像和文件,创建我们程序中可能需要的任何其他变量。

while循环

这里我们列出了所有需要更新的内容。 我们可以将代码分为3部分:

  • 绘图 - 背景以及需要绘制的所有其他精灵
  • 更新 - 更新时钟,移动精灵,检查碰撞等。
  • 处理输入 - 设置更改更新方法中sprite行为的变量。

这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)是否位于按钮/单击区域内。