[英]How to do x every x amount of time in a class def
你如何每 x 次做 x 次。 我試圖在我的代碼中,市政廳類使用def函數add_money每50秒添加一次錢(這是被稱為城市類的一部分),但我在查找或執行代碼時遇到了麻煩,我認為你可以使用時間.sleep() 但這不起作用,因為它減慢了我的代碼,我該如何在不妨礙主事件代碼或類 def 的情況下做到這一點?
import pygame
from pygame.locals import *
import datetime
import random
import time
import pickle
import os
import math
import threading
os.system
vec = pygame.math.Vector2
pygame.init()
FPS = 30
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
WHITE = (255, 255, 255)
GRAY = (127, 127, 127)
BLACK = (0, 0, 0)
HEIGHT = 800
WIDTH = 500
Font = pygame.font.SysFont('timesnewroman', 30)
gamedisplay = pygame.display.set_mode((HEIGHT, WIDTH))
clock = pygame.time.Clock()
class city():
def __init__(self):
self.city_x =300
self.city_y = 300
self.money = 0
self.level = 0
self.city_happiness = 0
self.food = 0
self.experience = 0
self.water = 0
def draw(self, display):
self.text = Font.render('citiesmoney:' + str(self.money),2,(BLACK))
gamedisplay.blit(self.text, (self.city_x, self.city_y-300))
def add_money(self):
self.money += 1
class c_panel():
def __init__():
pass
class buildings():
def __init__():
self.b_health = 100
class town_hall(buildings):
def __init__(self):
self.cit = city()
def adding_money(self):
self.cit.add_money
class monster():
def __init__():
pass
class citizens():
def __init__(self):
self.x = 100
self.y = 100
self.image = pygame.Surface((100, 100))
self.raidimg = pygame.Surface((100, 100))
self.joinimg = pygame.Surface((200, 100))
self.recjin = self.raidimg.get_rect()
self.recri = self.raidimg.get_rect()
self.recri.center = 300//2, 300//2
self.rect = self.image.get_rect(center = (self.x, self.y))
self.rect.center = 300//2, 300//2
self.moving = False
self.c_health = 100
self.c_mood = 100
self.c_hunger = 100
self.c_intelligence = 0
self.c_tempature = 50
self.c_firstname = ["Valerie", "Bill","Jill"]
self.c_lastname = ["Harper","Benedict","Smith"]
self.c_speed = 0
self.c_strength = 0
self.c_gender = random.randint(0,5)
self.fullname = random.choice(self.c_firstname) + random.choice(self.c_lastname)
def c_mousedrag(self):
if event.type == MOUSEBUTTONDOWN:
if self.rect.collidepoint(event.pos):
self.moving = True
elif event.type == MOUSEBUTTONUP:
self.moving = False
elif event.type == MOUSEMOTION and self.moving:
self.rect.move_ip(event.rel)
def c_raidfight(self):
if event.type == MOUSEBUTTONDOWN:
if self.recri.collidepoint(event.pos):
self.c_health -= 1
elif event.type == MOUSEBUTTONUP:
pass
def draw(self, display):
self.text = Font.render('fullname:' + (self.fullname),2,(BLACK))
gamedisplay.blit(self.text, (self.rect.x-100, self.rect.y-100))
self.text = Font.render('Health:' + str(self.c_health),2,(BLACK))
gamedisplay.blit(self.text, (self.rect.x-100, self.rect.y-70))
self.text = Font.render('mood:' + str(self.c_mood),2,(BLACK))
gamedisplay.blit(self.text, (self.rect.x-100, self.rect.y-60))
self.text = Font.render('intelligence:' + str(self.c_intelligence),2,(BLACK))
gamedisplay.blit(self.text, (self.rect.x-100, self.rect.y-50))
self.text = Font.render('tempature:' + str(self.c_tempature),2,(BLACK))
gamedisplay.blit(self.text, (self.rect.x-100, self.rect.y-40))
self.text = Font.render('speed:'+ str(self.c_speed),2,(BLACK))
gamedisplay.blit(self.text, (self.rect.x-100, self.rect.y-30))
self.text = Font.render('strength:'+ str(self.c_strength),2,(BLACK))
gamedisplay.blit(self.text, (self.rect.x-100, self.rect.y-20))
self.text = Font.render('hunger:'+ str(self.c_hunger),2,(BLACK))
gamedisplay.blit(self.text, (self.rect.x-100, self.rect.y-10))
self.text = Font.render('gender:'+ str(self.c_gender),2,(BLACK))
gamedisplay.blit(self.text, (self.rect.x-100, self.rect.y-2))
gamedisplay.blit(self.image, self.rect)
gamedisplay.blit(self.raidimg, self.recri)
town = city()
townhall = town_hall()
citizen = citizens()
while True:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
#exit()
gamedisplay.fill(WHITE)
citizen.draw(gamedisplay)
citizen.c_mousedrag()
citizen.c_raidfight()
townhall.adding_money()
town.draw(gamedisplay)
pygame.display.update()
pygame.display.flip()
首先,您應該為幀數和游戲時間設置一些常量變量。 然后在你的加錢方法中,你會發生一些事情。 一:將幀計數加一,因為該方法在游戲循環的每次迭代中都會調用一次。 二:檢查幀數除以您的 FPS 是否等於 0,邏輯如下: if frame_count % FPS == 0:
然后在此 if 語句中,添加游戲時間並將幀數設置回零。 然后你將有一個每秒計數的變量。 最后,您可以像這樣檢查游戲時間: if game_time % 50 == 0:
並添加到您所在城市的現金供應中,最后將游戲時間設置回 0,因為您的其他代碼都不依賴於計時器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.