Actualizarea unui sprite individual într-o buclă de joc (Programare, Python, Clasa, Oop, Livewires)

Astrophe a intrebat.

Încerc să mut un singur sprite într-o buclă de joc care include două sprite. Am inclus spr1 în Bit.update() astfel încât dacă w este apăsat spr1.y -= 60. Cu alte cuvinte, sprite-ul este atribuit la self în speranța că doar spr1 va fi mutat atunci când w este apăsat. Cu toate acestea, în codul actual, apăsarea w deplasează atât spr1 și spr2. Cum pot să fac referire la și să actualizez doar spr1 în metoda de actualizare?

class Bit(games.Sprite):
    def update(self):
        if games.keyboard.is_pressed(games.K_w):
            self = spr1
            self.y -= 60

def main():
    spr1_image = games.load_image("spr1.png")
    spr1 = Bit(image = spr1_image,
                x = games.screen.width / 10,
                y = games.screen.height / 10)

    spr2_image = games.load_image("spr2.png")
    spr2 = Bit(image = spr2_image,
                x = games.screen.width * 9 / 10,
                y = games.screen.height * 9 / 10)

    games.screen.add(spr1)
    games.screen.add(spr2)

    games.screen.mainloop()

main()

Comentarii

  • Nu este clar ce încercați să faceți. Oricum, fiecare instanță se referă doar la ea însăși; apelarea self.y acționează doar asupra instanței care update este apelată. –  > Por Daniel Roseman.
  • Când apăs w, se mișcă ambele sprites. Încerc să scriu programul astfel încât apăsarea w să miște doar spr1. –  > Por Astrophe.
1 răspunsuri
cxw

EditatCele două sprites au comportamente diferite, așa că ai nevoie de clase diferite pentru ele.

  1. În Bit, , scoateți clasa self=spr1 linia și ar trebui să fie în regulă. În update(), , self este oricare este sprite-ul curent – spr1 sau spr2.
  2. În main, , se schimbă spr2 în

    spr2 = games.Sprite(image = spr2_image,    # <---- changed class
            x = games.screen.width * 9 / 10,
            y = games.screen.height * 9 / 10)
    

    Deoarece spr2 nu are nevoie să răspundă la tastatură, nu are nevoie de niciun comportament care games.Sprite nu este deja furnizat. Prin urmare, nu este nevoie să utilizați Bit pentru el.

(Avertisment: nu am folosit livewires, așa că s-ar putea să-mi scape ceva evident 🙂 )

Comentarii

  • Înțeleg ce ați făcut. Codul meu a fost simplificat pentru mai multă claritate. Există zeci de sprites în programul actual și sper să evit să scriu o clasă pentru fiecare. Vreau o modalitate (cum ar fi self=spr1) de a muta sprites individuali. –  > Por Astrophe.
  • Dacă există o modalitate mai bună depinde de modul în care v-ați structurat codul. În loc să modificați complet această întrebare, ați putea să adăugați o întrebare separată, care să facă legătura cu aceasta, cu mai multe detalii despre cazul de utilizare a mai multor sprite? Vă rugăm să includeți modul în care decideți ce sprite doriți să mutați. De exemplu, aveți o noțiune conform căreia un singur sprite este „sprite activ” la un moment dat? Vă mulțumim! –  > Por cxw.