2017-02-16 5 views
0

Ich arbeite an einem Projekt, mit dem Sie eine Art von Ninja auswählen und sich bewegen und Feinde angreifen können. Ich habe die Ninja-Auswahl gemacht, aber ich bin mir nicht sicher, wie ich alle Objekte bewegen soll, die den Ninja erschaffen. Ich habe mehrere Objekte in eine c.move Funktion setzen, aber ich habe diesen Fehler:Ich versuche, alle Objekte auf einmal zu bewegen, ohne Erfolg

c.move(self.hair,self.hair2,self.head,self.neck,self.chest,self.leg1,self.leg2,self.arm1,self.arm2,0,-5) 
    File "C:\Users\mrden\AppData\Local\Programs\Python\Python35\lib\tkinter\__init__.py", line 2431, in move 
    self.tk.call((self._w, 'move') + args) 
_tkinter.TclError: wrong # args: should be ".2417470327664 move tagOrId xAmount yAmount 

Hier ist mein Beispielcode:

#Ninja Game 
from tkinter import * 
root = Tk() 
c=Canvas(width=800,height=600) 
c.pack() 
d = "" 
class Ninja: 
    def __init__(self,clan,): 
     self.clan = clan 
     if self.clan == "Uchiha": 
     self.hair = c.create_polygon(52,485,52,452,99,452,99,485) 
     self.head=c.create_rectangle(55,455,95,495,fill="white") 
     self.hair2= c.create_polygon(74,452,83,477,99,452,fill="black") 
     if self.clan == "Uzamaki": 
     self.hair = c.create_polygon(52,485,52,452,99,452,99,485,fill="#FF3232") 
     self.head=c.create_rectangle(55,455,95,495,fill="white") 
     self.neck = c.create_rectangle(59,495,91,499) 
     self.chest= c.create_rectangle(55,499,95,555) 
     self.leg1 = c.create_rectangle(55,555,71,599) 
     self.leg2 = c.create_rectangle(78,555,95,599) 
     self.arm1=c.create_rectangle(42,499,55,555) 
     self.arm2=c.create_rectangle(95,499,108,555) 
    def move(self): 
    if d == "U": 
     if self.clan == "Uzamaki": 
     c.move(self.hair,self.head,self.neck,self.chest,self.leg1,self.leg2,self.arm1,self.arm2,0,-5) 
     if self.clan == "Uchiha": 
     c.move(self.hair,self.hair2,self.head,self.neck,self.chest,self.leg1,self.leg2,self.arm1,self.arm2,0,-5) 


n = Ninja("Uchiha") 

def move_p(event): 


    global d 
    if event.keysym == "Up": 
    d = "U" 
    n.move() 

c.bind_all("<KeyPress-Up>",move_p) 

Antwort

0

Die Leinwand ermöglicht es Ihnen, um Tags zu Artikeln hinzufügen, so dass du ganze Gruppen von Gegenständen als eine behandeln kannst. Erstellen Sie dazu ein Tag, fügen Sie jedem Element dieses Tag hinzu und verwenden Sie dann dieses Tag, wenn Sie das Element verschieben.

Zum Beispiel:

class Ninja: 
    def __init__(self,clan,): 
     self.clan = clan 
     self.name = "ninja %d" % id(self) 
     if self.clan == "Uchiha": 
      self.hair = c.create_polygon(52,485,52,452,99,452,99,485, tags=[self.name, "ninja"]) 
      self.head=c.create_rectangle(55,455,95,495,fill="white", tags=[self.name, "ninja"]) 
      self.hair2= c.create_polygon(74,452,83,477,99,452,fill="black", tags=[self.name, "ninja"]) 
     if self.clan == "Uzamaki": 
      self.hair = c.create_polygon(52,485,52,452,99,452,99,485,fill="#FF3232", tags=[self.name, "ninja"]) 
      self.head=c.create_rectangle(55,455,95,495,fill="white", tags=[self.name, "ninja"]) 
     self.neck = c.create_rectangle(59,495,91,499, tags=[self.name, "ninja"]) 
     self.chest= c.create_rectangle(55,499,95,555, tags=[self.name, "ninja"]) 
     self.leg1 = c.create_rectangle(55,555,71,599, tags=[self.name, "ninja"]) 
     self.leg2 = c.create_rectangle(78,555,95,599, tags=[self.name, "ninja"]) 
     self.arm1=c.create_rectangle(42,499,55,555, tags=[self.name, "ninja"]) 
     self.arm2=c.create_rectangle(95,499,108,555, tags=[self.name, "ninja"]) 

    def move(self): 
     if d == "U": 
      c.move(self.name, 0, -5) 

Wenn Sie auch jeden ninja einen gemeinsamen Tag geben (zB: "ninja"), könnten Sie alle Ninjas auf einmal bewegen. Die Tags sind eine Liste, so dass Sie sowohl ein generisches als auch ein spezifisches Tag für diesen Ninja angeben können.

Zum Beispiel:

c.create_polygon(..., tags=[self.name, "ninja"]) 

Um alle Ninjas auf einmal

c.move("ninja", 0, -5) 

zu bewegen, um eine spezifische ninja zu bewegen:

c.move(n.name, 0, -5) 
+0

@ Brian Oakley Dank! –

Verwandte Themen