X

آموزش turtle در پایتون | ایجاد انیمیشن

حرکت لاکپشت به صورت پیوسته

برای ایجاد انیمیشن، باید لاکپشت را به صورت پیوسته و با وقفه‌های زمانی کوتاه حرکت دهیم. این کار با استفاده از حلقه‌ها و تابع time.sleep() از ماژول time امکان‌پذیر است. هدف این است که لاکپشت در یک مسیر مشخص حرکت کند و در هر مرحله، صفحه به‌روزرسانی شود تا حرکت آن به صورت روان دیده شود.

ابتدا ماژول‌های لازم را وارد می‌کنیم:

import turtle
import time

سپس، یک پنجره و یک لاکپشت ایجاد می‌کنیم:

wn = turtle.Screen()
wn.bgcolor("white")
t = turtle.Turtle()
t.speed(1)  # سرعت حرکت لاکپشت را روی کمترین مقدار می‌گذاریم تا حرکت آهسته و قابل مشاهده باشد

حالا می‌توانیم یک حلقه بسازیم که لاکپشت را به جلو حرکت دهد و در هر مرحله کمی صبر کند. برای مثال، یک حرکت خطی ساده:

for i in range(50):
    t.forward(10)  # حرکت به جلو به اندازه 10 پیکسل
    time.sleep(0.05)  # توقف به مدت 0.05 ثانیه

در این کد، لاکپشت 50 بار حرکت کوچک 10 پیکسلی انجام می‌دهد و بین هر حرکت، برنامه به مدت 0.05 ثانیه مکث می‌کند. این مکث باعث می‌شود حرکت لاکپشت به صورت فریم به فریم و پیوسته دیده شود.

برای ایجاد انیمیشن در یک مسیر غیرخطی، می‌توانیم حرکت و چرخش را ترکیب کنیم. به عنوان مثال، برای حرکت لاکپشت در یک مسیر دایره‌وار:

t.speed(5)
for i in range(36):  # 36 بار تکرار برای ایجاد یک دایره کامل (10 درجه در هر مرحله)
    t.forward(20)
    t.left(10)
    time.sleep(0.1)

در این مثال، لاکپشت 36 حرکت 20 پیکسلی انجام می‌دهد و پس از هر حرکت، 10 درجه به چپ می‌چرخد. با توقف 0.1 ثانیه‌ای بین هر مرحله، یک دایره به صورت انیمیشن رسم می‌شود.

یک تکنیک پیشرفته‌تر، استفاده از حلقه while برای ایجاد انیمیشن بی‌نهایت است. برای مثال، حرکت لاکپشت در یک مارپیچ:

t.speed(0)  # سریعترین سرعت برای رسم
step = 0
while step < 100:
    t.forward(step)  # طول قدم‌ها به تدریج افزایش می‌یابد
    t.right(90)
    step += 1
    time.sleep(0.05)

در این کد، لاکپشت در یک مسیر مربعی مارپیچی حرکت می‌کند. طول هر ضلع در هر دور افزایش می‌یابد و با مکث‌های کوتاه، حرکت به صورت انیمیشن نمایش داده می‌شود.

برای کنترل بهتر انیمیشن، می‌توانیم از تابع wn.update() استفاده کنیم. این تابع به‌روزرسانی پنجره را بعد از هر حرکت اجباری می‌کند و برای انیمیشن‌های پیچیده‌تر مناسب است. به یاد داشته باشید که برای استفاده بهینه، باید ترسیم خودکار را با turtle.tracer(0) خاموش کنید.

wn.tracer(0)  # خاموش کردن ترسیم خودکار
for i in range(100):
    t.forward(5)
    wn.update()  # به‌روزرسانی دستی صفحه
    time.sleep(0.03)
wn.tracer(1)  # روشن کردن مجدد ترسیم خودکار

با این روش، شما کنترل کامل بر روی زمان‌بندی و نمایش هر فریم از انیمیشن دارید.

پرسش و پاسخ این درس

برای ثبت پرسش ابتدا در سایت وارد شوید.

  • 1
  • 2
  • 3