Python ve Tkinter kullanarak bir asteroit sürümü oluşturmak için çalışıyorum. Sol veya sağ ok tuşuna basıldığında, geminin dönmesi gerekir. Gemi Tkinter tuvalinde bir üçgen. Üçgenin koordinatlarını ayarlamak için formülü kullanarak sorun yaşıyorum. Günahla ilgili bir şey olduğuna inanıyorum çünkü tam olarak emin değilim. Şimdiye kadar gemi için diğeri oyun için iki tane dersim var. Gemi sınıfında anahtar presler için geri arama yöntemleri var. Herhangi bir yardım büyük takdir edilecektir. Teşekkürler.Python'daki bir çokgeni Tkinter Canvas'da nasıl döndürürüm?
Gemi Sınıf
import math
class Ship:
def __init__(self,canvas,x,y,width,height):
self.canvas = canvas
self.x = x - width/2
self.y = y + height/2
self.width = width
self.height = height
self.x0 = self.x
self.y0 = self.y
self.x1 = self.x0 + self.width/2
self.y1 = self.y0-self.height
self.x2 = self.x0 + self.width
self.y2 = self.y0
self.ship = self.canvas.create_polygon((self.x0, self.y0, self.x1, self.y1, self.x2, self.y2), outline="white", width=3)
def changeCoords(self):
self.canvas.coords(self.ship,self.x0, self.y0, self.x1, self.y1, self.x2, self.y2)
def rotateLeft(self, event=None):
# Should rotate one degree left.
pass
def rotateRight(self, event=None):
# Should rotate one degree right.
self.x0 = self.x0 -1
self.y0 = self.y0 - 1
self.x1 = self.x1 + 1
self.y1 = self.y1 + 1
self.x2 = self.x2 - 1
self.y2 = self.y2 + 1
self.changeCoords()
Oyun Sınıf tüm
from Tkinter import *
from ship import *
class Game:
def __init__(self, gameWidth, gameHeight):
self.root = Tk()
self.gameWidth = gameWidth
self.gameHeight = gameHeight
self.gameWindow()
self.ship = Ship(self.canvas, x=self.gameWidth/2,y=self.gameHeight/2, width=50, height=50)
self.root.bind('<Left>', self.ship.rotateLeft)
self.root.bind('<Right>', self.ship.rotateRight)
self.root.mainloop()
def gameWindow(self):
self.frame = Frame(self.root)
self.frame.pack(fill=BOTH, expand=YES)
self.canvas = Canvas(self.frame,width=self.gameWidth, height=self.gameHeight, bg="black", takefocus=1)
self.canvas.pack(fill=BOTH, expand=YES)
asteroids = Game(600,600)
Yardımlarınız için çok teşekkür ederim. Sen bir bilgin ve beyefendisin. Tam olarak aradığım şey bu. – Sam
Oldukça hoş geldiniz. – JAB