簡體   English   中英

Python&PyGame-單擊圖像后如何增加變量?

[英]Python & PyGame - How to increase a variable after clicking on a image?

我正在嘗試在PyGame中制作我的第一個游戲。 目的是單擊一個罐子(Titled“ jar.png”)以獲得更多的沙子。 也有文字不斷告訴您您有多少沙子。

但是,我有一個問題,我需要一個腳本來確保當您單擊“ jar.png”時,它將變量sand增加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

因此,能否請您提供包含所需功能的這段代碼的編輯部分。 謝謝。

您的代碼不是結構良好的pygame應用程序。 小型pygame應用程序代碼如下所示:

結構體

應用程序初始化

在這里,我們放置pygame.init() ,獲取屏幕變量,加載所有必要的圖像和文件,創建程序中可能需要的其他變量。

While循環

在這里,我們放置了所有需要更新的內容。 我們可以在這里將代碼分為3部分:

  • 繪圖 -背景以及需要繪制的所有其他精靈
  • 更新 -更新時鍾,移動精靈,檢查碰撞等。
  • 處理輸入 -設置用於更改update方法中子畫面行為的變量。

這三個部分必須清楚分開!

其他幾件事:永遠不要調用sleep() ,因為這實質上會凍結您的游戲。 另外,您的第二個while循環永遠不會執行。

現在回到問題所在:在事件循環中,檢查與jar rect的碰撞。 使用的方法是: Rect.collidepoint ,當該點在矩形中時返回True。

我對此有兩句話:

首先,正如Bartlomiej Lewandowski所說的,這是一些無組織的pygame代碼。 我推薦這本來自inventwithpython的有關pygame和一般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()

您可以通過不同的用戶操作和/或使用簡單的檢查點來更改倍增器的值! 我不建議將乘數用作參數,因為它會降低應用程序的可感知性。

如果發現有用,不要忘了接受它作為答案! 干杯:)

順便說一句,此示例在鼠標光標單擊測試上測試逐像素准確性。 要檢查點擊區域,請檢查(x,y)是否位於按鈕/點擊區域內。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM