Miért nem működik ez a program Pythonban? Egy egyszerű játék lenne, amiben egy mozgo labdara kell kattintani.
A kattintasokon kivul ovis szinten működik, ez a sor viszont nem jó, azaz mindig igaz: if (a > x-20 & a < x+20) & (b > y-20 & b < y+20) :
Részletek (nem az egész script):
def kattint(event):
--- global x,y,dx,dy,v,pontszam,i,color
--- a=event.x
--- b=event.y
--- if (a > x-20 & a < x+20) & (b > y-20 & b < y+20):
------ pontszam+=100
------ if dx<0: dx=dx-v
------ if dx>0: dx=dx+v
------ if dy<0: dy=dy-v
------ if dy>0: dy=dy+v #gyorsul
------ i=randrange(8)
------ can.itemconfigure(ball,fill=color[i])
#
Ez a labda:
ball=can.create_oval(x-20,y-20,x+20,y+20,fill='red')
can.bind("<Button-1>",kattint)
Köszönöm a segitséget!
Nem nagyon szoktam pythonozne de nem a ball-
ra kéne bindelni?
Arra nem megy, ezt a hiba uzenetet kapom:
'int' object has no attribute 'bind'
Egyebkent igy kezdtem en is :)
Gyanítom tkinter - ezt elfelejtetted közölni. ;)
"de nem a ball-ra kéne bindelni?
...
Arra nem megy, ezt a hiba uzenetet kapom:
'int' object has no attribute 'bind'"
A create_oval metódus
* [link]
visszatérési értéke egy egész szám, ami azonosítja a rajzlapra kerülő objektumokat - így annak nem lesz bind metódusa.
A megoldást a Canvas objektum tag_bind metódusa
* [link]
fogja jelenteni:
ball = can.create_oval(x-20,y-20,x+20,y+20,fill='red')
can.tag_bind(ball,"<Button-1>",kattint)
annak megadhatod, hogy a rajzlapon belül melyik elemhez rendeljen eseményt, így nem kell ellenőrizned a koordinátáját.
Koszonom, vilagos, ki fogom probalni!!!
;)
Az & a bitenkénti ÉS operátora, amelynek a precedenciája kisebb az összeadás-kivonásnál, de nagyobb az összehasonlításnál ("kacsacsőr"). Tehát pl. a második zárójeled előbb az y-20 & b bitenkénti műveletet hajtja végre, utána az összehasonlításokat.
Írd át andre. És igazából felesleges a zárójelezés, ha három ÉS művelet van a sorodban, bár az olvashatóságot valóban segíti, és ezért nem haszontalan.
(Előző)
Mivel a labda kerek, érdemesebb a labda és a kattintás pozíciója közti távolságot:
r = math.sqrt(math.pow(a - x, 2) + math.pow(b - y, 2))
figyelembe venni:
if r < 20:
.. pontszam += 100
mert a topiknyitó hozzászólásban szereplő kód a kör köré illesztett négyzetet veszi figyelembe, így a négyzet sarkait is elfogadja
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!