2012-08-26 58 views
-1

有很多像这样的问题,但我检查了所有问题,但都没有解决我遇到的问题,因此请不要将它作为重复项来关闭。在java中使用圆圈进行碰撞检测

我正在制作一个中间有一个大圆圈的游戏,周围是六个其他圈子,这些圈子的大小逐渐增加。如果六圈中的一圈与中央圈发生碰撞,我想结束比赛。任何人都能提供合适的解决方案

这里是我的代码:

package virus; 


import java.awt.*; 
import java.util.Random; 
import javax.swing.JPanel; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 


public class VirusGamePanel extends JPanel implements MouseListener{ 
    private static final long serialVersionUID = 1L;//serialVersionUID field 
    Random colour = new Random();//the outside ovals will always be a random colour 
    private int sizeX1 = 0;//the x size of the outside ovals 
    private int sizeX2 = 0; 
    private int sizeX3 = 0; 
    private int sizeX4 = 0; 
    private int sizeX5 = 0; 
    private int sizeX6 = 0; 

    private int sizeY1 = 0;//the y size of the outside ovals 
    private int sizeY2 = 0; 
    private int sizeY3 = 0; 
    private int sizeY4 = 0; 
    private int sizeY5 = 0; 
    private int sizeY6 = 0; 
    int score = 0; 

    static String scorestring = "Score: "; 
    Color rand = new Color(colour.nextInt(255), colour.nextInt(255), colour.nextInt(255)); //generate the random colour 

    public void paint(Graphics g) 
    { 
     super.paint(g); 
     g.setColor(Color.magenta); 
     g.drawString(scorestring+score,275,250); 
     g.setColor(Color.orange); 
     g.drawOval(200, 150, 200, 200); 
     g.setColor(rand); 
     g.fillOval(300 - sizeX1/2, 50 - sizeY1/2, sizeX1, sizeY1);//these six ovals are supposed to increase in size 
     g.fillOval(130 - sizeX2/2,100 - sizeY2/2, sizeX2, sizeY2); 
     g.fillOval(480 - sizeX3/2,100 - sizeY3/2, sizeX3, sizeY3); 
     g.fillOval(130 - sizeX4/2,400 - sizeY4/2, sizeX4, sizeY4); 
     g.fillOval(480 - sizeX5/2,400 - sizeY5/2, sizeX5, sizeY5); 
     g.fillOval(305 - sizeX6/2,450 - sizeY6/2, sizeX6, sizeY6); 


     try 
     { 
      Thread.sleep(100); 
     } 
     catch(InterruptedException e) 
     { 
      e.printStackTrace(); 
     } 
     inc(); 
    } 


    private void inc()//increase the size of the ovals 
    { 

      sizeX1++; 
      sizeY1++; 
      sizeX2++; 
      sizeY2++; 
      sizeX3++; 
      sizeY3++; 
      sizeX4++; 
      sizeY4++; 
      sizeX5++; 
      sizeY5++; 
      sizeX6++; 
      sizeY6++; 
      repaint(); 

    } 


    public static void main(String[] args) {} 
+1

当两个圆碰撞,他们的中心之间的距离等于他们的半径之和。另外,如果你创建了一个'Circle'类,你的代码将会大大改善。 – Blender

+0

*“请不要将其作为复本关闭。”*当然。但既然你基本上抛弃了代码,并要求我们为你完成它,我会投票结束“不是真正的问题”。 –

+0

我会在Circle类中包含什么? – imulsion

回答

3

计算圆是否重叠并不难。一旦两个圆的半径的总和变得等于或大于它们的中心点之间的距离,则两个圆将具有重叠。

把那些到谷歌提供了所需的公式:

旁边的是,一些言论有关代码

  • 覆盖的paintComponent方法来代替的paint方法
  • 不是请致电Thread.sleep事件调度线程因为这会阻止用户界面。我的猜测是,用现在的代码,你永远不会看到重画。有关更多信息,请参阅Concurrency in Swing教程。你想要做什么的解决方案是使用摇摆Timer