AWT (Abstract Window Toolkit) ব্যবহার করে Java-তে Thread এবং Timer এর মাধ্যমে Smooth Animation পরিচালনা করা সম্ভব। এই ধরনের অ্যানিমেশন সাধারণত একটি নির্দিষ্ট সময়ে গ্রাফিক্স বা কম্পোনেন্টের অবস্থান পরিবর্তন করতে সাহায্য করে। অ্যানিমেশনটি তৈরির জন্য আপনি Thread বা Timer ব্যবহার করতে পারেন, যার মাধ্যমে একটি সময়সূচী অনুযায়ী কম্পোনেন্টের অবস্থান বা অন্যান্য গুণ পরিবর্তিত হয়।
1. Thread ব্যবহার করে Smooth Animation:
Thread ব্যবহার করে অ্যানিমেশন তৈরি করতে, একটি run() মেথডের মধ্যে কম্পোনেন্টের অবস্থান ধীরে ধীরে পরিবর্তন করতে হবে, এবং এটির জন্য Thread.sleep() ব্যবহার করা যেতে পারে যাতে অ্যানিমেশনটি একটি নির্দিষ্ট গতি বজায় রাখে।
উদাহরণ:
import java.awt.*;
import java.awt.event.*;
public class SmoothAnimationWithThread extends Frame implements Runnable {
private int x = 50; // Initial X position
private int y = 50; // Initial Y position
private boolean movingRight = true;
public SmoothAnimationWithThread() {
setSize(400, 400);
setVisible(true);
setTitle("Smooth Animation with Thread");
Thread animationThread = new Thread(this);
animationThread.start(); // Start the animation thread
}
@Override
public void run() {
while (true) {
// Move object horizontally
if (movingRight) {
x += 2;
if (x >= getWidth() - 50) {
movingRight = false; // Change direction
}
} else {
x -= 2;
if (x <= 0) {
movingRight = true; // Change direction
}
}
repaint(); // Request to re-render the frame
try {
Thread.sleep(10); // Sleep to control the speed of animation
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.RED);
g.fillOval(x, y, 50, 50); // Draw a red circle
}
public static void main(String[] args) {
new SmoothAnimationWithThread();
}
}
ব্যাখ্যা:
run()মেথডে: একটি লুপের মধ্যেxএবংyঅবস্থান পরিবর্তন হচ্ছে, এবংrepaint()মেথডের মাধ্যমে কম্পোনেন্টটি পুনরায় আঁকা হচ্ছে।Thread.sleep(10): এটি একটি ছোট সময়ের জন্য থ্রেডকে বিরতি দেয়, যাতে অ্যানিমেশনটি মসৃণভাবে চলতে থাকে এবং দ্রুত না হয়।movingRight: এটি নির্দেশ করে যে অবজেক্টটি ডানদিকে যাচ্ছে বা বামে ফিরছে।
2. Timer ব্যবহার করে Smooth Animation:
Timer ব্যবহার করা অনেক সহজ এবং এতে অ্যানিমেশনটিকে নির্দিষ্ট সময় অন্তর অন্তর চালানো যায়। Timer একটি নির্দিষ্ট সময়ের পর ActionListener এর মাধ্যমে একটি অ্যাকশন (যেমন অবজেক্টের অবস্থান পরিবর্তন) কার্যকর করে।
উদাহরণ:
import java.awt.*;
import java.awt.event.*;
public class SmoothAnimationWithTimer extends Frame {
private int x = 50; // Initial X position
private int y = 50; // Initial Y position
private boolean movingRight = true;
public SmoothAnimationWithTimer() {
setSize(400, 400);
setVisible(true);
setTitle("Smooth Animation with Timer");
// Create a Timer to update animation every 10 milliseconds
Timer timer = new Timer(10, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (movingRight) {
x += 2;
if (x >= getWidth() - 50) {
movingRight = false;
}
} else {
x -= 2;
if (x <= 0) {
movingRight = true;
}
}
repaint(); // Request to re-render the frame
}
});
timer.start(); // Start the timer
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.RED);
g.fillOval(x, y, 50, 50); // Draw a red circle
}
public static void main(String[] args) {
new SmoothAnimationWithTimer();
}
}
ব্যাখ্যা:
Timer: এখানেTimerব্যবহার করা হয়েছে যেটি প্রতি 10 মিলিসেকেন্ড পর পর অ্যানিমেশন আপডেট করে।ActionListener:actionPerformed()মেথডের মধ্যে অবজেক্টের অবস্থান পরিবর্তিত হচ্ছে এবংrepaint()মেথড ব্যবহার করে স্ক্রীনে পুনরায় আঁকা হচ্ছে।
তুলনা:
| পদ্ধতি | Thread | Timer |
|---|---|---|
| কিভাবে কাজ করে | স্বতন্ত্র থ্রেড তৈরি করে এবং অ্যাকশন নিয়ন্ত্রণ করে | নির্দিষ্ট সময় অন্তর ActionListener এর মাধ্যমে কাজ করে |
| সহজতা | একটু জটিল, কারণ Thread.sleep() এবং থ্রেড পরিচালনা করতে হয় | সহজ এবং সরাসরি, কেবল একটি ActionListener ব্যবহার করা হয় |
| অ্যানিমেশন নিয়ন্ত্রণ | আরও বেশি নিয়ন্ত্রণ এবং ফাইন টিউনিং করা যায় | সহজ নিয়ন্ত্রণের জন্য ব্যবহৃত, তবে থ্রেডের তুলনায় কিছুটা কম কাস্টমাইজেবল |
- Thread ব্যবহারের মাধ্যমে আপনি অধিক কাস্টমাইজেশন এবং নির্ভরযোগ্যভাবে অ্যানিমেশন চালাতে পারেন।
- Timer ব্যবহারের মাধ্যমে আপনি দ্রুত এবং সহজে অ্যানিমেশন তৈরি করতে পারেন, বিশেষ করে যখন কম্প্লেক্স সিঙ্ক্রোনাইজেশন প্রয়োজন হয় না।
Read more