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