Ich hatte angefangen ein kleiner Fußballspiel zu programmieren, wo man mit Pfeiltasten bzw. WASD seine Spieler bewegen kann. mit einem Spieler funktioniert das auch soweit, aber wennn ich ihn nach links, linksoben oder linksunten bewege zieht er (warum auch immer) graue Linien hinter sich.
Hier der Code:
Code: Alles auswählen
import Tkinter as tk
from player import *
pressLeft,pressRight,pressUp,pressDown = False,False,False,False
posX,posY = 100,100
running = False
ball = False
main = tk.Tk()
# Bilder
img_pitchBG = tk.PhotoImage(file='img/pitch.gif')
# GUI
main.state('zoomed')
pitch = tk.Canvas(main, width=1000, height=600)
pitch.create_image(500, 300, image=img_pitchBG)
pitch.place(x=100, y=50, width=1000, height=600)
player1 = Player(pitch, '#ff0000', True, 100, 100)
def up(e):
global pressUp
pressUp = True
def down(e):
global pressDown
pressDown = True
def left(e):
global pressLeft
pressLeft = True
def right(e):
global pressRight
pressRight = True
def r_up(e):
global pressUp
pressUp = False
def r_down(e):
global pressDown
pressDown = False
def r_left(e):
global pressLeft
pressLeft = False
def r_right(e):
global pressRight
pressRight = False
def update():
global posX,posY
if pressLeft:
posX -= 1
if pressRight:
posX += 1
if pressUp:
posY -= 1
if pressDown:
posY += 1
p.setCoords(posX, posY)
main.after(1, update)
def start():
global running,ball
ball = not(ball)
player1.setBall(ball)
if running:
return
running = True
update()
main.bind('<KeyPress-w>', up)
main.bind('<KeyPress-s>', down)
main.bind('<KeyPress-a>', left)
main.bind('<KeyPress-d>', right)
main.bind('<KeyRelease-w>', r_up)
main.bind('<KeyRelease-s>', r_down)
main.bind('<KeyRelease-a>', r_left)
main.bind('<KeyRelease-d>', r_right)
button_start = tk.Button(main, text='Starten', command=start)
button_start.pack()
main.mainloop()
Code: Alles auswählen
class Player:
def __init__(self, pitch, color, team, x, y):
self.pitch = pitch
r = 8
self.id_circle = self.pitch.create_oval(x-r, y-r, x+r, y+r, fill=color, outline='#000000', width=1)
self.x = x
self.y = y
def setCoords(self, x, y):
self.pitch.coords(self.id_circle, x-r, y-r, x+r, y+r)
self.x = x
self.y = y
def setBall(self, ball):
if ball:
self.pitch.itemconfig(self.id_circle, outline='#eeeeee', width=4)
r = 12
self.pitch.coords(self.id_circle, self.x-r, self.y-r, self.x+r, self.y+r)
else:
self.pitch.itemconfig(self.id_circle, outline='#000000', width=1)
r = 8
self.pitch.coords(self.id_circle, self.x-r, self.y-r, self.x+r, self.y+r)
Die Methode setBall ist dazu da das Aussehen des Players zu ändern, wenn er den Ball bekommt [setBall(True)]. dann sollte er einen grauen rand bekommen und größer werden. Bei setBall(False) wird er wieder kleiner und bekommt den schewarzen Rahmen zurück. Das Klappt auch soweit.
Wenn er aber gerade den grauen Rahmen hat und ich ihn nach links bewege zieht er diesen grauen Strich hinter sich.
Woher kommt das und wie kann ich das wieder beheben?
Danke, Grüße raiminator