from gamedata.objects.base import BaseObject class Player(BaseObject): def __init__(self,x,y,game): self.sprite = game.sprite_lib["icon.png"] super().__init__(x,y,game,self.sprite.get_width(),self.sprite.get_height()) tileset = game.gameloop.findname("TilesetRenderer")[0] self.collisionrects = tileset.rects self.tilew = tileset.solidtilew self.tileh = tileset.solidtileh self.speed = 300 self.stepsize = 20 self.gravity = 1500 self.maxgravity = 800 self.jump = -600 self.vertical = self.maxgravity self.hrest = 0 self.vrest = 0 def step(self): keys = self.game.inputs["keys"] hor=keys["right"]["pressed"]-keys["left"]["pressed"] # Si je suis sur le sol self.onground = False if self.checkcollisions(0,1): self.onground = True self.vertical=0 else: self.vertical+=self.gravity*self.game.dt self.vertical = min(self.maxgravity,self.vertical) if self.checkcollisions(0,-1): self.vertical = max(0,self.vertical) # Se cogne au plafond self.jumped = False if self.onground: if 00: if hor>=self.tilew: diffx = self.tilew elif hor<=-self.tilew: diffx = -self.tilew else: diffx = hor rect = self.checkcollisions(diffx,0) if rect: hor = 0 self.hrest = 0 hstopped = True if diffx>0: self.rect.right = rect.left else: self.rect.left = rect.right else: hor-=diffx self.rect[0]+=diffx vstoped = False ver = int(movey+self.vrest) self.vrest = movey+self.vrest-ver while abs(ver)>0: if abs(ver)>self.tileh: diffy = self.tileh*abs(ver)/ver else: diffy = ver rect = self.checkcollisions(0,diffy) if rect: vstopped = True ver = 0 self.vrest = 0 if diffy>0: self.rect.bottom = rect.top else: self.rect.top = rect.bottom else: ver-=diffy self.rect[1]+=diffy def checkcollisions(self,offx,offy): temprect = self.rect.copy() temprect[0]+=offx temprect[1]+=offy result = False for rect in self.collisionrects: if temprect.colliderect(rect): result = rect break return result