Timer এবং Animation

এডাব্লিউটি (AWT) - Java Technologies

344

AWT (Abstract Window Toolkit) Java-তে GUI অ্যাপ্লিকেশন তৈরি করার জন্য ব্যবহৃত একটি টুলকিট। AWT-তে Timer এবং Animation তৈরি করার জন্য কিছু সাধারণ পদ্ধতি রয়েছে। এখানে Timer এবং Animation তৈরির মূল ধারণা এবং তাদের উদাহরণ দেওয়া হলো।

AWT-তে Timer ব্যবহার

AWT-তে Timer তৈরি করতে java.awt.event.Timer ক্লাস ব্যবহার করা হয় না, তবে আপনি javax.swing.Timer ক্লাস ব্যবহার করে একটি Timer তৈরি করতে পারেন। এটি একটি নির্দিষ্ট সময়ে বা নির্দিষ্ট পরিসরে একটি অ্যাকশন বা ইভেন্ট ট্রিগার করতে ব্যবহৃত হয়।

উদাহরণ: Timer ব্যবহার করা

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class TimerExample extends JFrame {
    private int counter = 0;
    private JLabel label;

    public TimerExample() {
        setTitle("AWT Timer Example");
        setSize(300, 200);
        setLayout(new FlowLayout());

        label = new JLabel("Counter: " + counter);
        add(label);

        // Timer Setup: 1000 ms (1 second) interval
        Timer timer = new Timer(1000, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                counter++;
                label.setText("Counter: " + counter);
            }
        });

        timer.start();  // Start the timer

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        new TimerExample();
    }
}

ব্যাখ্যা:

  • এখানে, একটি Timer প্রতি সেকেন্ডে counter ভেরিয়েবলটি বাড়িয়ে label-এ নতুন মান দেখাচ্ছে।
  • javax.swing.Timer ব্যবহার করা হয়েছে যেটি প্রতি নির্দিষ্ট সময়ে একটি ActionListener ট্রিগার করে।

AWT-তে Animation তৈরি করা

AWT-তে সরাসরি অ্যানিমেশন তৈরি করা একটু জটিল হতে পারে, তবে এটি করা সম্ভব। সাধারণত, অ্যানিমেশন তৈরির জন্য আপনাকে রিড্র-এর মাধ্যমে চলন্ত গ্রাফিক্স আঁকতে হবে এবং Timer ব্যবহার করে নিয়মিত সময়ে এটি আপডেট করতে হবে।

উদাহরণ: Animation তৈরি করা

import java.awt.*;
import java.awt.event.*;

public class AnimationExample extends Frame {
    private int x = 50;
    private int y = 50;
    private int xSpeed = 5;
    private int ySpeed = 5;

    public AnimationExample() {
        setTitle("AWT Animation Example");
        setSize(500, 500);
        setVisible(true);

        // Timer Setup: 20 ms interval for smooth animation
        Timer timer = new Timer(20, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // Move the circle
                x += xSpeed;
                y += ySpeed;

                // Bounce the circle if it hits the window borders
                if (x > getWidth() - 50 || x < 0) xSpeed = -xSpeed;
                if (y > getHeight() - 50 || y < 0) ySpeed = -ySpeed;

                repaint();  // Trigger the paint method to redraw
            }
        });

        timer.start();  // Start the timer
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.BLUE);
        g.fillOval(x, y, 50, 50);  // Draw a moving circle
    }

    public static void main(String[] args) {
        new AnimationExample();
    }
}

ব্যাখ্যা:

  • এখানে একটি চলন্ত বৃত্ত আঁকা হয়েছে যা উইন্ডোতে বাউন্স করছে।
  • Timer প্রতি 20 মিলিসেকেন্ডে x এবং y ভেরিয়েবল আপডেট করছে, এবং repaint() কল করে পরবর্তী ফ্রেম আঁকানো হচ্ছে।

AWT-তে Timer এবং Animation এর সুবিধা:

  1. সরাসরি প্রভাব: Timer এবং repaint() ব্যবহার করে চলন্ত অ্যানিমেশন তৈরি করা যায় যা গ্রাফিক্সের আপডেট এবং ইন্টারঅ্যাকশন সক্ষম করে।
  2. সাধারণ কোডিং: AWT তে অ্যানিমেশন এবং Timer-এর জন্য কোডিং তুলনামূলকভাবে সহজ, বিশেষত ছোট ছোট অ্যানিমেশন বা অটো-আপডেটের জন্য।

সীমাবদ্ধতা:

  1. সীমিত কার্যকারিতা: AWT-এর তুলনায় Swing বা JavaFX অ্যানিমেশন এবং গ্রাফিক্সের জন্য আরও শক্তিশালী এবং উন্নত বৈশিষ্ট্য প্রদান করে।
  2. পারফরমেন্স: সিম্পল অ্যানিমেশন তৈরির জন্য AWT ভালো, কিন্তু বড় এবং জটিল অ্যানিমেশন বা গ্রাফিক্সের জন্য এটি কম কার্যকরী।

AWT-তে Timer এবং Animation তৈরি করা সহজ, তবে যদি আপনি আরও আধুনিক বা উন্নত অ্যানিমেশন চান, তবে Swing বা JavaFX ব্যবহার করা উচিত।

Content added By

AWT (Abstract Window Toolkit) এ Timer ক্লাস ব্যবহার করে নির্দিষ্ট সময় পর পর কোনো কার্য সম্পাদন করা যায়। এটি সাধারণত গেম ডেভেলপমেন্ট, অ্যানিমেশন, বা নির্দিষ্ট সময় পর পর কোনো কাজ করার জন্য ব্যবহৃত হয়।

AWT-এ Timer ক্লাস মূলত দুটি প্রধান উপাদান দিয়ে কাজ করে:

  1. Timer: এটি একটি থ্রেড তৈরি করে এবং নির্দিষ্ট সময় পর পর কিছু কার্য সম্পাদন করতে পারে।
  2. TimerTask: এটি Runnable ইন্টারফেস ইমপ্লিমেন্ট করে, যার মধ্যে সেই কোড থাকে যেটি Timer এক্সিকিউট করবে।

AWT Timer ক্লাস এর ব্যবহার

  1. Timer একটি নির্দিষ্ট সময় পর পর TimerTask চালায়।
  2. এটি নির্দিষ্ট সময়ের মধ্যে নির্দিষ্ট অ্যাকশন সম্পাদন করতে সাহায্য করে।

প্রধান মেথডসমূহ:

  • start(): Timer শুরু করে।
  • stop(): Timer বন্ধ করে।
  • schedule(TimerTask task, long delay): একটি Task নির্দিষ্ট বিলম্বের পর চালাতে পারে।
  • scheduleAtFixedRate(TimerTask task, long delay, long period): একটি Task নির্দিষ্ট সময় পর পর একাধিকবার চালাতে পারে।

এডাব্লিউটি Timer উদাহরণ:

এখানে একটি উদাহরণ দেওয়া হলো যেখানে একটি Timer নির্দিষ্ট সময় পর পর একটি বার্তা কনসোলে প্রিন্ট করবে।

import java.awt.*;
import java.awt.event.*;
import java.util.Timer;
import java.util.TimerTask;

public class TimerExample {
    public static void main(String[] args) {
        Frame frame = new Frame("AWT Timer Example");

        // Create a label to show the timer message
        Label label = new Label("Timer Not Started");
        label.setBounds(50, 50, 200, 30);

        // Create a Timer object
        Timer timer = new Timer();

        // Create a TimerTask to be executed at fixed rate
        TimerTask task = new TimerTask() {
            int count = 0;
            @Override
            public void run() {
                count++;
                label.setText("Timer Count: " + count);
                System.out.println("Timer Count: " + count);
                if (count == 5) {
                    timer.cancel(); // Stop the timer after 5 counts
                    label.setText("Timer Stopped");
                }
            }
        };

        // Schedule the task to run every 1 second (1000 ms)
        timer.scheduleAtFixedRate(task, 0, 1000);

        // Set up the frame and add the label
        frame.add(label);
        frame.setSize(300, 150);
        frame.setLayout(null);
        frame.setVisible(true);
    }
}

ব্যাখ্যা:

  1. Timer এবং TimerTask ব্যবহার করা হয়েছে টাইমার তৈরি করার জন্য।
  2. scheduleAtFixedRate() মেথডের মাধ্যমে টাইমারটি প্রতি এক সেকেন্ড পর পর task রান করবে।
  3. count নামক একটি কনট্রোল ভেরিয়েবল দিয়ে আমরা টাইমারের কতবার কার্য সম্পাদিত হয়েছে তা ট্র্যাক করছি। ৫ বার হওয়ার পর টাইমারটি cancel() মেথড দিয়ে বন্ধ হয়ে যাবে।

Timer ক্লাস এবং AWT

AWT Timer ক্লাস সাধারণত নির্দিষ্ট সময়ে UI উপাদান বা অন্য কোনো কার্য সম্পাদন করতে সাহায্য করে। তবে AWT এ এটি UI থ্রেডের সাথে কাজ করে না, তাই UI উপাদান পরিবর্তন করতে হলে EventQueue.invokeLater() ব্যবহার করতে হতে পারে।

উল্লেখযোগ্য বিষয়:

  • AWT Timer মূলত GUI অ্যাপ্লিকেশনগুলোর জন্য সরাসরি টিমিং মেকানিজম সরবরাহ করে, তবে গতি বা নির্ভুলতার জন্য অন্যান্য লাইব্রেরি যেমন javax.swing.Timer বেশি ব্যবহার করা হয়।
Content added By

AWT (Abstract Window Toolkit) ব্যবহার করে একটি Simple Animation তৈরি করা যায়। আপনি একটি কম্পোনেন্টকে ধীরে ধীরে স্থানান্তরিত বা সরাতে পারেন, এবং এটি ফ্রেমে চলমান অবস্থায় দেখানো যাবে। সাধারণত, Thread ব্যবহার করা হয় অ্যানিমেশন পরিচালনার জন্য, যাতে আপনার অ্যানিমেশন স্লো বা দ্রুত চলতে পারে, এবং প্রতি ফ্রেমে কম্পোনেন্টের অবস্থান আপডেট করা যায়।

এখানে একটি Simple Animation উদাহরণ দেওয়া হল, যেখানে একটি বক্স ধীরে ধীরে এক জায়গা থেকে অন্য জায়গায় চলে যাবে:

উদাহরণ: Simple Animation তৈরি

import java.awt.*;
import java.awt.event.*;

public class SimpleAnimationExample extends Frame implements Runnable {
    
    int x = 50;  // বক্সের শুরু অবস্থান
    int y = 100;
    Thread animationThread;

    public SimpleAnimationExample() {
        // ফ্রেম সেটআপ
        setTitle("Simple Animation Example");
        setSize(500, 300);
        setVisible(true);

        // উইন্ডো ক্লোজের জন্য ইভেন্ট হ্যান্ডলিং
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                System.exit(0);
            }
        });

        // থ্রেড শুরু
        animationThread = new Thread(this);
        animationThread.start();
    }

    // অ্যানিমেশন লজিক
    public void run() {
        while (true) {
            // বক্সের অবস্থান আপডেট করা
            x += 2;  
            if (x > getWidth()) {
                x = 50;  // বক্সটি যদি ফ্রেমের ডান দিকে চলে যায়, তাহলে বক্সটি বামদিকে ফিরে আসবে
            }

            // অ্যানিমেশন রিফ্রেশ করা
            repaint();

            try {
                Thread.sleep(20);  // স্লো অ্যানিমেশন, 20 মিলিসেকেন্ড পর পর আপডেট হবে
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    // ফ্রেমে বক্স আঁকা
    public void paint(Graphics g) {
        g.setColor(Color.BLUE);  // বক্সের রঙ
        g.fillRect(x, y, 50, 50);  // বক্স আঁকার জন্য ফিল রেকটেঙ্গেল
    }

    public static void main(String[] args) {
        new SimpleAnimationExample();
    }
}

কোডের ব্যাখ্যা:

  1. Thread ব্যবহারের মাধ্যমে অ্যানিমেশন:
    • Thread তৈরি করা হয়েছে এবং run() মেথডে অ্যানিমেশন লজিক রাখা হয়েছে।
    • x ভেরিয়েবলটির মান প্রতি ফ্রেমে বাড়ানো হয়, যাতে বক্সটি স্ক্রিনে এক জায়গা থেকে অন্য জায়গায় চলে যায়।
    • Thread.sleep(20) দিয়ে অ্যানিমেশনটির গতি নিয়ন্ত্রণ করা হয়েছে, যাতে বক্সটি খুব দ্রুত না চলে যায়।
  2. paint() মেথড:
    • paint(Graphics g) মেথডে বক্সটি আঁকা হচ্ছে।
    • g.fillRect(x, y, 50, 50) এর মাধ্যমে ৫০x৫০ পিক্সেলের একটি নীল রঙের বক্স স্ক্রীনে আঁকা হচ্ছে।
  3. Frame এবং Window Listener:
    • setSize(500, 300) দিয়ে ফ্রেমের সাইজ নির্ধারণ করা হয়েছে।
    • addWindowListener() দিয়ে ফ্রেমটি ক্লোজ করার জন্য একটি ইভেন্ট হ্যান্ডলার যুক্ত করা হয়েছে।

ফলাফল:

  • যখন আপনি কোডটি রান করবেন, একটি নীল রঙের বক্স ধীরে ধীরে ফ্রেমের বাম থেকে ডান দিকে চলতে থাকবে। বক্সটি যখন স্ক্রীনের ডান দিকে পৌঁছাবে, তখন তা আবার বাম দিকে ফিরে আসবে এবং চলতে থাকবে।

এই কোডটি খুবই সিম্পল এবং প্রাথমিক অ্যানিমেশন তৈরি করে, কিন্তু আপনি আরো উন্নত অ্যানিমেশন তৈরি করতে বিভিন্ন ইফেক্ট যেমন রোটেশন, স্কেলিং বা অন্যান্য গ্রাফিকাল অ্যানিমেশন যোগ করতে পারেন।

Content added By

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() মেথড ব্যবহার করে স্ক্রীনে পুনরায় আঁকা হচ্ছে।

তুলনা:

পদ্ধতিThreadTimer
কিভাবে কাজ করেস্বতন্ত্র থ্রেড তৈরি করে এবং অ্যাকশন নিয়ন্ত্রণ করেনির্দিষ্ট সময় অন্তর ActionListener এর মাধ্যমে কাজ করে
সহজতাএকটু জটিল, কারণ Thread.sleep() এবং থ্রেড পরিচালনা করতে হয়সহজ এবং সরাসরি, কেবল একটি ActionListener ব্যবহার করা হয়
অ্যানিমেশন নিয়ন্ত্রণআরও বেশি নিয়ন্ত্রণ এবং ফাইন টিউনিং করা যায়সহজ নিয়ন্ত্রণের জন্য ব্যবহৃত, তবে থ্রেডের তুলনায় কিছুটা কম কাস্টমাইজেবল

  • Thread ব্যবহারের মাধ্যমে আপনি অধিক কাস্টমাইজেশন এবং নির্ভরযোগ্যভাবে অ্যানিমেশন চালাতে পারেন।
  • Timer ব্যবহারের মাধ্যমে আপনি দ্রুত এবং সহজে অ্যানিমেশন তৈরি করতে পারেন, বিশেষ করে যখন কম্প্লেক্স সিঙ্ক্রোনাইজেশন প্রয়োজন হয় না।
Content added By

Java AWT (Abstract Window Toolkit) ব্যবহার করে Custom Animation তৈরি করতে এবং Double Buffering ব্যবহার করার জন্য কিছু বিশেষ টেকনিক প্রয়োগ করা হয়, যা গ্রাফিক্সকে মসৃণ এবং কার্যকরীভাবে প্রদর্শন করতে সাহায্য করে। Double Buffering এমন একটি পদ্ধতি যা স্ক্রীনে অ্যানিমেশন বা গ্রাফিক্স আপডেট করার সময় Flicker বা ঝাপসা হওয়ার সমস্যা এড়ায়।

এখানে Custom Animation এবং Double Buffering এর উদাহরণ দেয়া হয়েছে:

1. Custom Animation with AWT

Java AWT-এ কাস্টম অ্যানিমেশন তৈরির জন্য সাধারণত paint() অথবা update() মেথড ব্যবহার করা হয়, যেখানে গ্রাফিক্স অবজেক্টগুলি আঁকা হয় এবং নিয়মিত আপডেট করা হয়।

import java.awt.*;
import java.awt.event.*;

public class CustomAnimationExample extends Frame {
    // Variables for animation
    private int x = 50;  // Initial position
    private int direction = 1;  // Direction of movement: 1 means right, -1 means left
    
    public CustomAnimationExample() {
        setTitle("Custom Animation Example");
        setSize(500, 500);
        setVisible(true);
        
        // Start animation
        new Thread(new AnimationRunnable()).start();
    }
    
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.RED);
        g.fillRect(x, 200, 50, 50);  // Draw the animated object (a red square)
    }

    // Animation thread that moves the square
    class AnimationRunnable implements Runnable {
        @Override
        public void run() {
            while (true) {
                // Update the position of the square
                x += direction * 5;
                
                // Reverse direction when the square hits the window boundaries
                if (x > getWidth() - 50 || x < 0) {
                    direction = -direction;
                }

                // Repaint the frame to update the animation
                repaint();
                
                try {
                    Thread.sleep(50);  // Control the speed of the animation
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) {
        new CustomAnimationExample();
    }
}

ব্যাখ্যা:

  • AnimationRunnable থ্রেডটি x পজিশন আপডেট করে এবং repaint() কল করে পরবর্তী ফ্রেমে অ্যানিমেশন রেন্ডার করার জন্য।
  • paint() মেথডে অ্যানিমেটেড অবজেক্ট (একটি লাল বর্গ) আঁকা হয়। এর পজিশন x মানের ভিত্তিতে পরিবর্তিত হয়।

2. Double Buffering in AWT

Double Buffering ব্যবহার করে আপনি গ্রাফিক্সের সকল পরিবর্তন একটি ব্যাকগ্রাউন্ড ইমেজে প্রথমে আঁকেন এবং তারপর সেগুলোকে ফ্রন্ট স্ক্রীনে রেন্ডার করেন। এর ফলে স্ক্রীনে আঁকার সময় ঝাপসা বা ফ্লিকারিং হ্রাস পায় এবং অ্যাপ্লিকেশন অনেক বেশি মসৃণ এবং কার্যকরীভাবে চলতে থাকে।

AWT-এ Double Buffering স্বাভাবিকভাবে setDoubleBuffered(true) দিয়ে সক্রিয় করা হয়। তবে, আপনি কাস্টম paint() মেথডে এটি আরও কার্যকরীভাবে ব্যবহার করতে পারেন।

Double Buffering Implementation Example

import java.awt.*;
import java.awt.event.*;

public class DoubleBufferingExample extends Frame {
    private int x = 50;  // Position for the animated object
    private int direction = 1;  // Direction of movement: 1 means right, -1 means left

    public DoubleBufferingExample() {
        setTitle("Double Buffering Example");
        setSize(500, 500);
        setVisible(true);
        
        // Start animation in a new thread
        new Thread(new AnimationRunnable()).start();
    }

    @Override
    public void paint(Graphics g) {
        // Call the superclass paint method for double buffering
        super.paint(g);
        
        // Create a buffered image for off-screen drawing
        Image offscreenImage = createImage(getWidth(), getHeight());
        Graphics offscreenGraphics = offscreenImage.getGraphics();
        
        // Perform drawing in the offscreen buffer
        offscreenGraphics.setColor(Color.RED);
        offscreenGraphics.fillRect(x, 200, 50, 50);  // Draw animated object

        // Now copy the off-screen image to the screen
        g.drawImage(offscreenImage, 0, 0, this);
    }

    class AnimationRunnable implements Runnable {
        @Override
        public void run() {
            while (true) {
                // Update the position of the square
                x += direction * 5;

                // Reverse direction when the square hits the window boundaries
                if (x > getWidth() - 50 || x < 0) {
                    direction = -direction;
                }

                // Repaint the frame to update the animation
                repaint();

                try {
                    Thread.sleep(50);  // Control the speed of the animation
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) {
        new DoubleBufferingExample();
    }
}

ব্যাখ্যা:

  1. BufferedImage ব্যবহার করে একটি অফ-স্ক্রীন ইমেজ তৈরি করা হয় যা গ্রাফিক্স আঁকার জন্য ব্যবহৃত হয়।
  2. paint() মেথডে:
    • প্রথমে অফ-স্ক্রীনে আঁকা হয় এবং তারপর g.drawImage() এর মাধ্যমে স্ক্রীনে রেন্ডার করা হয়।
  3. DoubleBuffering-এর মাধ্যমে আঁকার সময় ফ্লিকারিং বা ঝাপসা দূর হয়, কারণ স্ক্রীনে আঁকার পরিবর্তে প্রথমে অফ-স্ক্রীনে আঁকা হয়।

Key Takeaways:

  1. Custom Animation:
    • Thread ব্যবহার করে অবজেক্টের পজিশন আপডেট করুন এবং repaint() কল করুন।
    • paint() মেথডে গ্রাফিক্স আঁকার জন্য কাস্টম লজিক ব্যবহার করুন।
  2. Double Buffering:
    • এপ্লিকেশনটি ফ্লিকারিং ছাড়া এবং মসৃণভাবে কাজ করবে যদি আপনি Double Buffering ব্যবহার করেন।
    • createImage() এবং drawImage() ব্যবহার করে অফ-স্ক্রীন গ্রাফিক্স তৈরি করা এবং তারপর স্ক্রীনে রেন্ডার করা হয়।

এই পদ্ধতিগুলি আপনার AWT অ্যানিমেশন এবং গ্রাফিক্সের পারফরম্যান্স উন্নত করতে সাহায্য করবে, বিশেষ করে যখন অ্যানিমেশন বা দ্রুত পরিবর্তনশীল গ্রাফিক্সের সাথে কাজ করতে হবে।

Content added By
Promotion

Are you sure to start over?

Loading...