2016-10-07 3 views
0

처음으로 파이 게임에서 뭔가를 만드는 ... 나는 이미지의 여러 인스턴스를 생성하고 맨 아래로 스크롤하려고합니다. 웬일인지 원래의 imagestays는 다른 imagemove 동안 예상대로 넣어. 나는 또한 화면의 맨 왼쪽 1/4 또는 가장 오른쪽 부분에 이미지의 인스턴스를 생성하려고 시도하고있다. 내 이미지는 왼쪽에만 나타납니다. 내 gameDisplay는 1150x500 픽셀입니다. 내 코드를 수정할 수있는 방법에 대한 정보는 크게 감사하겠습니다.파이 게임에서 이미지 블 리팅

여기 내가 사용하는 방법입니다 :

def gameHighScore(): 
    points=0 
    guesses=0 
    time=0 

    balloons= pygame.image.load("balloons.png") 

    objects=[] 

    for i in range (4): 
     xpos= random.randrange(0, round(display_width/4)) or random.randrange(round((3/4)*display_width), display_width) 
     #object generated at start height 400, random xpos with a speed -i*2 
     o=Balloons(balloons, 400, xpos ,-i*2)   
     objects.append(o) 


    gamehs=True 
    while gamehs: 
     for event in pygame.event.get(): 
      if event.type==pygame.QUIT: 
       pygame.quit() 
       quit() 
      if event.type==pygame.KEYDOWN: 
       if event.key==pygame.K_SPACE: # space for continue 
        paused=False 
        gameTimer.start() 
       elif event.key==pygame.K_q: #q for quit 
        pygame.quit() 
        quit() 



     for o in objects: 
      gameDisplay.fill(BLACK) 
      message_to_screen("HIGH SCORE", WHITE, y_displace=-100, size="large") 
      message_to_screen(" You scored " +str(points) +" points", WHITE, y_displace=0, size="medium") 
      message_to_screen("in " +str(time) +" after " +str(guesses) +" guesses", WHITE, y_displace=50, size="medium") 
      button("Play (space bar)", 300,400,250,50, GRAY, BLUE, action ="continue") 
      button("Quit (Q)", 600,400,250,50, GRAY, BLUE, action ="quit") 
     for o in objects: 
      o.move() 
      gameDisplay.blit(o.image, o.pos) 


     pygame.display.update() 
     clock.tick(30)    #static screen, no need for high fps 

그리고 여기에 객체를 이동 클래스의 :

class Balloons: 

    def __init__(self, image, height, xpos, speed): 
     self.speed=speed 
     self.image=image 
     self.xpos=xpos 
     self.pos=image.get_rect().move(xpos, height)    #momve(x,y) change x to random 

    def move(self): 
     self.pos=self.pos.move(0, self.speed) 
     if self.pos.top< -200: 
      self.pos.bottom=800 

답변

1

있어 여러 가지 일이 일어나고은.

는 특히, 그들은 정수이기 때문에
xpos= random.randrange(0, round(display_width/4)) or random.randrange(round((3/4)*display_width), display_width) 

(3/4)

가 ZERO로 평가 ...이 줄을 잘못 몇 가지가 있습니다. 그러나 더 큰 문제는 당신이 생각하고있는 것을하지 않고있는 or의 사용입니다. or은 왼쪽의 첫 번째 표현식을 가져와 False가 아닌 한 사용합니다. randrange picking 0의 경우에만 False가되므로 오른쪽이 평가되지 않습니다. 당신이 for i in range(4)에 따라 속도를 할당하는 : 당신의 이미지 중 하나가 항상 머물러 이유에 대해서 ...

# pick a random position in a quarter-size of the screen. 
xpos = int(random.random() * display_width/4) 

# 50% chance of offsetting that position to the right quarter of the screen. 
if random.random() < .5: xpos += display_width * 3/4 

같은 것을 할 것입니다. 이미지 중 하나에 대한 i의 값은 0이므로 속도는 0이됩니다.

+1

파이썬 3 인 경우'3/4'는 0으로 평가되지 않습니다 (클래스가 상속하지 않기 때문에 믿을 수 있습니다). 목적). 또한, if-else-statement를하는 것이 더 명확하지 않습니까? 그런 다음 값을 두 번 지정할 필요가 없습니다. 그것은 단지 의견의 문제 일지 모르지만. 그렇지 않으면 위대한 대답, +1 –