收录日期:2021/02/27 20:21:55 时间:2016/07/13 20:55:37 标签:Java SE
利用双缓存技术绘制一个动物(这个我画两个三角形和两个圆构成了吐泡泡的热带鱼)在Applet面板上自由的在向各个方向移动,并且动物的颜色也是随机变化的。代码如下: 
import java.awt.*; 
import java.applet.*; 
import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Image; 
public class Colors extends java.applet.Applet{ 
public void paint(Graphics g){ 
Image img; 
int pos=0; 
img=createImage(400,400); 
int red,green,blue; 
for(int i=10;i <200;i+=40){ 
red=(int)Math.floor(Math.random()*256); 
green=(int)Math.floor(Math.random()*256); 
blue=(int)Math.floor(Math.random()*256); 
g.setColor(new Color(red,green,blue)); 
g.drawLine(40, 160, 125, 100); 
g.drawLine(40, 160, 125, 100); 
g.drawLine(40, 160, 125, 220); 
g.drawLine(125, 100, 125, 220); 
g.drawLine(125, 160, 170, 135); 
g.drawLine(125, 160, 170, 185); 
g.drawLine(170, 135, 170, 185); 
g.drawOval(20, 153, 15, 15); 
g.drawOval(5, 115, 25, 25); 
g.fillOval(60, 148, 10, 10); 


g.drawImage(img,pos,100,this); 
pos=++pos%200; 
for(int j=0;j <9900000;j++); 
repaint(); 


我主要有以下问题需要解决:1、刷新速度过快,颜色变化我看不明确; 
                          2、有什么办法让鱼的变色是图形填充满的的变色而非线条变色; 
                          3、就是不知道为什么鱼不会动,连一开始的水平从左至右一动都不能实现了(可移动的代码如下: 
                              import java.awt.*; 
                          import java.applet.*; 
                          import java.awt.Color; 
                          import java.awt.Graphics; 
                          public class animal extends Applet{ 
                          Image img; 
                          int pos=0; 
                          public void init(){ 
                    img=createImage(400,400); 
                          Graphics g=img.getGraphics(); 
                    g.drawLine(40, 160, 125, 100); 
                          g.drawLine(40, 160, 125, 100); 
                          g.drawLine(40, 160, 125, 220); 
                          g.drawLine(125, 100, 125, 220); 
                          g.drawLine(125, 160, 170, 135); 
                          g.drawLine(125, 160, 170, 185); 
                          g.drawLine(170, 135, 170, 185); 
                          g.drawOval(20, 153, 15, 15); 
                          g.drawOval(5, 115, 25, 25); 
                          g.fillOval(60, 148, 10, 10); 

                          } 
                          public void paint(Graphics g){ 
                          g.drawImage(img,pos,100,this); 
                          pos=++pos%200; 
                          for(int j=0;j <9900000;j++); 
                          repaint(); 
                          } 
                    } 
) 
                4、我想实现它自由移动而非单纯的水平移动。 
    麻烦帮帮我吧~~~~初学这块一堆问题,期待您的帮助!!!!
路过。。。。
Mark!
最简单的自由移动就是碰到边界反弹了
Image img;
int pos = 0;
int x = 0;
int y = 0;
int offsetX = 1;
int offsetY = 1;

public void init() {
img = createImage(400, 400);
Graphics g = img.getGraphics();
g.drawLine(40, 160, 125, 100);
g.drawLine(40, 160, 125, 100);
g.drawLine(40, 160, 125, 220);
g.drawLine(125, 100, 125, 220);
g.drawLine(125, 160, 170, 135);
g.drawLine(125, 160, 170, 185);
g.drawLine(170, 135, 170, 185);
g.drawOval(20, 153, 15, 15);
g.drawOval(5, 115, 25, 25);
g.fillOval(60, 148, 10, 10);

}

public void paint(Graphics g) {
g.drawImage(img, x, y, this);
x = x + offsetX;
y = y + offsetY;
if (x + 400 > getWidth()) {
offsetX = -1;
x = getWidth() - 400;
}
if (x < 0) {
offsetX = 1;
x=0;
}
if (y + 400 > getHeight()) {
offsetY = -1;
y = getHeight() - 400;
}
if (y < 0) {
offsetY = 1;
y=0;
}
pos = ++pos % 200;
for (int j = 0; j < 9900000; j++)
;
repaint();
}

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.util.Random;

public class Colors extends java.applet.Applet {
Random random;  
int pos = 0;
    int x = 0;
    int y = 0;
    int offsetX = 1;
    int offsetY = 1;
    Image img;
    public void init() {
     img = createImage(400, 400);
     random=new Random();
    }
    public void setFish()
    {
     int red,green,blue;
     red=(int)Math.floor(Math.random()*256);
     green=(int)Math.floor(Math.random()*256);
     blue=(int)Math.floor(Math.random()*256); 
        Graphics g1 = img.getGraphics();
        g1.setColor(new Color(red,green,blue));
        g1.drawLine(40, 160, 125, 100);
        g1.drawLine(40, 160, 125, 100);
        g1.drawLine(40, 160, 125, 220);
        g1.drawLine(125, 100, 125, 220);
        g1.drawLine(125, 160, 170, 135);
        g1.drawLine(125, 160, 170, 185);
        g1.drawLine(170, 135, 170, 185);
        g1.drawOval(20, 153, 15, 15);
        g1.drawOval(5, 115, 25, 25);
        g1.fillOval(60, 148, 10, 10);
    
       
    }
    public void paint(Graphics g) {
     setFish();
     Graphics2D g2d=new BufferedImage(img.getWidth(null),img.getHeight(null),BufferedImage.TYPE_INT_RGB).createGraphics();
     g2d.rotate(Math.toRadians(45));
        g.drawImage(img, x, y, this);
        if(x+200>getWidth())
        {
         offsetX=-random.nextInt(2);
        }else if(x+10<0)
        
        {
         offsetX=random.nextInt(2);
        }
        if(y+200>getHeight())
        {
         offsetY=-random.nextInt(2);
        }else if(y+10<0)
        {
         offsetY=random.nextInt(2);
        }
        
        x = x + offsetX;
        y = y + offsetY;
        
        pos = ++pos % 200;
        for (int j = 0; j < 9900000; j++)
            ;
        repaint();
    }
}
改了改,不是画线了

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Polygon;
import java.awt.image.BufferedImage;
import java.util.Random;

public class Colors extends java.applet.Applet {
Random random;
int pos = 0;
int x = 0;
int y = 0;
int offsetX = 5;
int offsetY = 5;

Image img;

public void init() {
img = createImage(400, 400);
random = new Random();
}

public void setFish() {

int red, green, blue;
red = (int) Math.floor(Math.random() * 256);

blue = (int) Math.floor(Math.random() * 256);

green = (int) Math.floor(Math.random() * 256);

Graphics g1 = img.getGraphics();
g1.setColor(new Color(red, green, blue));

Polygon body = new Polygon();

body.addPoint(40, 160);
body.addPoint(125, 100);
body.addPoint(125, 220);

Polygon tail = new Polygon();
tail.addPoint(125, 160);
tail.addPoint(170, 135);
tail.addPoint(170, 185);

g1.fillPolygon(body);
g1.fillPolygon(tail);
g1.drawOval(20, 153, 15, 15);
g1.drawOval(5, 115, 25, 25);
g1.setColor(new Color(0, 0, 0));

g1.fillOval(60, 148, 10, 10);
}

public void paint(Graphics g) {
if (pos == 0) {
setFish();
}
Graphics2D g2d = new BufferedImage(img.getWidth(null), img
.getHeight(null), BufferedImage.TYPE_INT_RGB).createGraphics();
g2d.rotate(Math.toRadians(45));
g.drawImage(img, x, y, this);
if (x + 200 > getWidth()) {
offsetX = -(random.nextInt(5) + 5);
} else if (x + 10 < 0)

{
offsetX = random.nextInt(5) + 5;
}
if (y + 200 > getHeight()) {
offsetY = -(random.nextInt(5) + 5);
} else if (y + 10 < 0) {
offsetY = random.nextInt(5) + 5;
}

x = x + offsetX;
y = y + offsetY;
pos++;
pos = pos % 100;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

repaint();
}
}

数据源不能添加问题... 长沙--哪位帅哥愿意陪MM游张家界啊? 知道流媒体存放在网站的某个目录里,但不知道具体的文件名,我该如何下载这些视频文件呢? 如何对下拉框的item进行排序? 需要使用vc6.0,把几个.cpp文件作成一个dll,怎么做?敬待 sql server在处理float类型时,为什么在返回前台时有时截位,但是有时却不截位。 重装系统出现的问题。请帮忙。 急!!1如何 在改变系统DPI 后 保持对话框的大小 字体不变 WinXP登录前及注销时弹出的奇怪对话框,解决必给高分! 如何不使用mfc/atl开发activex控件? 请求控件 win2k,高級服務器版,為什么系統啟動兩三個小時后,搜索,Copy,Paste等基本功能不可以用了 ?? 谁有Turbo CMS 或者其他内容管理系统的源文件? 请给我一个学习计划好吗 急!!! 如何 在改变系统DPI 后 保持对话框的大小 字体不变 用MS Chart Control画曲线图需要哪些类? 请推荐一个写的好的asp网站? windows下的起始函数是winmain,但是qt的主函数是main,如何在windows下启动? 如果一台机器上装了两个摄像头,在微软的stillcap例子中如何判断不同的设备? SmartUpload的问题 在 datagrid 中的 checkbox 问题 ---------- 迟来的爱 --------------- 请教一个关于框架网页访问的问题,请大家帮忙 关于数据库的问题,会的人请进(在线等) 关于类的三问,来者有分! 显示饼图的问题,熟悉PHP生成图象的请进。 问一个copyrights 关于图片和dll的问题? 请教SQL语句问题。谢谢 急问.net安装:“插入的光盘不正确”。在线等!