2017-06-16 45 views
0
import sys, pygame, math, random 
pygame.init() 

size = width, height = 1000,720 
x = 0 
y = 0 


house1x = 500 
house1y = 360 

house2x = 1470 
house2y = 360 


rock1x = -100 
rock1y = 300 


scrollx = 0 
scrolly = 0 
screen = pygame.display.set_mode(size, pygame.DOUBLEBUF) 
counter = 0 


playercollideRect = pygame.rect.Rect((0, 0), (75, 25)) 

house1collideRect = pygame.rect.Rect((0, 0), (870, 605)) 
house2collideRect = pygame.rect.Rect((0, 0), (870, 605)) 

rock1collideRect = pygame.rect.Rect((0, 0), (140, 100)) 



collision = False 


lastkey = 'down' 
animationdirection = 'down' 



playerimage = pygame.image.load("img/player/player0.png").convert_alpha() 
playerimagerect = playerimage.get_rect() 


house1image = pygame.image.load("img/structures/house1.png").convert_alpha() 
house1imagerect = house1image.get_rect() 

house2image = pygame.image.load("img/structures/house2.png").convert_alpha() 
house2imagerect = house2image.get_rect() 


rock1image = pygame.image.load("img/objects/rock1.png").convert_alpha() 
rock1imagerect = rock1image.get_rect() 



clock = pygame.time.Clock() 

screencolor = 0, 155, 20 
gamefont = pygame.font.SysFont("arial", 30) 

playeranimationdown = ['img/player/player1.png','img/player/player0.png','img/player/player2.png','img/player/player0.png'] 
playeranimationup = ['img/player/playerback1.png','img/player/playerback0.png','img/player/playerback2.png','img/player/playerback0.png'] 
playeranimationleft = ['img/player/playerleft1.png','img/player/playerleft0.png','img/player/playerleft2.png','img/player/playerleft0.png'] 
playeranimationright = ['img/player/playerright1.png','img/player/playerright0.png','img/player/playerright2.png','img/player/playerright0.png'] 


pygame.mixer.music.load('audio/music/ambient.mp3') 
pygame.mixer.music.set_endevent(pygame.constants.USEREVENT) 
pygame.mixer.music.play() 
pygame.display.set_caption('Game') 
pygame.event.set_allowed([pygame.QUIT, pygame.KEYDOWN, pygame.KEYUP]) 

colliders = [house1collideRect, house2collideRect, rock1collideRect] 
blitrects = [house1imagerect, house2imagerect, rock1imagerect] 
blitimages = [house1image, house2image, rock1image] 
blitypositions = [rock1y, house1y, house2y] 

while 1: 

    clock.tick(500) 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: sys.exit() 

    if y > 720-75-100: 
     y = 720-75-100 
     scrolly -= 1 
    if y < 0+75+100: 
     y = 0+75+100 
     scrolly += 1 
    if x > 1000-37-100: 
     x=1000-37-100 
     scrollx -=1 
    if x < 0+37+100: 
     x = 0+37+100 
     scrollx +=1 


    for collider in colliders: 
     if playercollideRect.colliderect(collider): 
      if lastkey == 'left': 
       x += 1 
      if lastkey == 'right': 
       x -= 1 
      if lastkey == 'up': 
       y += 1 
      if lastkey == 'down': 
       y -= 1 
      collision = True 
     else: 
      collision = False 


    keys = pygame.key.get_pressed() 
    if keys[pygame.K_UP] or keys[pygame.K_DOWN] or keys[pygame.K_LEFT] or keys[pygame.K_RIGHT]: 
     if keys[pygame.K_UP]: 
      y -= 1 

      if not collision == True: 
       playerimage = pygame.image.load(playeranimationup[int(math.floor(counter/50))]).convert_alpha() 
       counter = (counter + 1) % 200 
      lastkey = 'up' 


     elif keys[pygame.K_DOWN]: 
      y += 1 
      if not collision == True: 
       playerimage = pygame.image.load(playeranimationdown[int(math.floor(counter/50))]).convert_alpha() 
       counter = (counter + 1) % 200 
      lastkey = 'down' 


     elif keys[pygame.K_RIGHT]: 
      x += 1 
      if not collision == True: 
       playerimage = pygame.image.load(playeranimationright[int(math.floor(counter/50))]).convert_alpha() 

       counter = (counter + 1) % 200 
      lastkey = 'right' 

     elif keys[pygame.K_LEFT]: 
      x -= 1 

      if not collision == True: 
       playerimage = pygame.image.load(playeranimationleft[int(math.floor(counter/50))]).convert_alpha() 

       counter = (counter + 1) % 200 
      lastkey = 'left' 




    playerimagerect.centerx = x 
    playerimagerect.centery = y 


    house1imagerect.centerx = house1x+scrollx 
    house1imagerect.centery = house1y+scrolly 

    house2imagerect.centerx = house2x+scrollx 
    house2imagerect.centery = house2y+scrolly 



    playercollideRect.midbottom = playerimagerect.midbottom 

    house1collideRect.midbottom = house1imagerect.midbottom 
    house2collideRect.midbottom = house2imagerect.midbottom 

    rock1collideRect.midbottom = rock1imagerect.midbottom 


    realx = x-scrollx 
    realy = y-scrolly 



    for image, imagerect, imageypos in blitimages, blitrects, blitypositions: 
     if realy < imageypos: 
      screen.blit(playerimage, playerimagerect) 
      screen.blit(image, imagerect) 
     if realy > imageypos: 
      screen.blit(image, imagerect) 
      screen.blit(playerimage, playerimagerect) 

     if realy == imageypos: 
      screen.blit(image, imagerect) 
      screen.blit(playerimage, playerimagerect) 





    label = gamefont.render(str('FPS: '+str(clock.get_fps())), 1, (255,255,0)) 
    screen.blit(label, (50, 50)) 

    pygame.display.flip() 
    screen.fill(screencolor) 

這是代碼的一個小項目,我的工作,但由於某種原因,我得到這個錯誤:爲什麼我得到一個錯誤? Pygame中的blit

File "C:\Users\Isaac\Desktop\python kick\game\game.py", line 186, in <module> 
screen.blit(image, imagerect) 
TypeError: invalid destination position for blit 

對我的問題的任何見解?我一直在測試和搜索很長一段時間。

+2

你只是簡單地使用'Screen()。blit()'錯誤。第二個參數應該是一個兩元組對。第一個元素是圖像的_ ** x ** _位置的正整數,第二個元素應該是圖像的_ ** y ** _位置。我建議[閱讀更多關於如何正確使用Pygame官方文檔的函數](https://www.pygame.org/docs/ref/surface.html#pygame.Surface.blit)。 –

+0

@ChistianDean謝謝!我用zip()修復了這個問題 – Qwerty

+1

如果你在函數或代碼片段中有錯誤,那麼請在該函數/代碼片段周圍建立一個簡短的[mcve]來演示錯誤或問題。幾乎沒有理由發佈100多行代碼。 –

回答

1

它應該是screen.blit(image, (x coordinate, y coordinate))你傳遞的矩形不是座標。如果你想使用矩形中的座標,他們是self.rect.xself.rect.y

+0

謝謝我修復了它 – Qwerty

相關問題