Je travaille pour créer une version d'astéroïdes en utilisant Python et Tkinter. Lorsque vous appuyez sur la touche fléchée gauche ou droite, le bateau doit pivoter. Le navire est un triangle sur la toile Tkinter. J'ai du mal à trouver une formule pour ajuster les coordonnées du triangle. Je crois que cela a quelque chose à voir avec le péché et le cos, même si je ne suis pas vraiment sûr. Jusqu'à présent, j'ai deux classes une pour le navire et l'autre pour le jeu. Dans la classe de navire, j'ai des méthodes de rappel pour les touches. Toute aide serait grandement appréciée. Merci.Comment faire pivoter un polygone en python sur un Tkinter Canvas?
classe navire
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()
Classe de jeu
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)
Merci beaucoup pour votre aide. Vous êtes un érudit et un gentleman. Ceci est exactement ce que je cherchais. – Sam
Vous êtes les bienvenus. – JAB