Pygame platform collision problemi

sprite kodu

class Skeleton(pg.sprite.Sprite):

    def __init__(self,x,y,game):
        pg.sprite.Sprite.__init__(self)
        self.image=imageload("Skeleton/ide/skide1.png").convert_alpha()
        self.rect=self.image.get_rect(topleft=(x,y))
        self.direction="left"
        self.onground=False
        #------*Animation counters*------
        self.WC=0
        self.IC=0
        self.AC=0
        self.HC=0
        #---------------*END*----------------------
        self.Health = 100
        self.last_update=pg.time.get_ticks()
        self.animation=False
        self.attack=False
        #------*Hitbox*------
        self.skhitbox = rect(self.rect.centerx-15,self.rect.y+15,20,self.rect.height)
        self.wphitbox = rect(self.rect.centerx,self.rect.centery-45,40,74)
        self.Phitbox = rect(self.rect.centerx-200,self.rect.y-10,475,80)
        self.state="ide"
        self.event="None"
        self.xvel = 0
        self.yvel = 0
    def Hitbox(self):
        self.skhitbox = rect(self.rect.centerx-15,self.rect.y+15,20,56)
        self.Phitbox = rect(self.rect.centerx-200,self.rect.y-10,475,80)
        if self.direction=="left":
            self.wphitbox= rect(self.rect.centerx-35,self.rect.centery-45,40,74)
            self.xvel=-2
        else:
            self.wphitbox=rect(self.rect.centerx-5,self.rect.centery-45,40,74)
            self.xvel=2

    def update(self, player):
        if self.Health <=0:
            self.kill()
            exp = Explosive(self.rect.center,"large")
            all_sprites.add(exp)
            all_sprites.remove(self)
            Enemys.remove(self)

        if not self.onground:

            self.yvel += 0.35

            # Falling speed limit
            if self.yvel > 100:
                self.yvel = 100.00
        self.Hitbox()
        if player.rect.colliderect(self.Phitbox):
            if player.rect.x < self.rect.centerx-40:
                self.direction="left"
                
                if self.event == "None":
                    self.state="walk"
                    
                else:
                    self.state="ide"
                    self.xvel=0


                    
                
            elif player.rect.x > self.rect.centerx+10:
                self.direction="right"
                
                if self.event == "None":
                    self.state="walk"
                    
                else:
                    self.state="ide"
                    self.xvel=0
                    

            else:
                self.state="ide"
                self.xvel=0
        else:
            self.state="ide"
            self.xvel=0

        if player.rect.colliderect(self.wphitbox):
            if self.event == "None":
                self.event="attack"
                self.AC=0
            if self.attack and player.form == "Human":
                player.Health-=25
                self.attack=False




        if self.state == "ide" and self.event == "None":

                #self.animate(self.anims["ide"+self.direction],90)

                anim=self.anims["ide"+self.direction]

                now = pg.time.get_ticks()
                if now - self.last_update > 90:
                    self.last_update = now

                    if self.IC >= len(anim)-1:
                        self.IC = 0




                    else:
                        self.image = anim[self.IC]
                        self.IC += 1
        elif self.state == "walk" and self.event == "None":

                #self.animate(self.anims["walk"+self.direction],60)

                anim=self.anims["walk"+self.direction]

                now = pg.time.get_ticks()
                if now - self.last_update > 45:
                    self.last_update = now

                    if self.WC >= len(anim)-1:
                        self.WC = 0




                    else:
                        self.image = anim[self.WC]
                        self.WC += 1

        elif self.state == "ide" and self.event == "hit":

                #self.animate(self.anims["hit"+self.direction],35,state="attack")
                anim=self.anims["hit"+self.direction]
                now = pg.time.get_ticks()
                if now - self.last_update > 35:
                    self.last_update = now

                    if self.HC >= len(anim)-1:
                        self.HC = 0
                        self.event="None"




                    else:
                        self.image = anim[self.HC]
                        self.HC += 1

        elif self.state == "ide" and self.event == "attack":

                #self.animate(self.anims["attack"+self.direction],90,state="ide")
                anim=self.anims["attack"+self.direction]
                now = pg.time.get_ticks()
                if now - self.last_update > 60:
                    self.last_update = now
                    if self.AC==9:
                        self.attack=True
                    else:
                        self.attack=False
                    if self.AC >= len(anim)-1:
                        self.AC = 0
                        self.state="ide"
                        self.event="None"



                    else:
                        self.image = anim[self.AC]
                        self.AC += 1
        self.rect.left += self.xvel
        # do x-axis collisions
        self.collide(self.xvel,0)
        self.onground=False
        self.rect.top += self.yvel
        self.collide(0,self.yvel)


    def collide(self, xvel,yvel):
        block_hit_list = pg.sprite.spritecollide(self, Platforms, False,collided2)
        for p in block_hit_list:
                if xvel > 0:
                    if p.rect.colliderect(self.skhitbox):
                        self.yvel=7



                    
                if xvel < 0:
                    if p.rect.colliderect(self.skhitbox):
                        
                        self.yvel=7
                if  yvel > 0:

                    self.rect.bottom = p.rect.top
                    self.yvel = 0
                    self.onground = True


                if  yvel < 0:
                    self.rect.top = p.rect.bottom

collided2

def collided2(sprite, other):
    """Check if the hitboxes of the two sprites collide."""
    return other.rect.colliderect(sprite.skhitbox)

hata: düşmanın yvel değerinin sıfır olmasına rağmen titremesi
normalde titrememesi lazım

nasıl çözerim bu srounu sebebini bulamadım acaba ayrıca rect kullanmammı collision için?

bilen yok mu? neden titrediğini çözdüm ama eğer o kodu çıkarırsam da anlamı olmuyor

Neymiş sebebi?

hitbox kullanmam bu soruna sebebiyet veriyor ama anlamadım niye aynı yukseklik rect ile