Пример #1
0
    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super(Viewport, cls).__new__(cls, *args, **kwargs)
            self = cls._instance
            self.pixelVect = Vect(0, 0)
            self.levelHeight = None
            self.hasMoved = False

        return cls._instance
Пример #2
0
    def update(self, msSinceLast):
        '''
        Overrides Sprite update
        '''
        if Viewport().hasMoved:
            self.rect.center = Viewport().convertPhysicalToPixelCoords(self.__physicalPosition)
            self.dirty = 1
            
        if self.hasPhysics:
            newPhysicalPosition = Vect(self.body.position.x,self.body.position.y)
            if newPhysicalPosition != self.physicalPosition:
                self.physicalPosition = newPhysicalPosition


        getVel = self.body.GetLinearVelocity()
        self.curVel = (getVel.x, getVel.y)
        if self.curVel[0] >= -2.0 and self.curVel[0] < 0.0:
            self.tryStop()
            self.animstate = Spaceman.STANDING_LEFT
        elif self.curVel[0] <= 2.0 and self.curVel[0] > 0.0:
            self.tryStop()
            self.animstate = Spaceman.STANDING_RIGHT
        elif self.curVel[0] > 2.0:
            if self.isOnGround():
                self.animstate = Spaceman.WALKING_RIGHT
            elif self.tryingToJump:
                self.animstate = Spaceman.JUMPING_RIGHT
            else:
                self.animstate = Spaceman.STANDING_RIGHT
        elif self.curVel[0] < -2.0:
            if self.isOnGround():
                self.animstate = Spaceman.WALKING_LEFT
            elif self.tryingToJump:
                self.animstate = Spaceman.JUMPING_LEFT
            else:
                self.animstate = Spaceman.STANDING_LEFT

        self.spriteIndex += (msSinceLast/33.0)
        if self.animstate == Spaceman.WALKING_RIGHT:
            self.image = self.spritesRight[int(self.spriteIndex%len(self.spritesRight))]
        elif self.animstate == Spaceman.WALKING_LEFT:
            self.image = self.spritesLeft[int(self.spriteIndex%len(self.spritesLeft))]
        elif self.animstate == Spaceman.JUMPING_RIGHT:
            index = int(self.spriteIndex%len(self.sprJumpingRight))
            if self.spriteIndex>len(self.sprJumpingRight)/2:
                index = len(self.sprJumpingRight)/2
            self.image = self.sprJumpingRight[index]
        elif self.animstate == Spaceman.JUMPING_LEFT:
            index = int(self.spriteIndex%len(self.sprJumpingLeft))
            if self.spriteIndex>len(self.sprJumpingLeft)/2:
                index = len(self.sprJumpingLeft)/2
            self.image = self.sprJumpingLeft[index]
        elif self.animstate == Spaceman.STANDING_RIGHT:
            self.image = ImageHandler()["standingRight"]
        elif self.animstate == Spaceman.STANDING_LEFT:
            self.image = ImageHandler()["standingLeft"]            
Пример #3
0
 def update(self, msSinceLast):
     '''
     Overrides Sprite update
     '''
     if Viewport().hasMoved:
         self.rect.center = Viewport().convertPhysicalToPixelCoords(self.__physicalPosition)
         self.dirty = 1
         
     if self.hasPhysics:
         newPhysicalPosition = Vect(self.body.position.x,self.body.position.y)
         if newPhysicalPosition != self.physicalPosition:
             self.physicalPosition = newPhysicalPosition
Пример #4
0
    def __init__(self,name):
        self.allObjects = pygame.sprite.LayeredDirty()
        bgimage = ImageHandler()[name]
        self.physicalSize = Vect(float(bgimage.get_width())/PIXELS_PER_METER,float(bgimage.get_height())/PIXELS_PER_METER)
        self.drawDebug = False

        world_bounds = Box2D.b2AABB()
        world_bounds.lowerBound = (0,0)
        world_bounds.upperBound = (self.physicalSize[0],self.physicalSize[1])
        doSleep = True
        self.physicsWorld = Box2D.b2World(world_bounds, GRAVITY, doSleep)
        self.listener = MyListener()
        self.listener.test = self
        self.physicsWorld.SetContactListener(self.listener)
        self.points=[]

        self.background = None
Пример #5
0
    def __init__(self,physicalPosition,physicsWorld,imageName,hasPhysics=True,isStatic=False,canRotate=True,userData=""):
        pygame.sprite.DirtySprite.__init__(self)
        self.image = ImageHandler()[imageName] # Returns a pygame surface

        width = self.image.get_width()
        height = self.image.get_height()
        self.rect = pygame.Rect(0,0,width,height)

        if not isinstance(physicalPosition, Vect):
            physicalPosition = Vect(*physicalPosition)
        self.physicalPosition = physicalPosition

        self.physicsWorld = physicsWorld
        self.hasPhysics = hasPhysics
        if self.hasPhysics:
            self._buildPhysics(width,height,canRotate,isStatic)
            self.body.SetUserData(userData)
Пример #6
0
    def update(self, msSinceLast):
        '''
        Overrides Sprite update
        '''
        if Viewport().hasMoved:
            self.rect.center = Viewport().convertPhysicalToPixelCoords(self.__physicalPosition)
            self.dirty = 1
            
        if self.hasPhysics:
            newPhysicalPosition = Vect(self.body.position.x,self.body.position.y)
            if newPhysicalPosition != self.physicalPosition:
                self.physicalPosition = newPhysicalPosition

            newRotation = self.body.angle
            if abs(newRotation - self.rotation) > 0.001:
                self.rotation = newRotation
                self.dirty = 1
                self.image = pygame.transform.rotate(self._image, self.rotation*(180.0/3.14159))
Пример #7
0
    def __init__(self,position,physicsWorld):
        pygame.sprite.DirtySprite.__init__(self)
        self.spriteSheetRight = ImageHandler()["walkingRight"] # Returns a pygame surface
        self.spriteSheetLeft = ImageHandler()["walkingLeft"] # Returns a pygame surface
        self.spriteSheetJumpR = ImageHandler()["jumpingRight"] # Returns a pygame surface
        self.spriteSheetJumpL = ImageHandler()["jumpingLeft"] # Returns a pygame surface
       
        self.curVel  = (0,0)

        sprite_height = 90
        sprite_width = 80

        self.rect = pygame.Rect(0,0,sprite_width,sprite_height)

        if not isinstance(position, Vect):
            physicalPosition = Vect(*position)
        self.physicalPosition = position

        self.physicsWorld = physicsWorld

        self.spritesRight = list()
        self.spritesLeft  = list()
        self.sprJumpingRight  = list()
        self.sprJumpingLeft  = list()
        self.sprStandingRight = ImageHandler()["standingRight"]
        self.sprStandingLeft = ImageHandler()["standingLeft"]

        for i in xrange(self.spriteSheetRight.get_width() // sprite_width):
            newSprite = pygame.Surface((sprite_width,sprite_height),pygame.SRCALPHA,32)
            area = pygame.Rect(i*sprite_width,0,sprite_width,sprite_height)
            newSprite.blit(self.spriteSheetRight, (0,0), area)
            newSprite.convert()
            self.spritesRight.append(newSprite)

        for i in xrange(self.spriteSheetLeft.get_width() // sprite_width):
            newSprite = pygame.Surface((sprite_width,sprite_height),pygame.SRCALPHA,32)
            area = pygame.Rect(i*sprite_width,0,sprite_width,sprite_height)
            newSprite.blit(self.spriteSheetLeft, (0,0), area)
            newSprite.convert()
            self.spritesLeft.append(newSprite)
        
        for i in xrange(20):
            newSprite = pygame.Surface((sprite_width,sprite_height),pygame.SRCALPHA,32)
            area = pygame.Rect(i*sprite_width,0,sprite_width,sprite_height)
            newSprite.blit(self.spriteSheetJumpR, (0,0), area)
            newSprite.convert()
            self.sprJumpingRight.append(newSprite)

        for i in xrange(20):
            newSprite = pygame.Surface((sprite_width,sprite_height),pygame.SRCALPHA,32)
            area = pygame.Rect(i*sprite_width,0,sprite_width,sprite_height)
            newSprite.blit(self.spriteSheetJumpL, (0,0), area)
            newSprite.convert()
            self.sprJumpingLeft.append(newSprite)


        self.spriteIndex = 0.0
        #self.image = self.spritesRight[int(self.spriteIndex)]
        self.image = ImageHandler()["standingRight"]

        self.hasPhysics = True
        self._buildPhysics(width=sprite_width/2.0,height=sprite_height,canRotate=False,isStatic=False)
        self.body.SetUserData("spaceman")

        self.animstate = Spaceman.STANDING_RIGHT

        self.touchingGround = 0
        self.tryingToJump = False
Пример #8
0
 def convertPhysicalToPixelCoords(self, physicalCoords):
     pixX = physicalCoords[0] * PIXELS_PER_METER - self.pixelVect.x
     pixY = PIXELS_PER_METER * self.levelHeight - self.pixelVect.y - physicalCoords[
         1] * PIXELS_PER_METER
     return Vect(int(pixX), int(pixY))
Пример #9
0
 def convertPixelsToPhysicalCoords(self, pixelCoords):
     physX = (pixelCoords[0] + self.pixelVect.x) / PIXELS_PER_METER
     physY = (PIXELS_PER_METER * self.levelHeight - pixelCoords[1] -
              self.pixelVect.y) / PIXELS_PER_METER
     return Vect(physX, physY)
Пример #10
0
            self.hasMoved = False

        return cls._instance

    def convertPixelsToPhysicalCoords(self, pixelCoords):
        physX = (pixelCoords[0] + self.pixelVect.x) / PIXELS_PER_METER
        physY = (PIXELS_PER_METER * self.levelHeight - pixelCoords[1] -
                 self.pixelVect.y) / PIXELS_PER_METER
        return Vect(physX, physY)

    def convertPhysicalToPixelCoords(self, physicalCoords):
        pixX = physicalCoords[0] * PIXELS_PER_METER - self.pixelVect.x
        pixY = PIXELS_PER_METER * self.levelHeight - self.pixelVect.y - physicalCoords[
            1] * PIXELS_PER_METER
        return Vect(int(pixX), int(pixY))

    def move(self, vect):
        self.pixelVect += vect
        self.hasMoved = True


if __name__ == "__main__":
    vp = Viewport()
    vp.levelHeight = 60
    vp.pixelVect += Vect(30 * PIXELS_PER_METER, 30 * PIXELS_PER_METER)
    test = Vect(30, 30)
    a = vp.convertPhysicalToPixelCoords(test)
    test2 = vp.convertPixelsToPhysicalCoords(a)
    print "Test: ", test
    print "a:    ", a
    print "Test2:", test2