碰撞检测

package com.move;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Rectangle;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import Fuzhu.ImageUtils;
/**
 * 
 * @author Brittany ln
 *
 */
public class moveMoster extends JFrame implements Runnable{


private Image jian;
private Image moster;
private int x[] = new int[2];
private MediaTracker media;
private JPanel jp;
private int index=0;

public moveMoster(){
super("碰撞检测");
setSize(500, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);

media = new MediaTracker(this);

x[0]=5;//设置武器的x初始化坐标为5
jian = ImageUtils.addImage(media, new ImageIcon("image/arrow_0.png").getImage());
        x[1]=400;//设置怪物的x初始化坐标为400
        moster = ImageUtils.addImage(media, new ImageIcon("image/xiaoboss.png").getImage());

jp = new JPanel(){
@Override
//重写paintComponent方法,画出图像
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(jian, x[0], 100, this);
g.drawImage(moster, x[1], 100, this);
}
};
this.add(jp);//将JPanel对象添加到窗体显示
setVisible(true);
}



   /**
    * 使用多线程实现碰撞
    */
@Override
public void run() {
 while(true){
 x[0]++;//武器向右移动
 x[1]--;//怪物向左移动
 /**
  * 碰撞检测:矩形
  */
 Rectangle jianre = new Rectangle(x[0],100,jian.getWidth(null)-49,jian.getHeight(null));
 Rectangle mosetere = new Rectangle(x[1],100,jian.getWidth(null),jian.getHeight(null));
 
 if(jianre.intersects(mosetere)){//有交集,证明碰撞到了
 JOptionPane.showMessageDialog(null, "碰到了");
 break;
 }
 jp.repaint();//重绘
 try {
Thread.sleep(10);//休眠
} catch (InterruptedException e) {
e.printStackTrace();
}
 }
}


public static void main(String[] args) {
//启动线程
new Thread(new moveMoster()).start();

}

/* *****************************************效果图显示***************************************** */

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值