import tkinter as tk
import math
class DroneAnimation:
def __init__(self, root):
self.root = root
self.canvas = tk.Canvas(root, width=600, height=500, bg='white')
self.canvas.pack()
# Drone properties
self.x, self.y = 300, 250
self.speed = 10
self.angle = 0
self.prop_radius = 20
self.drone_size = 40
# Draw Drone Elements
self.body = self.canvas.create_oval(self.x-self.drone_size, self.y-self.drone_size,
self.x+self.drone_size, self.y+self.drone_size, fill='gray')
# Propeller positions (4 corners)
self.props = []
prop_offsets = [(-30, -30), (30, -30), (-30, 30), (30, 30)]
for dx, dy in prop_offsets:
p_center = (self.x + dx, self.y + dy)
circle = self.canvas.create_oval(p_center[0]-self.prop_radius, p_center[1]-self.prop_radius,
p_center[0]+self.prop_radius, p_center[1]+self.prop_radius, outline='blue', width=2)
# 4 spokes
spokes = [self.canvas.create_line(p_center[0], p_center[1], p_center[0], p_center[1], fill='blue') for _ in range(4)]
self.props.append({'circle': circle, 'spokes': spokes, 'center': (dx, dy)})
# Key Bindings
self.root.bind("<KeyPress>", self.move)
# Start Animation
self.animate()
def animate(self):
self.angle += 15
# Update Propellers
for prop in self.props:
dx, dy = prop['center']
px, py = self.x + dx, self.y + dy
# Rotate spokes
for i, spoke in enumerate(prop['spokes']):
spoke_angle = self.angle + (i * 90)
end_x = px + self.prop_radius * math.cos(math.radians(spoke_angle))
end_y = py + self.prop_radius * math.sin(math.radians(spoke_angle))
self.canvas.coords(spoke, px, py, end_x, end_y)
# Move propeller circles
self.canvas.coords(prop['circle'], px-self.prop_radius, py-self.prop_radius,
px+self.prop_radius, py+self.prop_radius)
# Move body
self.canvas.coords(self.body, self.x-self.drone_size, self.y-self.drone_size,
self.x+self.drone_size, self.y+self.drone_size)
self.root.after(50, self.animate)
def move(self, event):
if event.keysym == 'w': self.y -= self.speed
elif event.keysym == 's': self.y += self.speed
elif event.keysym == 'a': self.x -= self.speed
elif event.keysym == 'd': self.x += self.speed
if __name__ == "__main__":
root = tk.Tk()
root.title("2D Drone Animation")
app = DroneAnimation(root)
root.mainloop()

Tidak ada komentar:
Posting Komentar