프로그램을 실행할 때 웬일인지 내 baddie 이미지 (소행성)가 움직이지 않고 대상이 움직이지 않을 때마다 뒤틀리는 다. 각 움직임 코드 아래에 pygame.display.update()
을 넣으려고 시도했지만 그냥 깜박입니다. 또한 목표물과 배드민턴에 대한 이동 코드의 위치를 전환하여 목표 지연과 말더듬을 초래했습니다.움직일 때 이미지가 느려지고 뒤집습니다.
import pygame, sys, random
pygame.init()
def game():
width = 800
height = 600
screen = pygame.display.set_mode((width,height))
pygame.display.set_caption("Asteroid Dodger")
background = pygame.image.load("field_of_stars_full.jpg")
player = pygame.image.load("Silver_Surfer.png")
px = 350
py = 450
baddie = pygame.image.load("Asteroid.png")
baddiepos = baddie.get_rect()
target = pygame.image.load("Cosmic_Clump.png")
targetpos = [0,0]
gamespeed = 100
speed = [gamespeed*random.randint(1,3),gamespeed*random.randint(1,3)]
speed2 = [gamespeed*10,gamespeed*10]
clock = pygame.time.Clock()
movex = movey = 0
targetvisible = True
playervisible = True
font = pygame.font.Font(None,36)
score = 0
scoretext = font.render("Score: " + str(score), 2, (255,255,255))
lives = 3
livestext = font.render("Lives: " + str(lives),2, (255,255,255))
while True:
screen.blit(background, (0,0))
screen.blit(player, (px,py))
scoretext = font.render("Score: " + str(score), 2, (255,255,255))
livestext = font.render("Lives: " + str(lives), 2, (255,255,255))
screen.blit(scoretext, (20,20))
screen.blit(livestext, (670,20))
if targetvisible == True:
seconds = clock.tick()/1000.0
targetpos[0] += seconds*speed[0]
targetpos[1] += seconds*speed[1]
screen.blit(target, targetpos)
else:
screen.blit(target, targetpos)
if playervisible == True:
seconds = clock.tick()/1000.0
baddiepos[0] += seconds*speed2[0]
baddiepos[1] += seconds*speed2[1]
screen.blit(baddie, baddiepos)
else:
screen.blit(baddie, baddiepos)
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT or event.type == pygame.K_ESCAPE:
pygame.quit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
movex = 2
elif event.key == pygame.K_LEFT:
movex = -2
player = pygame.transform.flip(player, 1, 0)
elif event.key == pygame.K_DOWN:
movey = 2
elif event.key == pygame.K_UP:
movey = -2
elif event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT:
movex = 0
elif event.key == pygame.K_LEFT:
movex = 0
player = pygame.transform.flip(player, 1, 0)
elif event.key == pygame.K_DOWN:
movey = 0
elif event.key == pygame.K_UP:
movey = 0
elif event.key == pygame.K_ESCAPE:
pygame.quit()
px += movex
py += movey
if targetpos[0]+60 > width or targetpos[0]+15 < 0:
speed[0] = -speed[0]
targetpos[0] += seconds*speed[0]
if targetpos[1]+70 > height or targetpos[1]+30 < 0:
speed[1] = -speed[1]
targetpos[1] += seconds*speed[1]
if abs(targetpos[0]-px)<20 and abs(targetpos[1]-py)<20:
targetvisible = False
score += 10
targetpos[0] = random.randint(0,720)
targetpos[1] = random.randint(0,520)
screen.blit(target, (targetpos))
targetvisible = True
if baddiepos[0] > width or baddiepos[0] < 0:
speed2[0] = -speed2[0]
baddiepos[0] += seconds*speed2[0]
if baddiepos[1] > height or baddiepos[1] < 0:
speed2[1] = -speed2[1]
baddiepos[1] += seconds*speed2[1]
if abs(baddiepos[0]-px)<20 and (baddiepos[1]-py)<20:
playervisble = False
lives -= 1
baddiepos[0] = random.randint(0,720)
baddiepos[1] = random.randint(0,520)
screen.blit(baddie, (baddiepos))
playervisible = True
if px > 800:
px = 0
elif px < 0:
px = 800
if py > 600:
py = 0
elif py < 0:
py = 600
왜 당신이 대답에서 찾을 수이 예제를 실행하려면 당신은'pygame.time.delay()'를 사용하지 않습니까? – adil