Tampilkan postingan dengan label Animasi. Tampilkan semua postingan
Tampilkan postingan dengan label Animasi. Tampilkan semua postingan

Senin, 28 November 2016

Source Code Program Java Animasi Frame Bitmap

Saya bagikan source code bahasa pemrograman Java yang diperoleh dari internet yang menganimasikan gambar-gambar bitmap (1 pose 1 file).

import java.awt.geom.AffineTransform;
import javax.imageio.ImageIO;
import java.net.URL;
import java.awt.*;
import javax.swing.*;
import java.io.*;

public class AnimatedFramesDemo extends JPanel {
   static final int CANVAS_WIDTH = 640;
   static final int CANVAS_HEIGHT = 480;
   public static final String TITLE = "Animated Frame Demo";
 
   private String[] imgFilenames = {
         "images/pacman_1.png", "images/pacman_2.png", "images/pacman_3.png"};
   private Image[] imgFrames;
   private int currentFrame = 0;
   private int frameRate = 5;
   private int imgWidth, imgHeight;
   private double x = 100.0, y = 80.0;
   private double speed = 8;          
   private double direction = 0;      
   private double rotationSpeed = 1;  
   private AffineTransform transform = new AffineTransform();
 
   public AnimatedFramesDemo() {
      loadImages(imgFilenames);
      Thread animationThread = new Thread () {
         public void run() {
            while (true) {
               update();
               repaint();
               try {
                  Thread.sleep(1000 / frameRate);
               } catch (InterruptedException ex) { }
            }
         }
      };
      animationThread.start();
      setPreferredSize(new Dimension(CANVAS_WIDTH, CANVAS_HEIGHT));
   }
 
   private void loadImages(String[] imgFileNames) {
      int numFrames = imgFileNames.length;
      imgFrames = new Image[numFrames];  
      URL imgUrl = null;
      for (int i = 0; i < numFrames; ++i) {
         imgUrl = getClass().getClassLoader().getResource(imgFileNames[i]);
         if (imgUrl == null) {
            System.err.println("Couldn't find file: " + imgFileNames[i]);
         } else {
            try {
               imgFrames[i] = ImageIO.read(imgUrl); 
            } catch (IOException ex) {
               ex.printStackTrace();
            }
         }
      }
      imgWidth = imgFrames[0].getWidth(null);
      imgHeight = imgFrames[0].getHeight(null);
   }
 
   public void update() {
      x += speed * Math.cos(Math.toRadians(direction));
      if (x >= CANVAS_WIDTH) {
         x -= CANVAS_WIDTH;
      } else if (x < 0) {
         x += CANVAS_WIDTH;
      }
      y += speed * Math.sin(Math.toRadians(direction));
      if (y >= CANVAS_HEIGHT) {
         y -= CANVAS_HEIGHT;
      } else if (y < 0) {
         y += CANVAS_HEIGHT;
      }
      direction += rotationSpeed;  
      if (direction >= 360) {
         direction -= 360;
      } else if (direction < 0) {
         direction += 360;
      }
      ++currentFrame; 
      if (currentFrame >= imgFrames.length) {
         currentFrame = 0;
      }
   }
 
   public void paintComponent(Graphics g) {
      super.paintComponent(g);
      setBackground(Color.WHITE);
      Graphics2D g2d = (Graphics2D) g;
      transform.setToIdentity();
      transform.translate(x - imgWidth / 2, y - imgHeight / 2);
      transform.rotate(Math.toRadians(direction),
            imgWidth / 2, imgHeight / 2);
      g2d.drawImage(imgFrames[currentFrame], transform, null);
   }
 
   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            JFrame frame = new JFrame(TITLE);
            frame.setContentPane(new AnimatedFramesDemo());
            frame.pack();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
         }
      });
   }
}

Berikut ini file-file bitmap yang digunakan progam tersebut :



 [[ file tugas unduh di sini ]] selamat mengerjakan. Mata Kuliah Pemrograman Game, Kampus Universitas Respati Indonesia Jakarta Timur.

Senin, 31 Oktober 2016

Source Code Balon (Bakal Calon) Game Balap Mobil

Berikut source code program Java untuk bakal calon game balap mobil.

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

public class AnimasiGrafik extends JFrame {
    final int LEBAR = 900, TINGGI = 650;
    double kecepatan = .5;
    final int UP = 0, RIGHT = 1, DOWN = 2, LEFT = 3;
    int arah = UP;

    //menentukan koordinat kotak area hijau sekeliling window
    Rectangle kiri = new Rectangle(0, 0, LEBAR / 9, TINGGI);
    Rectangle kanan = new Rectangle((LEBAR / 9) * 8, 0, LEBAR / 9, TINGGI);
    Rectangle atas = new Rectangle(0, 0, LEBAR, TINGGI / 9);
    Rectangle bawah = new Rectangle(0, (TINGGI / 9) * 8, LEBAR, TINGGI / 9);
    Rectangle tengah = new Rectangle((int) ((LEBAR / 9) * 2.5), 
                                     (int) ((TINGGI / 9) * 2.5),
                                     (int) ((LEBAR / 9) * 5), (TINGGI / 9) * 4);

    //menentukan koordinat kotak penghalang
    Rectangle rintangan1 = new Rectangle(LEBAR / 2, (int) ((TINGGI / 9) * 7), 
                                         LEBAR / 10, TINGGI / 9);
    Rectangle rintangan2 = new Rectangle(LEBAR / 3, (int) ((TINGGI / 9) * 5), 
                                         LEBAR / 10, TINGGI / 4);
    Rectangle rintangan3 = new Rectangle(2 * (LEBAR / 3),
                                         (int) ((TINGGI / 9) * 5), 
                                         LEBAR / 10, TINGGI / 4);
    Rectangle rintangan4 = new Rectangle(LEBAR / 3, TINGGI / 9, 
                                         LEBAR / 30, TINGGI / 9);
    Rectangle rintangan5 = new Rectangle(LEBAR / 2, (int) ((TINGGI / 9) * 1.5), 
                                         LEBAR / 30, TINGGI / 4);
    Rectangle finish = new Rectangle(LEBAR / 9, (TINGGI / 2) - TINGGI / 9, 
                                     (int) ((LEBAR / 9) * 1.5), TINGGI / 70);
    Rectangle pemain1 = new Rectangle(LEBAR / 9, TINGGI / 2, LEBAR / 30, 
                                      LEBAR / 30);

    public AnimasiGrafik() {
        super("Balap Mobil Kotak");
        setSize(LEBAR, TINGGI);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);

        GerakPemain1 m1 = new GerakPemain1();
        m1.start();
    }
    
    public void paint(Graphics g) {
        super.paint(g);
        //gambar kotak latar
        g.setColor(Color.DARK_GRAY);
        g.fillRect(0, 0, LEBAR, TINGGI);
        //gambar garis
        g.setColor(Color.GREEN);
        Rectangle lineO = new Rectangle(LEBAR / 9, TINGGI / 2, 
                                        (int) ((LEBAR / 9) * 1.5) / 2, 
                                        TINGGI / 140);
        Rectangle lineI = new Rectangle(((LEBAR / 9) + 
                                        ((int) ((LEBAR / 9) * 1.5) / 2)),
                                        (TINGGI / 2) + (TINGGI / 10), 
                                        (int) ((LEBAR / 9) * 1.5) / 2, 
                                        TINGGI / 140);

        g.fillRect(kiri.x, kiri.y, kiri.width, kiri.height);
        g.fillRect(kanan.x, kanan.y, kanan.width, kanan.height);
        g.fillRect(atas.x, atas.y, atas.width, atas.height);
        g.fillRect(bawah.x, bawah.y, bawah.width, bawah.height);
        g.fillRect(tengah.x, tengah.y, tengah.width, tengah.height);
        g.fillRect(rintangan1.x, rintangan1.y, rintangan1.width, 
                   rintangan1.height);
        g.fillRect(rintangan2.x, rintangan2.y, rintangan2.width, 
                   rintangan2.height);
        g.fillRect(rintangan3.x, rintangan3.y, rintangan3.width, 
                   rintangan3.height);
        g.fillRect(rintangan4.x, rintangan4.y, rintangan3.width, 
                   rintangan4.height);
        g.fillRect(rintangan5.x, rintangan5.y, rintangan5.width, 
                   rintangan5.height);

        //gambar garis start
        g.setColor(Color.WHITE);
        g.fillRect(lineO.x, lineO.y, lineO.width, lineO.height);
        g.fillRect(lineI.x, lineI.y, lineI.width, lineI.height);

        //gambar garis finish
        g.setColor(Color.YELLOW);
        g.fillRect(finish.x, finish.y, finish.width, finish.height);

        //gambar mobil
        g.setColor(Color.BLUE);
        g.fill3DRect(pemain1.x, pemain1.y, pemain1.width, pemain1.height, true);
    }

    private class GerakPemain1 extends Thread implements KeyListener {
        public void run() {
            addKeyListener(this);
            while (true) {
                try {
                    repaint();
                    if (pemain1.intersects(kiri)
                        || pemain1.intersects(kanan)
                        || pemain1.intersects(atas)
                        || pemain1.intersects(bawah)
                        || pemain1.intersects(rintangan1)
                        || pemain1.intersects(rintangan2)
                        || pemain1.intersects(rintangan4) 
                        || pemain1.intersects(rintangan5)) {
                        kecepatan = -4;
                    }

                    if (pemain1.intersects(tengah)) {
                        kecepatan = -2.5;
                    }

                    if (kecepatan <= 5) {
                        kecepatan += .2;
                    }

                    if (arah == UP) {
                        pemain1.y -= (int) kecepatan;
                    }

                    if (arah == DOWN) {
                        pemain1.y += (int) kecepatan;
                    }

                    if (arah == LEFT) {
                        pemain1.x -= (int) kecepatan;
                    }

                    if (arah == RIGHT) {
                        pemain1.x += (int) kecepatan;
                    }

                    Thread.sleep(75);
                } catch (Exception e) {
                    break;
                }
            }
        }

        public void keyPressed(KeyEvent event) {
        }

        public void keyReleased(KeyEvent event) {
        }

        public void keyTyped(KeyEvent event) {
            if (event.getKeyChar() == 'a') {
                arah = LEFT;
            }
            if (event.getKeyChar() == 's') {
                arah = DOWN;
            }
            if (event.getKeyChar() == 'd') {
                arah = RIGHT;
            }
            if (event.getKeyChar() == 'w') {
                arah = UP;
            }
        }
    }

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

Rabu, 12 Oktober 2016

Tugas Mata Kuliah Pemodelan dan Animasi 3D Sesi 4 #20161012

  1. Buatlah model 3D sebagai berikut : mangkok bakso, botol kecap & saos, mangkuk sambal dengan tutupnya, sepasang sumpit, menggunakan modifier Lathe. Buatlah semirip mungkin dengan bentuk dan ukuran aslinya.
  2. Integrasikan hasil soal no. 1 dengan model kios + meja + kursi yang pernah dibuat di tugas sebelumnya.
  3. Buatlah model 3D seperti gambar berikut dengan menggunakan array (klik gambar untuk memperbesar.
Tugas ini dikumpulkan sehari sebelum kuliah mata kuliah ini di Universitas Respati Indonesia, Kampus A, Bambu Apus Jakarta Timur. Melebihi batas waktu tidak akan dinilai. Selamat mengerjakan.