Ir para conteúdo
Fórum Script Brasil
  • 0

Pygame TypeError: invalid destination position for blit


Fabio Curtis

Pergunta

Boa tarde a todos, o que há de errado no meu código abaixo?? porque estou tentando fazer aparecer o sprite que têm as imagens do personagem andando para direita, esquerda, para cima e para baixo, mas dá erro:

Traceback (most recent call last):

File "/home/fabio/Projetos/Turismo3D/Source/Game.py", line 141, in

class Game():

File "/home/fabio/Projetos/Turismo3D/Source/Game.py", line 227, in Game

screen.blit(av, av_pos)

TypeError: invalid destination position for blit

Script terminated.

Segue abaixo o script

import pygame, sys, os, math
from pygame.locals import *

# initializing pygame
pygame.init()

# setting up the screen
pygame.display.set_caption('Cenario')
size = width, height = 800, 600
screen = pygame.display.set_mode((800, 600), RESIZABLE, 32)
black = 0, 0, 0
window = pygame.display.set_mode((800, 600), RESIZABLE, 32)
    
# fliping the display
pygame.display.flip() 

# ############################################################################
# def load_image                                                             #
# 02/09/2008                                                                 #
#                                                                            #
# function that loads the images into memory                                 #
# ############################################################################

def load_image(name):
    
    fullname = os.path.join('imagens', name)
    
    try:
        image = pygame.image.load(fullname).convert_alpha()
    except pygame.error, message:
        print 'Cannot load image:', fullname
        raise SystemExit, message
    
    return image, image.get_rect()

# end load_image

# ############################################################################
# class Vector2                                                              #
# 02/16/2008                                                                 #
#                                                                            #
# class responsible for the creation of vectors for moving images in 2D      #
# ############################################################################

class Vector2(object):
    
    def __init__(self, x=0.0, y=0.0):
        self.x = x
        self.y = y
        
    def __str__(self):
        return "(%s, %s)"%(self.x, self.y)

    @staticmethod
    def from_points(P1, P2):
        return Vector2( P2[0] - P1[0], P2[1] - P1[1] )

    def get_magnitude(self):
        return math.sqrt( self.x**2 + self.y**2 )

    def normalize(self):
        magnitude = self.get_magnitude()
        self.x /= magnitude
        self.y /= magnitude

    # rhs stands for Right Hand Side
    def __add__(self, rhs):
        return Vector2(self.x + rhs.x, self.y + rhs.y)
   
    # vector subtraction method
    def __sub__(self, rhs):
        return Vector2(self.x - rhs.x, self.y - rhs.y)

    # vetcor negation
    def __neg__(self):
        return Vector2(-self.x, -self.y)
    
    # vector multiplication
    def __mul__(self, scalar):
        return Vector2(self.x * scalar, self.y * scalar)
    
    # vector division
    def __div__(self, scalar):
        return Vector2(self.x / scalar, self.y / scalar)

# end Vector2

# ############################################################################
# class Avatar                                                               #
# 02/09/2008                                                                 #
#                                                                            #
# class responsible for designing and move the sprite of avatar              #
# ############################################################################

class Avatar(pygame.sprite.Sprite):
    
    def __init__(self, startpos):
        pygame.sprite.Sprite.__init__(self)
        self.direction = 1
        self.image, self.rect = load_image('a.png')
        self.rect.centerx = startpos[0]
        self.rect.centery = startpos[1]
    
    # move the sprite
    def move(self,x,y):
        self.rect.move_ip(x,y)
        
        # detection of edges - não esta funcionando
        if self.rect.left < 0:
            self.direction = 1
        elif self.rect.right > width:
            self.direction = -1
        

# end Avatar

# ############################################################################
# class Maps                                                                 #
# 02/10/2008                                                                 #
#                                                                            #
# class responsible for designing the map                                    #
# ############################################################################

class Maps(pygame.sprite.Sprite):
    
    def __init__(self, startpos):
        pygame.sprite.Sprite.__init__(self)
        self.image, self.rect = load_image('maps.bmp')
        self.rect.centerx = startpos[0]
        self.rect.centery = startpos[1]

# end Maps

# ############################################################################
# class Game                                                                 #
# 02/09/2008                                                                 #
#                                                                            #
# class main                                                                 #
# ############################################################################

class Game():
    
    avatar = Avatar([0,0])
    maps = Maps([300,300])
    av_pos = Vector2(320, 240)
    
    clock = pygame.time.Clock()

    av = avatar.image.subsurface((0, 0), (32, 32))
    
    av_speed = 300.
    y = 0
        
    while 1:        
            
        # ensures that the program will not run more than 120fps
        clock.tick(120)         
        
        key_direction = Vector2(1, 1)
        
        # events of keyboard
        for event in pygame.event.get(): 
            if event.type == QUIT: 
                sys.exit(0) 
                
            # keyboard
            elif event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_LEFT:
                        
                        key_direction.x = -1
                        av = avatar.image.subsurface((64, y), (32, 32))
                        y = y + 32
                        if y == 128:
                            y = 0                        
                        
                        avatar.move(-1,0)
                    
                    if event.key == pygame.K_RIGHT:
                        
                        key_direction.x = +1
                        av = avatar.image.subsurface((32, y), (32, 32))
                        y = y + 32
                        if y == 128:
                            y = 0
                        
                        avatar.move(1,0)

                    if event.key == pygame.K_UP:
                        
                        key_direction.y = -1
                        av = avatar.image.subsurface((96, y), (32, 32))
                        y = y + 32
                        if y == 128:
                            y = 0
                        
                        avatar.move(0,-1)

                    if event.key == pygame.K_DOWN:
                        
                        key_direction.y = +1
                        av = avatar.image.subsurface((0, y), (32, 32))
                        y = y + 32
                        if y == 128:
                            y = 0
                        
                        avatar.move(0,1)
                    
                    if event.key == pygame.K_q:
                        sys.exit(0) 
            
            # mouse
            elif event.type == MOUSEBUTTONDOWN:
                # left
                if event.button == 1:
                    x,y = pygame.mouse.get_pos()
                    #avatar.move(x,y)
                # right
                #if event.button == 3:                    
        
        key_direction.normalize()
        
        # detection between objects
        #if avatar.rect.colliderect(maps.rect):                                    
               
        screen.fill(black)
        #screen.blit(avatar.image, avatar.rect)     
        screen.blit(av, av_pos)     
        screen.blit(maps.image, maps.rect)
        
        time_passed = clock.tick(30)
        time_passed_seconds = time_passed / 3000.0
        av_pos += key_direction * av_speed * time_passed_seconds
        pygame.display.update()
        pygame.display.flip()

# end Game  

# ############################################################################
# def main                                                                   #
# 02/09/2008                                                                 #
#                                                                            #
# main function                                                              #
# ############################################################################

def main():
    game = Game()

if __name__ == "__main__":
    main()
    
# end main

Muito Obrigado a todos

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...