Python Forum
Cant move object in game
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Cant move object in game
#1
Hi guys,
I am working on a "shooting game" where there are 2 players moving up and down and shooting. But i can not make moving single shots.
They are called "strela". "Strela" creates when i press "d" key and it is supposed to move to the right (or left).
I tried to move ammo (strela) with this command:
def pohyb_strela():
if janko==1:
platno.move(strela,+10,0)
pohyb_strela()

Where janko==1 is always true so it is cycled.
But it says that "strela" is not defined.
Please help. Thank you






import tkinter
velkost=20
pole=[]
pole2=[]
janko=1

def kolizia():
    if platno.coords(bublina_1)[2]>= platno.coords(bublina_2)[0] and platno.coords(bublina_1)[3]>= platno.coords(bublina_2)[1]:
        print("kolizia")
def b1_hore(udalost):
    platno.move(bublina_1,0,-10)
def posun_bublinu(udalost):
    klaves=udalost.keysym
    if platno.coords(bublina_1)[1]<=0:
        if klaves=="s":
            platno.move(bublina_1,0,+10)
        if klaves=="d":        
            strelba()
    elif platno.coords(bublina_1)[3]>=600:
        if klaves=="w":
            platno.move(bublina_1,0,-10)
        if klaves=="d":        
            strelba()     
    else:
        if klaves=="s":
            platno.move(bublina_1,0,+10)
        if klaves=="w":
            platno.move(bublina_1,0,-10)
        if klaves=="d":        
            strelba() 
    if platno.coords(bublina_2)[1]<=0:
        if klaves=="Down":
            platno.move(bublina_2,0,+10)
        if klaves=="Left":        
            strelba2()    
    elif platno.coords(bublina_2)[3]>=600:
        if klaves=="Up":
            platno.move(bublina_2,0,-10)
        if klaves=="Left":        
            strelba2()
    else:
        if klaves=="Down":
            platno.move(bublina_2,0,+10)
        if klaves=="Left":        
            strelba2()
        if klaves=="Up":
            platno.move(bublina_2,0,-10)

def strelba():
    sx=platno.coords(bublina_1)[0]
    sy=platno.coords(bublina_1)[1]
    strela=platno.create_rectangle(sx,sy,sx+15,sy+15,fill="yellow")
    pole.append(strela)
    pohyb_strela()
def strelba2():
    sx2=platno.coords(bublina_2)[0]
    sy2=platno.coords(bublina_2)[1]
    strela2=platno.create_rectangle(sx2,sy2,sx2+15,sy2+15,fill="green")
    pole2.append(strela2)
def pohyb_strela():
    if janko==1:
        platno.move(strela,+10,0)
        pohyb_strela()
         
   
okno=tkinter.Tk()
okno.title("Strielacka")    
platno=tkinter.Canvas(okno, height=600, width=600, bg="lightgray")
platno.pack()
bublina_1=platno.create_rectangle(60-velkost/2,150-velkost/2,60+velkost/2, 150+velkost/2,fill="red")
bublina_2=platno.create_rectangle(240-velkost/2,150-velkost/2,240+velkost/2, 150+velkost/2,fill="blue")

platno.bind_all("<Key>", posun_bublinu)

okno.mainloop()
Reply
#2
Functions can't see inside each other. If you want two functions to use the same variable, you have to do it explicitly. When you call poyhb_strella from strelba, you need to pass strella as a parameter. That will have to be defined in poyhb_strella's def statement. There's more on defining functions here.

I would do this with classes, though, especially if you are using a GUI. There are some basic class tutorials on this site.
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  How to make tkinter object move endlessly JacobTroubler 2 4,638 Dec-25-2019, 01:29 AM
Last Post: woooee
  AttributeError: 'tuple' object has no attribute 'move' senfik99 2 4,025 Feb-26-2019, 12:42 PM
Last Post: stullis

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020