2つのスプライトが衝突するたびにスコアが1ずつ増加するゲームを作成しています。今すぐスコアは0として表示され、衝突が発生すると39に増加します(時には27になります)。数の変化により秒単位で増加すると考えられます。ここにいくつかの他の回答を読むと、私はそれが最も可能性が高い私は、forループに位置PythonのPyGameスコアカウンタが1でなく、秒単位でインクリメントする
t = f.render("Score = " + str(score), False, black)
screen.blit(t, (0,0))
を持っている場所の問題で実感しました。しかし、私は別の場所に置いてみると、スコアは画面上にまったく表示されません。ここ
はスコア
class Tub(Sprite):
def __init__(self):
Sprite.__init__(self)
self.image = image.load("tub.bmp").convert_alpha()
self.image = transform.scale(self.image, (100, 100))
self.rect = self.image.get_rect()
self.rect.x = width/2
self.rect.y = height - 100
def movement(self):
keys = pygame.key.get_pressed()
dist = 5
if keys [pygame.K_LEFT]:
self.rect.x -= dist
if keys [pygame.K_RIGHT]:
self.rect.x += dist
def hit(self, target):
return self.rect.colliderect(target)
class Singlescoop_pink(Sprite):
def __init__(self):
Sprite.__init__(self)
self.image = image.load("singlescoop_pink.bmp").convert_alpha()
self.image = transform.scale(self.image, (100, 100))
self.rect = self.image.get_rect()
self.rect.x = random.randint(0, width-100) #random x position, minus 100 so image does not go off screen
self.rect.y = -600 #start off screen so starting point to fall down is not visible
def movement(self):
self.rect.y += 5
if self.rect.y > height:
self.kill()
tub = Tub()
sspink = Singlescoop_pink()
sprites = pygame.sprite.RenderPlain(tub, sspink)
score = 0
def game_loop():
gameExit = False
while not gameExit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
quit()
sys.exit()
if tub.hit(sspink):
sspink.kill()
global score
score += 1
tub.movement()
sspink.movement()
screen.fill(white)
t = f.render("Score = " + str(score), False, black)
screen.blit(t, (0,0))
sprites.update()
sprites.draw(screen)
display.update()
clock.tick(60)
game_loop()
私は前にいくつかのゲームプログラミングをやったが、私が使用しpygameのダウンロードをhaventは以前はどのようにして衝突を処理しているのか分かりませんが、秒を増やすこととは関係ありませんが、複数のフレームでスプライトが接触している可能性があります。ゲームが60 fpsで実行されている場合、メインゲームループは毎秒60回実行されるため、複数のフレームでスプライトが接触している可能性があります。 – RichSmith
それはまさに問題でした。ありがとうございました! – Zanne