def update(self, ticktime, objlist, gravity = 1.0): self.isOnTheGround = False # + parce que +y vers le bas. 628 = 9.81 * 64 = 1g en supposant que 64px = 1m self.movementVector = self.movementVector[0], self.movementVector[1] + 628 * (ticktime/1000.0) * gravity MovingObject.update(self, ticktime, objlist) for obj in objlist: if obj.__class__.__name__ == 'Room': for block in obj.roomBlocks: if gravity > 0 and block.__class__.__name__ == 'Wall' and (block.rect.collidepoint(self.rect.right-5, self.rect.bottom+2) or block.rect.collidepoint(self.rect.left+5, self.rect.bottom+2)): self.isOnTheGround = True if gravity < 0 and block.__class__.__name__ == 'Wall' and (block.rect.collidepoint(self.rect.right-5, self.rect.top-2) or block.rect.collidepoint(self.rect.left+5, self.rect.top-2)): self.isOnTheGround = True if self.isColliding(block): if block.__class__.__name__ == 'Wall': if (block.rect.collidepoint(self.rect.right, self.rect.bottom) or block.rect.collidepoint(self.rect.left, self.rect.bottom)) and not (block.rect.collidepoint(self.rect.right, self.rect.centery) or block.rect.collidepoint(self.rect.left, self.rect.centery)): self.rect.bottom = block.rect.top self.movementVector = self.movementVector[0], 0 elif block.rect.collidepoint(self.rect.centerx, self.rect.top): self.rect.top = block.rect.bottom self.movementVector = self.movementVector[0], 0 elif block.rect.collidepoint(self.rect.right, self.rect.centery): self.rect.right = block.rect.left self.movementVector = 0, self.movementVector[1] elif block.rect.collidepoint(self.rect.left, self.rect.centery): self.rect.left = block.rect.right
def update(self, ticktime, objlist): self.__timesinceLastDirChange += ticktime / 1000.0 if self.__timesinceLastDirChange > self.scanningInterval: self.__timesinceLastDirChange = 0.0 # find the player player = None for obj in objlist: if obj.__class__.__name__ == 'Player': player = obj break if player is not None: # calculate the direction he is in playerDirection = pygame.math.Vector2( player.rect.centerx - self.rect.centerx, player.rect.centery - self.rect.centery) # normalize tempvec = pygame.math.Vector2( self.movementVector[0] + playerDirection.x, self.movementVector[1] + playerDirection.y) tempvec.scale_to_length(self.speed) self.changeVec((tempvec.x, tempvec.y)) MovingObject.update(self, ticktime, objlist) for obj in objlist: if obj.__class__.__name__ == 'Room': for block in obj.roomBlocks: if self.isColliding(block): if block.__class__.__name__ == 'Wall': if block.rect.collidepoint(self.rect.centerx, self.rect.bottom): self.rect.bottom = block.rect.top self.movementVector = self.movementVector[0], 0 elif block.rect.collidepoint( self.rect.centerx, self.rect.top): self.rect.top = block.rect.bottom self.movementVector = self.movementVector[0], 0 elif block.rect.collidepoint( self.rect.right, self.rect.centery): self.rect.right = block.rect.left self.movementVector = 0, self.movementVector[1] elif block.rect.collidepoint( self.rect.left, self.rect.centery): self.rect.left = block.rect.right
def __init__(self, position, animationFrames, animationFrameRate=3): MovingObject.__init__(self, position, animationFrames, animationFrameRate)
def addToVec(self, x, y): MovingObject.addToVec(self, x, y) self.animationFrames = self.flipList( aggregateAnim('sprites/mobs/', 'bat color-swap-purple'), (self.movementVector[0] > 0))
def changeVec(self, newVec): MovingObject.changeVec(self, newVec) self.animationFrames = self.flipList( aggregateAnim('sprites/mobs/', 'bat color-swap-purple'), (self.movementVector[0] > 0))