0
だから私はPyGameでゲームを作ってきましたが、問題が発生しました。私はゲームのループで何かが起こると、スコアが上がり、そのフォント関数を呼び出すスコアカウンターを作っています。しかし、スコアが上がったときに呼び出されるだけなので、それは1つのフレームだということです。では、どのようにフレームごとに固執するのですか?Pygameのテキストの点滅
#Importation
import pygame
import time
from random import randint
#Initialization
pygame.mixer.pre_init(44100,16,2,4096)
pygame.init()
display_width = 800
display_height = 600
black = (0,0,0)
white = (255, 255, 255)
orange = (255, 122, 55)
slow_yellow = (255, 203, 82)
medium_orange = (255, 119, 0)
fast_red = (255, 102, 82)
bk_orange = (255, 228, 196)
gameDisplay = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption('Dodger Man')
clock = pygame.time.Clock()
score = 0
#MUSIC
pygame.mixer.music.load('coastin_converted.wav')
pygame.mixer.music.set_volume(.3)
pygame.mixer.music.play(-1)
#Man Sprite
manImg = pygame.image.load('tutorialcharacter.png')
man_width = 64
man_height = 64
#Wall Sprites
wall_LImg = pygame.image.load('wall.png')
def wall_L(wall_LX, wall_LY):
gameDisplay.blit(wall_LImg, (wall_LX, wall_LY))
wall_RImg = pygame.image.load('wall.png')
def wall_R(wall_RX, wall_RY):
gameDisplay.blit(wall_RImg, (wall_RX, wall_RY))
#Functions
def man(x,y):
gameDisplay.blit(manImg,(x,y))
#OBSTACLES
def obs(obsx, obsy, obsw, obsh, obscolor):
pygame.draw.rect(gameDisplay, obscolor, [obsx, obsy, obsw, obsh])
def obs_2(obsx_2, obsy_2, obsw_2, obsh_2, obscolor_2):
pygame.draw.rect(gameDisplay, obscolor_2, [obsx_2, obsy_2, obsw_2, obsh_2])
def obs_3(obsx_3, obsy_3, obsw_3, obsh_3, obscolor_3):
pygame.draw.rect(gameDisplay, obscolor_3, [obsx_3, obsy_3, obsw_3, obsh_3])
##Messages
def font_func(font_size, font_msg, font_color):
font = pygame.font.SysFont("freesansbold.tff", font_size)
text = font.render(font_msg, True, font_color)
##Death
def death():
pygame.mixer.music.load('death.wav')
pygame.mixer.music.set_volume(.3)
pygame.mixer.music.play(1)
font_func(115, "YOU\'RE DEAD", orange)
window.blit(font_msg, (display_width/2), 70)
x = (display_width * 0.40)
y = (display_height * 0.8)
for event in pygame.event.get():
if event.type == pygame.QUIT:
end_game()
else:
pass
time.sleep(.5)
pygame.mixer.music.load('coastin_converted.wav')
pygame.mixer.music.set_volume(.3)
pygame.mixer.music.play(-1)
game_loop(False)
#Game Loop
def game_loop(gameExit):
global score
x = (display_width * 0.40)
y = (display_height * 0.8)
wall_LX = 0
wall_LY = 0
wall_RX = display_width - 64
wall_RY = 0
#Obstacles
obs_startx = randint(64, display_width - 64)
obs_starty = -800
obs_speed = 10
obs_width = 75
obs_height = 75
obs_startx_2 = randint(64, display_width - 64)
obs_starty_2 = -300
obs_speed_2 = 12
obs_width_2 = 75
obs_height_2 = 75
obs_startx_3 = randint(64, display_width - 64)
obs_starty_3 = -1000
obs_speed_3 = 15
obs_width_3 = 75
obs_height_3 = 75
#Movement variables
x_change = 0
y_change = 0
#Event Loop
while gameExit != True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameExit = True
end_game()
#Movement
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x_change = -10
if event.key == pygame.K_RIGHT:
x_change = 10
if event.key == pygame.K_UP:
y_change = -10
if event.key == pygame.K_DOWN:
y_change = 10
#Non-Movement
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
x_change = 0
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
y_change = 0
#Logic
x += x_change
y += y_change
gameDisplay.fill(bk_orange)
wall_L(wall_LX, wall_LY)
wall_R(wall_RX, wall_RY)
##Blocks
obs(obs_startx, obs_starty, obs_width, obs_height, slow_yellow)
obs_starty += obs_speed
obs_2(obs_startx_2, obs_starty_2, obs_width_2, obs_height_2, medium_orange)
obs_starty_2 += obs_speed_2
obs_3(obs_startx_3, obs_starty_3, obs_width_3, obs_height_3, fast_red)
obs_starty_3 += obs_speed_3
man(x,y)
if x >= display_width - man_width or x <= 0:
death()
if y >= display_height - man_height or y <= 0:
y_change = 0
if obs_starty > display_height:
obs_starty = 0 - obs_height
obs_startx = randint(64, display_width - 64)
score += 1
font_func(70, ("SCORE:", str(score)), orange)
gameDisplay.blit(font_msg, (display_width/2), 70)
if obs_starty > 400:
if obs_starty_2 > display_height:
score += 2
font_func(70, ("SCORE:", str(score)), orange)
gameDisplay.blit(font_msg, (display_width/2), 70)
obs_starty_2 = 0 - obs_height_2
obs_startx_2 = randint(64, display_width - 64)
if obs_starty_2 > 500:
if obs_starty_3 > display_height:
score += 3
font_func(70, ("SCORE:", str(score)), orange)
gameDisplay.blit(font_msg, (display_width/2), 70)
obs_starty_3 = 0 - obs_height_3
obs_startx_3 = randint(64, display_width - 64)
if y <= obs_starty + obs_height:
if x > obs_startx and x < obs_startx + obs_width or x + man_width > obs_startx and x + man_width < obs_startx + obs_width:
if y + man_height < obs_starty:
pass
else:
score = 0
death()
if y <= obs_starty_2 + obs_height_2:
if x > obs_startx_2 and x < obs_startx_2 + obs_width_2 or x + man_width > obs_startx_2 and x + man_width < obs_startx_2 + obs_width_2:
if y + man_height < obs_starty_2:
pass
else:
score = 0
death()
if y <= obs_starty_3 + obs_height_3:
if x > obs_startx_3 and x < obs_startx_3 + obs_width_3 or x + man_width > obs_startx_3 and x + man_width < obs_startx_3 + obs_width_3:
if y + man_height < obs_starty_3:
pass
else:
score = 0
death()
#Updates
pygame.display.flip()
clock.tick(60)
#Terminate program
def end_game():
pygame.quit()
quit()
game_loop(False)
関数が単なる1行であれば関数ではないはずです。それはより多くのスペースを必要とし、他の人のために理解することをより困難にする。私は関数 'blit'を知っているので、' gameDisplay.blit(manImg、(x、y)) 'が何をするのか分かりますが、' man(x、y) 'が何を見ていないかはわかりません。また、別のパラメータをとる同じ関数( 'pygame.draw.rect'など)を経由するループを作成するのではなく、異なる名前を持つ関数を処理するループを作成するのが非常に難しくなります。 –