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.

1 Beğeni

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
1 Beğeni

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.

1 Beğeni

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

1 Beğeni

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.

1 Beğeni

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

1 Beğeni