2014-03-01 2 views
0

저는 지난 1 주 정도 스페이스 인베이더 형 게임을 연구 해왔고, 실제로 잘 진행되고 있습니다. 그러나 어떤 이유로 Windows 컴퓨터에서 게임을 실행할 때 (필자가 코딩하기를 좋아하는 경우) 대부분의 스프라이트는 나타나지 않거나 화면에서 특정 방향으로 움직일 때만 나타납니다. Mac에서 똑같은 코드를 실행하면 모든 것이 완벽하게 업데이트됩니다. 파이 게임이 윈도우와 잘 맞지 않는 것으로 알려진 문제입니까?Windows 7에서 파이 게임의 스프라이트가 화면에 표시되지 않는 이유는 무엇입니까?

dirty = [] 
score_label = font.render("Score: " + str(score), 1, (255,215,0)) 
level_label = font.render("Level: " + str(level), 1, (255,215,0)) 
screen.blit(background,(10,10),(10,10,330,30)) 
screen.blit(score_label,(10,10)) 
screen.blit(level_label,(200,10)) 
dirty.append((10,10,330,30)) 

# New level 
if isEmpty(enemies): 
    dirty.append((400,300,150,30)) 
    for i in bullets: 
     dirty.append(i.pos) 
     screen.blit(background,(i.pos[0],i.pos[1]),i.pos) 
     bullets.remove(i) 
    if pauseCounter == 40: 
     screen.blit(background,(400,300),(400,300,150,30)) 
     pauseCounter = 0 
     jump = 30 
     level+=1  
     for x in range(1,6): 
      for y in range(11): 
       enemies[x-1].append(Sprites.Enemy(enemy_values[6-x],(60*y,40*x),6-x)) 
     for x in range(len(enemies)): 
      for e in enemies[x]: 
       dirty.append(e.pos) 
    else: 
     upLevelLabel = levelFont.render("Next Level!",1,(255,215,0)) 
     screen.blit(upLevelLabel,(400,300)) 
     pauseCounter += 1 

# Player input 
dirty.append(o.pos) 
screen.blit(background,(o.pos[0],o.pos[1]),o.pos) 
keys = pygame.key.get_pressed() 
if keys[K_a] and o.pos[0]-10 >= 0: 
    o.speed = -10 
    o.move() 
if keys[K_d] and o.pos[0] <= 907-o.pos[3]-10: 
    o.speed = 10 
    o.move() 
dirty.append(o.pos) 
screen.blit(o.image,o.pos) 

# Add bullets 
for event in pygame.event.get(): 
    if event.type == pygame.QUIT: sys.exit() 
    if event.type == pygame.KEYDOWN: 
     if event.key == K_SPACE: 
      bullets.append(Sprites.Bullet(bullet,(o.pos[0]+28,o.pos[1]))) 

# Updates bunkers 
for b in bunkers: 
    screen.blit(b.image,b.pos) 
    if b.health == 0: 
     screen.blit(background,(b.pos[0],b.pos[1]),b.pos) 
     dirty.append(b.pos) 
     bunkers.remove(b) 

# Check if bullets are offscreen/collide, move accordingly 
for b in bullets: 
    dirty.append(b.pos) 
    if b.pos[1] < 0: 
     screen.blit(background,(b.pos[0],b.pos[1]),b.pos) 
     dirty.append(b.pos) 
     bullets.remove(b) 
    if isEmpty(enemies) == False: 
     for x in range(len(enemies)): 
      if len(enemies[x]) > 0: 
       temp = enemies[x][0] 
       if b.pos[1] in range(temp.pos[1],temp.pos[1]+temp.pos[3]): 
        for e in enemies[x]: 
         if b.pos.colliderect(e.pos): 
          score += e.val*10 
          screen.blit(background,(b.pos[0],b.pos[1]),b.pos) 
          screen.blit(background,(e.pos[0],e.pos[1]),e.pos) 
          dirty.append(e.pos) 
          dirty.append(b.pos) 
          bullets.remove(b) 
          enemies[x].remove(e) 
    for i in bunkers: 
     if b.pos.colliderect(i.pos): 
      screen.blit(background,(b.pos[0],b.pos[1]),b.pos) 
      dirty.append(b.pos) 
      i.health -= 1 
      bullets.remove(b) 
for b in bullets: 
    dirty.append(b.pos) 
    screen.blit(background,(b.pos[0],b.pos[1]),b.pos) 
    b.move() 
    screen.blit(b.image,b.pos) 
    dirty.append(b.pos) 

# Moves enemy at appropriate pace, drops bombs 
if enemyMoves == jump: 
    moveCounter += 1 
    if moveCounter == 20: 
     jump = jump/2 
     moveCounter = 0 
    enemyMoves = 0 
    for x in range(len(enemies)): 
     for e in enemies[x]: 
      dirty.append(e.pos) 
      screen.blit(background,(e.pos[0],e.pos[1]),e.pos) 
      e.move() 
      screen.blit(e.image,e.pos) 
      dirty.append(e.pos) 
else: 
    for x in range(len(enemies)): 
     for e in enemies[x]: 
      screen.blit(e.image,e.pos) 
    enemyMoves+=1 

pygame.display.update(dirty) 
clock.tick(30) 
print clock.get_fps() 

감사합니다 사전에 : 모든 것이 내 Mac에서 작동한다는 사실은 내가 그것을 내 코드에 문제가 아니라고 생각하지만, 단지의 경우, 여기 내 주요 루프입니다 수 있습니다!

+2

'pygame.display.update();와 함께 화면에 물건을 블리딩하는 것을 완전히 끝내는 코드를 더보고 싶습니다. – KodyVanRy

+0

작은 게임에서는 부분적으로 화면을 업데이트하지 않아도됩니다 - 나는 모든 화면을 다시 그릴 것이다. 어쩌면 Windows 부분 업데이트 문제가 있습니다. – furas

+0

언급 한 "특정 방향"은 무엇입니까? – SimonT

답변

0

어쩌면 당신은 시도해야합니다 :

을 :

dirty.append(Rect(x,y,width,height)) 

또는

dirty.append(pygame.Rect(x,y,width,height)) 

당신이 시도하고 사각형

대신

을 파이 게임을 스틱 그래서 pygame.display.update(dirty)에 사각형 목록을 전달하고있다 기억

dirty.append((x,y,width,height)) 
+0

Rectangle 대신 좌표 만 전달하는 인스턴스가 하나뿐입니다.이 인스턴스는 나타나지 않는 요소 중 하나가 아닙니다. – Hellomrcat

0

furas에 감사드립니다. 오류를 일으키는 부분적인 업데이트였습니다!

관련 문제