Java小程序冲突检测
我一直在尝试让碰撞检测在我正在做的青蛙类型的游戏中工作。虽然我似乎无法掌握它的诀窍,但如果您能帮助它工作,我将不胜感激,我的代码如下: 我试图用下面的代码片段(也可以在下面看到)进行冲突检测,但它并没有达到我想要的效果。当其中一个移动圆达到“青蛙”的x值时,它只会使测试文本出现在屏幕上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.*;
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);