Java编程之动画制作

我们知道Java可以实现很多的功能,比如

1、Java可以做网站

  Java可以用来编写网站,现在很多大型网站都用Jsp写的,JSP全名Java Server Pages,它是一种动态网页技术。

2、 Java可以做Android

 Android是一种基于Linux的自由及开放源代码的操作系统,其源代码是Java。Java做安卓不单单是指系统,还有APP对于更多的开发人员来说,他们更多的时间是花在开发APP上面。

3、Java可以做游戏

 或者你不知道,在以前诺基亚还很流行的时候,你玩的手机游戏有90%以上都是Java开发的。电脑上也有java开发的游戏,最经典的是:《我的世界》(minecraft ,简称MC),当今世界最具人气和影响力的网络游戏之一《英雄联盟》(简称lol)。

4、Java可以做软件

 一般编程语言都可以做软件的,Java 也不例外,例如Eclipse,MyEclipse等知名Java开发工具.有关开发软件组件,可以了解Java Swing编程或者awt相关知识。

其实,Java还可以做出酷炫的小动画。下面,给大家贴出一个网上好玩的小动画(用Java编写的)。wg

上述动画,没有采用任何的图片,完全由画笔构造。气泡和鱼是随机生成并且可自由移动,乌龟也可以游来游去哦,你也可以拖动改变乌龟的位置。下面就来讲解一下代码。

1、 导入包(这部分常常会被大家忽略,其实这也是很重要的一部分)

这样在awt下定义的类、常量等你才可以使用

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

2、 主函数

public static void main(String[] args) {
JFrame w=new JFrame("乌龟游啊游"); //创建一个窗体对象 
        w.setSize(1720, 768); //设置窗口大小 
        w.setBackground(Color.LIGHT_GRAY);  //设置背景颜色
        Mypan mp=new Mypan();  //新建画笔
        w.add(mp);   
        w.addMouseListener(mp);  
        w.addMouseMotionListener(mp);  
          
        w.addKeyListener(mp);  
        mp.addKeyListener(mp); 
        Thread ti=new Thread(mp);  新建一个进程
        ti.start(); 运行进程 
        w.show();  窗口显示
    }  
}  

3、 实现Mypan类

class Mypan extends JPanel implements Runnable,MouseListener,
MouseMotionListener,KeyListener{//这里要设置监听  
   int x=300;//乌龟的初始坐标  
    int y=100;  
    int[] m=new int[50];//气泡  
    int[] n=new int[50];  
    int[] q=new int[50];  
    int[] a=new int[300];//海水  
    int[] b=new int[300];  
    int[] c=new int[10];//金鱼  
    int[] d=new int[10];  
int f=0;//o就是右下,如果是1就是左下,2就是左上,3就是右上  
    Mypan(){  初始化
        for(int i=0;i<300;i++){//设置海浪的随机  
          
        }  
        for(int j=0;j<50;j++){//设置气泡的随机  
           
        }  
        for(int k=0;k<10;k++){//设置金鱼的随机  
            
        }  
    }  
    public void paintComponent(Graphics g){ 
// 实现paintComponent()函数
        super.paintComponent(g);  
        this.setBackground(Color.cyan);   
        for(int j=0;j<50;j++){//画气泡  
        }  
        for(int k=0;k<10;k++){//画金鱼            
        }            
        if(fan==true){  
       if(mov==true){  
   
            }
else{  //如果乌龟不动,设置乌龟的头 
   }  
  }
else{  
        }    
        if(fan==true){  
        if(mov==true){  

            }
else{
            }  
        }else{  
     
        }  
        if(fan==true){    
            if(mov==true){  
            }else{  
            }  
        }else{  
        }  
        if(fan==true){    
            if(mov==true){            
            }else{  
}
        }else{ 
        }  
       }
    public void run(){  //这段
        while(true){ 
         ga++;  
         if(ga>20){  
          ga=0;  
          f(mov==true){  
           mov=false;  
           }else {  
           mov=true;  
                }  
            }  
以下为控制乌龟方向。
            if(f==0){  
            x++;  
            y++;  
            }  
            if(f==1){  
                x--;  
                y++;  
            }  
           此处省略,,,,,,
            for(int i=0;i<300;i++){       
                a[i]--;  
                if(a[i]<0){  
                    a[i]=1720;  
                }  
            }  
            for(int j=0;j<50;j++){  
                n[j]--;  
                if(n[j]<2){  
                    n[j]=765;  
                }  
            }  
            for(int k=0;k<10;k++){  
                c[k]=c[k]+2;  
                if(c[k]>1720){  
                    c[k]=0;  
                }  
            }  
            try{  
            Thread.sleep(20);  休眠20秒
            }catch(Exception e){}  
            repaint();  重新绘制   
        }  
}

4、用到的方法和逻辑

(1)确定所需绘画工具,如画笔Mypan,窗口JFrame

(2)为窗口添加鼠标监听、键盘监听—addMouseListener()。

(3)启动进程绘制图画(包括气泡、小鱼、乌龟、水草)

其中气泡、小鱼利用随机函数给出位置信息和大小。

乌龟只需考虑移动时不出边框,并且在点击时变换效果

(4)显示窗口。 


以上内容就是本节Java教程的主要内容,感兴趣的同学一定要亲自动手做一下啊,你可以看到有趣的金鱼游动画面,想要完整代码的同学可以在评论区留言“金鱼完整代码”,老司机就会带你上路哦。


登录或注册后发布评论
  • 能给一个Java下载地址吗

    2年前 0 回复
    @鬼爪の闪耀 你没加QQ群?群里有说啊。 http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html
    2年前 0 回复
    @尔康 腻害腻害 还有位置么 我要上车
    2年前 0 回复
    @绘梨衣 567917751 快来群里一起学习
    2年前 0 回复
    @莎莉 我加群了 你们同意下
    2年前 0 回复
  • 不太懂

    2年前 0 回复
    @MLU1171 都是从不懂过来的,一步步来吧。可以加入我的部落一起学习。
    2年前 0 回复
    @MLU1171 你的部落是啥
    2年前 0 回复
  • 下面贴出完整代码。


    package com.cn;  
      
    import java.awt.*;  
    import java.awt.event.*;  
      
    import javax.swing.*;  
      
    public class WangBa {  
        public static void main(String[] args) {  
            JFrame w=new JFrame("乌龟游啊游");  
            w.setSize(1720, 768);  
            w.setBackground(Color.LIGHT_GRAY);  
            Mypan mp=new Mypan();  
            w.add(mp);  
              
            w.addMouseListener(mp);  
            w.addMouseMotionListener(mp);  
              
            w.addKeyListener(mp);  
            mp.addKeyListener(mp);  
              
            Thread ti=new Thread(mp);  
            ti.start();  
            w.show();  
        }  
    }  
      
    class Mypan extends JPanel implements Runnable,MouseListener,MouseMotionListener,KeyListener{//这里要设置监听  
        int x=300;//乌龟的初始坐标  
        int y=100;  
        int[] m=new int[50];//气泡  
        int[] n=new int[50];  
        int[] q=new int[50];  
        int[] a=new int[300];//海水  
        int[] b=new int[300];  
        int[] c=new int[10];//金鱼  
        int[] d=new int[10];  
      
        int f=0;//o就是右下,如果是1就是左下,2就是左上,3就是右上  
        int ga=0;  
        boolean fan=true;  
        boolean mov=true;  
          
          
        Mypan(){  
            for(int i=0;i<300;i++){//设置海浪的随机  
                a[i]=(int)(Math.random()*1720);  
                b[i]=(int)(Math.random()* 768);  
            }  
            for(int j=0;j<50;j++){//设置气泡的随机  
                m[j]=(int)(Math.random()*1720);  
                n[j]=(int)(Math.random()* 768);  
                q[j]=(int)(Math.random()*35+4);  
            }  
            for(int k=0;k<10;k++){//设置金鱼的随机  
                c[k]=(int)(Math.random()*1720);  
                d[k]=(int)(Math.random()* 268+450);//金鱼一般在底部运动  
            }  
        }  
        public void paintComponent(Graphics g){  
            super.paintComponent(g);  
            this.setBackground(Color.cyan);  
          
              
            for(int j=0;j<50;j++){//画气泡  
                g.setColor(Color.blue);  
                g.fillOval(m[j], n[j], q[j], q[j]);  
                g.setColor(Color.white);  
                g.fillOval(m[j]+3,n[j]+3,q[j]-4,q[j]-4);  
            }  
              
            g.setColor(Color.green);  
            g.fillOval(80,600,20,200);  
            g.fillOval(70, 650, 200, 200);  
            g.setColor(Color.cyan);  
            g.fillOval(80, 670, 200, 200);  
            g.setColor(Color.green);  
            g.fillOval(40, 650, 50, 50);  
            g.setColor(Color.cyan);  
            g.fillOval(30, 670, 50, 50);  
              
            g.setColor(Color.green);  
            g.fillOval(150,500,25,300);  
            g.fillOval(140, 650, 200, 300);  
            g.setColor(Color.cyan);  
            g.fillOval(150, 670, 200, 200);  
            g.setColor(Color.green);  
            g.fillOval(110, 650, 50, 50);  
            g.setColor(Color.cyan);  
            g.fillOval(100, 670, 50, 50);  
              
            for(int k=0;k<10;k++){//画金鱼  
                g.setColor(Color.black);  
                g.fillOval(c[k], d[k], 20, 15);  
                g.setColor(Color.cyan);  
                g.fillOval(c[k]-10, d[k], 20, 15);  
                g.setColor(Color.orange);  
                g.fillOval(c[k]+15, d[k]-10, 50, 30);  
                g.setColor(Color.black);  
                g.fillOval(c[k]+45, d[k]-5, 5, 10);  
                g.setColor(Color.red);  
                g.fillOval(c[k]+63, d[k]+3, 5, 8);  
            }  
              
            if(fan==true){  
                if(mov==true){  
                    g.setColor(Color.getHSBColor(169, 40, 3));//乌龟的头  
                    g.fillOval(x, y, 70, 100);  
                    g.setColor(Color.BLACK);  
                    g.fillOval(x+10, y+30, 10, 10);  
                    g.fillOval(x+50, y+30, 10, 10);  
                }else{  
                    g.setColor(Color.getHSBColor(169, 40, 3));//乌龟的头  
                    g.fillOval(x, y, 70, 120);  
                    g.setColor(Color.BLACK);  
                    g.fillOval(x+10, y+30, 12, 12);  
                    g.fillOval(x+50, y+30, 12, 12);  
                    g.setColor(Color.red);  
                    g.fillOval(x+30, y, 8, 5);  
                }  
            }else{  
                g.setColor(Color.getHSBColor(30,20,50));//乌龟的头  
                g.fillOval(x, y, 70, 100);  
                g.setColor(Color.black);  
                g.drawOval(x+10, y+30, 20, 20);  
                g.drawOval(x+40, y+30, 20, 20);  
                g.setColor(Color.white);  
                g.fillOval(x+10, y+30, 20, 20);  
                g.fillOval(x+40, y+30, 20, 20);  
                g.setColor(Color.black);  
                g.fillOval(x+8, y+30, 15, 15);  
                g.fillOval(x+38, y+30, 15, 15);  
                g.setColor(Color.red);  
                g.fillOval(x+25, y+50, 20, 10);  
                  
                  
            }  
              
            if(fan==true){  
                if(mov==true){  
                    g.setColor(Color.getHSBColor(169, 40, 3));//乌龟左shang腿  
                    g.fillOval(x-90, y+60, 70, 70);  
                }else{  
                    g.setColor(Color.getHSBColor(169, 40, 3));//龟左上腿  
                    g.fillOval(x-80, y+70, 70, 70);  
                }  
            }else{  
                g.setColor(Color.getHSBColor(30, 20, 50));//龟左上腿  
                g.fillOval(x-80, y+70, 60, 60);  
            }  
            if(fan==true){  
                  
                if(mov==true){  
                    g.setColor(Color.getHSBColor(169, 40, 3));//乌龟右上腿  
                    g.fillOval(x+90, y+50, 70, 70);  
                }else{  
                    g.setColor(Color.getHSBColor(169, 40, 3));//乌龟右上腿  
                    g.fillOval(x+80, y+70, 70, 70);  
                }  
            }else{  
                g.setColor(Color.getHSBColor(30, 20, 50));//乌龟右上腿  
                g.fillOval(x+80, y+70, 60, 60);  
                  
            }  
            if(fan==true){    
                if(mov==true){            
                    g.setColor(Color.getHSBColor(169, 40, 3));//乌龟左下腿  
                    g.fillOval(x-80, y+220, 70, 70);  
                }else{  
                    g.setColor(Color.getHSBColor(169, 40, 3));//乌龟左下腿  
                    g.fillOval(x-90, y+210, 70, 70);  
                }  
            }else{  
                g.setColor(Color.getHSBColor(30, 20, 50));//乌龟左下腿  
                g.fillOval(x-80, y+220, 60, 60);  
            }  
            if(fan==true){  
                if(mov==true){  
                    g.setColor(Color.getHSBColor(169, 40, 3));//乌龟右下腿  
                    g.fillOval(x+80, y+220, 70, 70);  
                }else{  
                    g.setColor(Color.getHSBColor(169, 40, 3));//乌龟右下腿  
                    g.fillOval(x+90, y+210, 70, 70);  
                }  
            }else{  
                g.setColor(Color.getHSBColor(30, 20, 50));//乌龟右下腿  
                g.fillOval(x+80, y+220, 60, 60);  
            }  
            //g.fillOval(arg0, arg1, arg2, arg3)  
            if(fan==true){  
                if(mov==true){  
                    g.setColor(Color.getHSBColor(169, 40, 3));//龟尾巴  
                    g.fillOval(x, y+290, 60, 80);  
                    g.setColor(Color.cyan);  
                    g.fillOval(x+20, y+300, 60, 80);  
                    }else{  
                        g.setColor(Color.getHSBColor(169, 40, 3));//龟尾巴  
                        g.fillOval(x, y+290, 60, 80);  
                        g.setColor(Color.cyan);  
                        g.fillOval(x-20, y+300, 60, 80);  
                    }  
            }else{  
                g.setColor(Color.getHSBColor(30, 20, 50));//龟尾巴  
                g.fillOval(x, y+290, 60, 80);  
                g.setColor(Color.cyan);  
                g.fillOval(x-20, y+300, 60, 80);  
            }  
            if(fan==true){  
                g.setColor(Color.GREEN);//龟盖  
                g.fillOval(x-66, y+69, 200, 230);  
                g.setColor(Color.black);  
                g.drawOval(x-65, y+70, 200, 230);  
                g.setColor(Color.black);//龟盖          
              
                g.drawLine(x+5, y+130, x+75, y+130);  
                g.drawLine(x+5, y+130, x-30, y+200);  
                g.drawLine(x-30, y+200, x+5, y+270);  
                g.drawLine(x+5, y+270, x+75, y+270);  
                g.drawLine(x+75, y+270, x+100, y+200);  
                g.drawLine(x+100, y+200, x+75, y+130);  
                  
                g.drawLine(x+5, y+130, x-5, y+80);  
                g.drawLine(x+75, y+130,x+100,y+95);  
                g.drawLine(x-30, y+200, x-64, y+200);  
                g.drawLine( x+5, y+270,x-5,y+290);  
                g.drawLine(x+75, y+270, x+95, y+280);  
                g.drawLine(x+100, y+200, x+130, y+200);  
            }else{  
                g.setColor(Color.getHSBColor(169, 40, 3));//龟盖  
                g.fillOval(x-66, y+69, 200, 230);  
                g.setColor(Color.black);  
                g.drawOval(x-65, y+70, 200, 230);  
                g.setColor(Color.black);//龟盖  
                  
                g.drawLine(x+5, y+130, x+75, y+130);  
                g.drawLine(x-10, y+82, x+5, y+130);  
                g.drawLine( x+75, y+130, x+100, y+95);  
                g.drawLine(x-67,y+200,x+135,y+200);  
                g.drawLine(x+5,y+250,x+75,y+250);  
                g.drawLine(x+5,y+250,x-20,y+278);  
                g.drawLine(x+100,y+275,x+75,y+250);  
                g.drawLine(x+40, y+70, x+40, y+300);  
            }  
              
            //g.draw  
              
                  
            g.setColor(Color.BLUE);//画海浪  
            for(int i=0;i<300;i++){  
                g.drawString("~~~~", a[i], b[i]);  
            }  
              
              
              
              
        }  
        public void run(){  
            while(true){  
                  
                ga++;  
                if(ga>20){  
                    ga=0;  
                    if(mov==true){  
                        mov=false;  
                    }else {  
                        mov=true;  
                    }  
                }  
                if(f==0){  
                    x++;  
                    y++;  
                      
                }  
                if(f==1){  
                    x--;  
                    y++;  
                }  
                if(f==2){  
                    x--;  
                    y--;  
                }  
                if(f==3){  
                    x++;  
                    y--;  
                }  
                if(x>1200){  
                    if(f==0){  
                        f=1;  
                    }else{  
                        f=2;  
                    }  
                }  
                if(y>400){  
                    if(f==1){  
                        f=2;  
                    }else{  
                        f=3;  
                    }  
                }  
                if(x<0){  
                    if(f==1){  
                        f=0;  
                    }else{  
                        f=3;  
                    }  
                }  
                if(y<40){  
                    if(f==3){  
                        f=0;  
                    }else{  
                        f=1;  
                    }  
                }  
                for(int i=0;i<300;i++){  
                      
                    a[i]--;  
                    if(a[i]<0){  
                        a[i]=1720;  
                    }  
                }  
                for(int j=0;j<50;j++){  
                    n[j]--;  
                    if(n[j]<2){  
                        n[j]=765;  
                    }  
                }  
                for(int k=0;k<10;k++){  
                    c[k]=c[k]+2;  
                    if(c[k]>1720){  
                        c[k]=0;  
                    }  
                }  
                try{  
                    Thread.sleep(20);  
                }catch(Exception e){}  
                repaint();  
                  
            }  
              
        }  
        public void mouseClicked(MouseEvent arg0) {  
            // TODO 自动生成方法存根  
              
              
        }  
        public void mouseEntered(MouseEvent arg0) {  
            // TODO 自动生成方法存根  
              
        }  
        public void mouseExited(MouseEvent arg0) {  
            // TODO 自动生成方法存根  
              
        }  
        public void mousePressed(MouseEvent e) {  
            // TODO 自动生成方法存根  
            if(e.getX()>x-18&&e.getY()>y&&e.getX()<x+80&&e.getY()<y+300)  
            {  
                fan=false;  
            }  
              
        }  
        public void mouseReleased(MouseEvent e) {  
            // TODO 自动生成方法存根  
            fan=true;  
              
        }  
        public void mouseDragged(MouseEvent e) {  
            // TODO 自动生成方法存根  
            x = e.getX()-30 ;   
            y = e.getY()-200 ;   
            this.repaint() ;   
              
              
        }  
        public void mouseMoved(MouseEvent e) {  
            // TODO 自动生成方法存根  
              
        }  
        public void keyPressed(KeyEvent e) {  
            // TODO 自动生成方法存根  
            if(e.getKeyCode()==39){  
                  
            }  
              
        }  
        public void keyReleased(KeyEvent e) {  
            // TODO 自动生成方法存根  
              
              
        }  
        public void keyTyped(KeyEvent e) {  
            // TODO 自动生成方法存根  
              
        }  
    }  


    2年前 5 回复
  • 这个有意思。。。。金鱼完整代码


    2年前 0 回复
  • 我来领取了,-------金鱼完整代码

    2年前 1 回复