2017-06-16 79 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

相关问题