【Java开源代码栏目提醒】:以下是网学会员为您推荐的Java开源代码-CollisionTest.java,希望本篇文章对您学习有所帮助。
import java.applet.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.util.*;
public class CollisionTest extends Applet implements MouseListener, MouseMotionListener
{
// 画面中所包含的矩形的数量
private final int NUM_RECTS = 10;
// 矩形队列
private LinkedList rectangles;
// 用来显示半透明矩形的AlphaCompisite
private AlphaComposite alpha;
// 当前所选择的矩形
private Rectangle2D pick;
public void init()
{
rectangles = new LinkedList();
pick = null;
// 用50%的透明度来创建一个AlphaComposite
alpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f);
// 在随机位置创建NUM_RECTS个矩形并把它们添加到队列中
Random r = new Random();
int width = (int)getSize().getWidth();
int height = (int)getSize().getHeight();
for(int i = 0; i < NUM_RECTS; i++)
{
rectangles.add(new Rectangle2D.Double(
(double)( Math.abs(r.nextInt())%width),
(double)( Math.abs(r.nextInt())%height),
(double)(20+Math.abs(r.nextInt())%50),
(double)(20+Math.abs(r.nextInt())%50)));
}
// 不要忘记注册applet,让它监听鼠标事件
addMouseListener(this);
addMouseMotionListener(this);
}
public void paint(Graphics g)
{
Graphics2D g2d = (Graphics2D)g;
// 告诉我们的Graphics2D容器使用透明度
g2d.setComposite(alpha);
// 绘制矩形
g2d.setPaint(Color.BLACK);
for(int i = 0; i < NUM_RECTS; i++)
{
g2d.draw((Rectangle2D.Double)rectangles.get(i));
}
// 如果所选取的是一个有效的矩形,则对它进行冲突检测
if(pick != null)
{
Rectangle2D rect;
g2d.setPaint(Color.RED.darker());
for(int i = 0; i < NUM_RECTS; i++)
{
// 得到队列中的第 i个矩形
rect = (Rectangle2D)rectangles.get(i);
// 检测重叠-- 注意我们不能检测被选取的矩形自身
if(pick != rect && pick.intersects(rect))
{
// 填充冲突部分
g2d.fill(rect);
}
}
// 填充所选取的矩形
g2d.setPaint(Color.BLUE.brighter());
g2d.fill(pick);
}
}
// 从MouseListener接口继承来的方法
public void mouseClicked(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mousePressed(MouseEvent e)
{
// 尝试选取一个矩形
if(pick == null)
{
Rectangle2D rect;
for(int i = 0; i < NUM_RECTS; i++)
{
rect = (Rectangle2D)rectangles.get(i);
// 如果矩形包含鼠标位置,则选取它
if(rect.contains(e.getPoint()))
{
pick = rect;
return;
}
}
}
}
public void mouseReleased(MouseEvent e)
{
// 释放所选取的矩形并重绘画面
pick = null;
repaint();
}
// 从MouseMotionListener接口继承来的方法
public void mouseDragged(MouseEvent e)
{
// 如果我们已经选取了一个矩形,则把它的位置设置为当前鼠标位置并重绘
if(pick != null)
{
pick.setRect(e.getX(), e.getY(), pick.getWidth(), pick.getHeight());
repaint();
}
}
public void mouseMoved(MouseEvent e) { }
} // CollisionTest