Pyro Man (pygame platformer)

zaten öyle

class Skeleton(pg.sprite.Sprite):
    def __init__(self,x,y,game):
        pg.sprite.Sprite.__init__(self)
        self.image=pg.image.load("Skeleton/ide/skide1.png").convert_alpha()
        self.rect=self.image.get_rect(topleft=(x,y))
        self.game=game
        self.direction="right"
        self.count = 0
        self.Health = 100
        self.last_update=pg.time.get_ticks()
        self.wphitbox=pg.Rect(self.rect.centerx,self.rect.centery-45,46,74)
        self.Phitbox= pg.Rect(self.rect.centerx,self.rect.y,225,65)
        self.state="ide"
        self.anims={"walkright":from_folder("Skeleton/walk/"),
                    "walkleft":[pg.transform.flip(image,True,False) for image in from_folder("Skeleton/walk/")],
                    "deadright":from_folder("Skeleton/dead/"),
                    "deadleft":[pg.transform.flip(image,True,False) for image in from_folder("Skeleton/dead/")],
                    "hitright":from_folder("Skeleton/hit/"),
                    "hitleft":[pg.transform.flip(image,True,False) for image in from_folder("Skeleton/hit/")],
                    "attackright":from_folder("Skeleton/attack/"),
                    "attackleft":[pg.transform.flip(image,True,False) for image in from_folder("Skeleton/attack/")],
                    "ideright":from_folder("Skeleton/ide/"),
                    "ideleft":[pg.transform.flip(image,True,False) for image in from_folder("Skeleton/ide/")],
                    "reactright":from_folder("Skeleton/react/"),
                    "reactleft":[pg.transform.flip(image,True,False) for image in from_folder("Skeleton/react/")],
                    }
    def update(self, *args):
        if self.state == "ide":
            animstate=self.animStart(self.anims["ide"+self.direction],90)

        elif self.state == "hit":
            animstate=self.animStart(self.anims["hit"+self.direction],35,state="ide")


        



        
    def animStart(self,anim: list,FR: int,state=""):
        now = pg.time.get_ticks()
        if now - self.last_update > FR:
            self.last_update = now

            if self.count == len(anim)-1:
                self.count = 0
                if state:
                   self.state=state

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

Sınıf niteliği olarak, örnek niteliği değil.

bir video atiyimmi sorunu göstermek için

yapamıyorum çünkü pygame ekranı aktif değil o kod varken,ama eğer örnek niteliği olursa örnek oluşturulduğu zaman ekran zaten aktif

https://cdn.discordapp.com/attachments/692044868637294652/701042869930164304/2020-04-18_15-10-53.mkv

Ekranı aktif ettikten sonra da yapabilirsiniz, Skeleton.anims = { ... } şeklinde.


Bunu dikkate aldınız mı:

sıkıntı o olduğunu nedense düşünmüyorum

yaptım aha oldu tek yaptığım

for hit in Bullethitlist:
     hit.state="hit"
     hit.count=0

birden fazla örnek var

Dediğim gibi bunları Health değişkenini bir property yapıp setter içinde hallederseniz daha düzenli bir kod sahip olursunuz.

daha önce setter ve deletter falan duydum ama hiç bakmadım anlatabilirmisiniz
nasıl kullanılıyor

Sıkıntı olmaz, instance.__dict__'te bulunamayan nitelikler instance.__class__.__dict__'te aranıyor.

https://medium.com/@sddkal/python-ve-oop-property-dekoratörleri-ile-çalışmak-82279a21f632

birde self.update metodu içinde anims sınıf değişkenine nasıl ulaşırım

Değişen bir şey olmuyor, self.anims şeklinde.

bir şey dicem anladım ama hangi işlemleri healthin içinde yaptırmalıyım

animasyonumu diyorsunuz ?

Animasyon ile alakalı işlemleri. Hasar alındığında animasyon değişmeyecek mi?

Şimdi düşündüm de can arttığında herhangi bir değişim olmayacaksa Healthı property yapmaya lüzum yok, take_damage diye bir metot da oluşturulabilir.

oda zaten var :smile:

şimdide başka bir sorun karakterin o anki animasyonunu flip ile çevirdiğimde yaklaşık 10 pixel geriye gidiyor