Java小程序冲突检测

Java小程序冲突检测,java,applet,awt,collision-detection,keylistener,Java,Applet,Awt,Collision Detection,Keylistener,我一直在尝试让碰撞检测在我正在做的青蛙类型的游戏中工作。虽然我似乎无法掌握它的诀窍,但如果您能帮助它工作,我将不胜感激,我的代码如下: 我试图用下面的代码片段(也可以在下面看到)进行冲突检测,但它并没有达到我想要的效果。当其中一个移动圆达到“青蛙”的x值时,它只会使测试文本出现在屏幕上 if ( xCoords[0] + radius == movx) collision = true; import java.applet.*; import java.awt.*;

我一直在尝试让碰撞检测在我正在做的青蛙类型的游戏中工作。虽然我似乎无法掌握它的诀窍,但如果您能帮助它工作,我将不胜感激,我的代码如下:

我试图用下面的代码片段(也可以在下面看到)进行冲突检测,但它并没有达到我想要的效果。当其中一个移动圆达到“青蛙”的x值时,它只会使测试文本出现在屏幕上

    if ( xCoords[0] + radius == movx)
        collision = true;

import java.applet.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Ellipse2D;


public class AppletMove extends Applet implements Runnable, KeyListener
{
int movx = 400;
int movy = 300;
int i = 400;
int y = 20;
int dx = 2;
int dy = 2;
int radius = 10;
int[] coOrds = {20,550};
private Image img;
private Graphics grph;
boolean collision = false;

@Override   
public void init()
{
    setSize(800,600);
    addKeyListener(this);       
}

@Override   
public void start()
{
    Thread t = new Thread(this);

    t.start();
}

@Override
public void update(Graphics g) {
    if ( img == null)
    {
        img = createImage(this.getSize().width, this.getSize().height);
        grph = img.getGraphics();

    }

    grph.setColor(getBackground());
    grph.fillRect(0, 0, this.getSize().width, this.getSize().height);

    grph.setColor(getForeground());

    paint(grph);

    g.drawImage(img, 0, 0, this);
}

@Override
public void keyPressed(KeyEvent e) {

    switch(e.getKeyCode())
    {
        case KeyEvent.VK_LEFT:
            movx -=20;
            break;
        case KeyEvent.VK_RIGHT:
            movx +=20;
            break;
        case KeyEvent.VK_UP:
            movy -=20;
            break;
        case KeyEvent.VK_DOWN:
            movy +=20;
            break;              
    }

}

@Override
public void keyReleased(KeyEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void keyTyped(KeyEvent arg0) {
    // TODO Auto-generated method stub

}

int[] xCoords = {20,280,50,250,80,220,110,190};
int[] yCoords = {20,50,80,110,140,170,200,230};

int[] xCoords2 = {140,150,170,110,200,80,230,50};

@Override
public void run() {
    // TODO Auto-generated method stub
    while(true)
    {

        if ( xCoords[0] + radius == movx)
            collision = true;

        if ( xCoords[0] + dx > this.getWidth())
            xCoords[0]  = 10;
        xCoords[0] += dx;

        if ( xCoords[1] + dx < 0)
            xCoords[1]  = 290;
        xCoords[1] -= dx;

        if ( xCoords[2] + dx > this.getWidth())
            xCoords[2] = 10;
        xCoords[2] += dx;

        if ( xCoords[3] + dx < 0)
            xCoords[3] = 290;
        xCoords[3] -= dx;

        if ( xCoords[4] + dx > this.getWidth())
            xCoords[4] = 10;
        xCoords[4] += dx;

        if ( xCoords[5] + dx < 0)
            xCoords[5] = 290;
        xCoords[5] -= dx;

        if ( xCoords[6] + dx > this.getWidth())
            xCoords[6] = 10;
        xCoords[6] += dx;

        if ( xCoords[7] + dx < 0)
            xCoords[7] = 290;
        xCoords[7] -= dx;

        if ( xCoords2[0] + dx > this.getWidth())
            xCoords2[0]  = 10;
        xCoords2[0] += dx;

        if ( xCoords2[1] + dx < 0)
            xCoords2[1] = 290;
        xCoords2[1] -= dx;

        if ( xCoords2[2] + dx > this.getWidth())
            xCoords2[2] = 10;
        xCoords2[2] += dx;

        if ( xCoords2[3] + dx < 0)
            xCoords2[3] = 290;
        xCoords2[3] -= dx;

        if ( xCoords2[4] + dx > this.getWidth())
            xCoords2[4] = 10;
        xCoords2[4] += dx;

        if ( xCoords2[5] + dx < 0)
            xCoords2[5] = 290;
        xCoords2[5] -= dx;

        if ( xCoords2[6] + dx > this.getWidth())
            xCoords2[6] = 10;
        xCoords2[6] += dx;

        if ( xCoords2[7] + dx < 0)
            xCoords2[7] = 290;
        xCoords2[7] -= dx;

        //y += dy;

        repaint();          
        try {
            Thread.sleep(17);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

public void paint(Graphics g)
{

    if(collision == true){
        g.setColor(Color.BLACK);
        g.drawString("Test", 50, 50);
    }
    g.setColor(Color.GREEN);
    g.fillOval(xCoords[0] - radius, yCoords[0] - radius, radius * 2, radius * 2);

    g.setColor(Color.RED);
    g.fillOval(xCoords[1] - radius, yCoords[1] - radius, radius * 2, radius * 2);

    g.setColor(Color.YELLOW);
    g.fillOval(xCoords[2]- radius, yCoords[2] - radius, radius * 2, radius * 2);

    g.setColor(Color.BLUE);
    g.fillOval(xCoords[3] - radius, yCoords[3] - radius, radius * 2, radius * 2);

    g.setColor(Color.PINK);
    g.fillOval(xCoords[4] - radius, yCoords[4] - radius, radius * 2, radius * 2);

    g.setColor(Color.BLACK);
    g.fillOval(xCoords[5] - radius, yCoords[5] - radius, radius * 2, radius * 2);

    g.setColor(Color.MAGENTA);
    g.fillOval(xCoords[6] - radius, yCoords[6] - radius, radius * 2, radius * 2);

    g.setColor(Color.GRAY);
    g.fillOval(xCoords[7] - radius, yCoords[7] - radius, radius * 2, radius * 2);

    g.setColor(Color.GREEN);
    g.fillOval(xCoords2[0] - radius, yCoords[0] - radius, radius * 2, radius * 2);

    g.setColor(Color.RED);
    g.fillOval(xCoords2[1] - radius, yCoords[1] - radius, radius * 2, radius * 2);

    g.setColor(Color.YELLOW);
    g.fillOval(xCoords2[2] - radius, yCoords[2] - radius, radius * 2, radius * 2);

    g.setColor(Color.BLUE);
    g.fillOval(xCoords2[3] - radius, yCoords[3] - radius, radius * 2, radius * 2);

    g.setColor(Color.PINK);
    g.fillOval(xCoords2[4] - radius, yCoords[4] - radius, radius * 2, radius * 2);

    g.setColor(Color.BLACK);
    g.fillOval(xCoords2[5] - radius, yCoords[5] - radius, radius * 2, radius * 2);

    g.setColor(Color.MAGENTA);
    g.fillOval(xCoords2[6] - radius, yCoords[6] - radius, radius * 2, radius * 2);

    g.setColor(Color.GRAY);
    g.fillOval(xCoords2[7] - radius, yCoords[7] - radius, radius * 2, radius * 2);

    g.setColor(Color.BLUE);
    Graphics2D g2 = (Graphics2D) g;
    g2.fill(new Ellipse2D.Double(movx, movy, 20, 20));
}
if(xCoords[0]+半径==movx)
碰撞=真;
导入java.applet.*;
导入java.awt.*;
导入java.awt.event.KeyEvent;
导入java.awt.event.KeyListener;
导入java.awt.geom.Ellipse2D;
公共类AppletMove扩展了Applet实现可运行的KeyListener
{
int movx=400;
int-movy=300;
int i=400;
int y=20;
int dx=2;
int-dy=2;
int半径=10;
int[]坐标={20550};
私有图像img;
私人图形grph;
布尔冲突=假;
@凌驾
公共void init()
{
设置大小(800600);
addKeyListener(此);
}
@凌驾
公开作废开始()
{
螺纹t=新螺纹(此);
t、 start();
}
@凌驾
公共空间更新(图g){
如果(img==null)
{
img=createImage(this.getSize().width,this.getSize().height);
grph=img.getGraphics();
}
grph.setColor(getBackground());
grph.fillRect(0,0,this.getSize().width,this.getSize().height);
grph.setColor(get前台());
油漆(grph);
g、 drawImage(img,0,0,this);
}
@凌驾
按下公共无效键(按键事件e){
开关(如getKeyCode())
{
case KeyEvent.VK_左:
movx-=20;
打破
case KeyEvent.VK_RIGHT:
movx+=20;
打破
case KeyEvent.VK_UP:
movy-=20;
打破
case KeyEvent.VK_向下:
movy+=20;
打破
}
}
@凌驾
公共无效密钥已释放(KeyEvent arg0){
//TODO自动生成的方法存根
}
@凌驾
public void keyTyped(KeyEvent arg0){
//TODO自动生成的方法存根
}
int[]xCoords={20280,50250,80220110190};
int[]yCoords={20,50,801010140170200230};
int[]xCoords2={140150170110200,80230,50};
@凌驾
公开募捐{
//TODO自动生成的方法存根
while(true)
{
如果(xCoords[0]+半径==movx)
碰撞=真;
如果(xCoords[0]+dx>this.getWidth())
xCoords[0]=10;
xCoords[0]+=dx;
if(xCoords[1]+dx<0)
xCoords[1]=290;
xCoords[1]=dx;
如果(xCoords[2]+dx>this.getWidth())
xCoords[2]=10;
xCoords[2]+=dx;
if(xCoords[3]+dx<0)
xCoords[3]=290;
xCoords[3]=dx;
如果(xCoords[4]+dx>this.getWidth())
xCoords[4]=10;
xCoords[4]+=dx;
if(xCoords[5]+dx<0)
xCoords[5]=290;
xCoords[5]=dx;
如果(xCoords[6]+dx>this.getWidth())
xCoords[6]=10;
xCoords[6]+=dx;
if(xCoords[7]+dx<0)
xCoords[7]=290;
xCoords[7]=dx;
如果(xCoords2[0]+dx>this.getWidth())
xCoords2[0]=10;
xCoords2[0]+=dx;
if(xCoords2[1]+dx<0)
xCoords2[1]=290;
xCoords2[1]=dx;
如果(xCoords2[2]+dx>this.getWidth())
xCoords2[2]=10;
xCoords2[2]+=dx;
if(xCoords2[3]+dx<0)
xCoords2[3]=290;
xCoords2[3]=dx;
如果(xCoords2[4]+dx>this.getWidth())
xCoords2[4]=10;
xCoords2[4]+=dx;
if(xCoords2[5]+dx<0)
xCoords2[5]=290;
xCoords2[5]=dx;
如果(xCoords2[6]+dx>this.getWidth())
xCoords2[6]=10;
xCoords2[6]+=dx;
if(xCoords2[7]+dx<0)
xCoords2[7]=290;
xCoords2[7]=dx;
//y+=dy;
重新油漆();
试一试{
睡眠(17);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
公共空间涂料(图g)
{
如果(冲突==真){
g、 设置颜色(颜色为黑色);
g、 抽绳(“试验”,50,50);
}
g、 setColor(Color.GREEN);
g、 圆角(xCoords[0]-半径,yCoords[0]-半径,半径*2,半径*2);
g、 setColor(Color.RED);
g、 圆角(xCoords[1]-半径,yCoords[1]-半径,半径*2,半径*2);
g、 setColor(颜色为黄色);
g、 圆角(xCoords[2]-半径,yCoords[2]-半径,半径*2,半径*2);
g、 setColor(Color.BLUE);
g、 圆角(xCoords[3]-半径,yCoords[3]-半径,半径*2,半径*2);
g、 setColor(颜色为粉红色);
g、 圆角(xCoords[4]-半径,yCoords[4]-半径,半径*2,半径*2);
g、 设置颜色(颜色为黑色);
g、 圆角(xCoords[5]-半径,yCoords[5]-半径,半径*2,半径*2);
g、 setColor(颜色为洋红色);
g、 圆角(xCoords[6]-半径,yCoords[6]-半径,半径*2,半径*2);
g、 setColor(颜色为灰色);
g、 圆角(xCoords[7]-半径,yCoords[7]-半径,半径*2,半径*2);
g、 setColor(Color.GREEN);
g、 圆角(xCoords2[0]-半径,yCoords[0]-半径,半径*2,半径*2);
g、 setColor(Color.RED);
g、 圆角(xCoords2[1]-半径,yCoords[1]-半径,半径*2,半径*2);
g、 setColor(颜色为黄色);
g、 圆角(xCoords2[2]-半径,yCoords[2]-半径,半径*2,半径*2);
g、 setColor(Color.BLUE);
g、 圆角(xCoords2[3]-半径,yCoords[3]-半径,半径*2,半径*2);
g、 setColor(颜色为粉红色);
g、 圆角(xCoords2[4]-半径,yCoords[4]-半径,半径*2,半径*2);
g、 设置颜色(颜色为黑色);
g、 圆角(xCoords2[5]-半径,yCoords[5]-半径,半径*2,半径*2);
g、 setColor(颜色为洋红色);
g、 圆角(xCoords2[6]-半径,yCoords[6]-半径,半径*2,半径*2);