java为什么碰撞检测无效_java-椭圆形碰撞检测无法正常工作

因此,我正在尝试实施一个椭圆可以与圆连接的测试,但是它不起作用.

edist = (float) Math.sqrt(

Math.pow((px + ((pwidth/2) )) - (bx + (bsize/2)), 2 ) +

Math.pow(-((py + ((pwidth/2)) ) - (bx + (bsize/2))), 2 )

);

这是完整的代码(需要Slick2D):

import org.newdawn.slick.AppGameContainer;

import org.newdawn.slick.BasicGame;

import org.newdawn.slick.Color;

import org.newdawn.slick.GameContainer;

import org.newdawn.slick.Graphics;

import org.newdawn.slick.Input;

import org.newdawn.slick.SlickException;

public class ColTest extends BasicGame{

float px = 50;

float py = 50;

float pheight = 50;

float pwidth = 50;

float bx = 200;

float by = 200;

float bsize = 200;

float edist;

float pspeed = 3;

Input input;

public ColTest()

{

super("ColTest");

}

@Override

public void init(GameContainer gc)

throws SlickException {

}

@Override

public void update(GameContainer gc, int delta)

throws SlickException

{

input = gc.getInput();

try{

if(input.isKeyDown(Input.KEY_UP))

py-=pspeed;

if(input.isKeyDown(Input.KEY_DOWN))

py+=pspeed;

if(input.isKeyDown(Input.KEY_LEFT))

px-=pspeed;

if(input.isKeyDown(Input.KEY_RIGHT))

px+=pspeed;

}

catch(Exception e){}

}

public void render(GameContainer gc, Graphics g)

throws SlickException

{

g.setColor(new Color(255,255,255));

g.drawString("col: " + col(), 10, 10);

g.drawString("edist: " + edist + " dist: " + dist, 10, 100);

g.fillRect(px, py, pwidth, pheight);

g.setColor(new Color(255,0,255));

g.fillOval(px, py, pwidth, pheight);

g.setColor(new Color(255,255,255));

g.fillOval(200, 200, 200, 200);

}

public boolean col(){

edist = (float) Math.sqrt(Math.pow((px + ((pwidth/2) )) - (bx + (bsize/2)), 2) + Math.pow(-((py + ((pwidth/2)) ) - (bx + (bsize/2))), 2));

if(edist <= (bsize/2) + (px + (pwidth/2)))

return true;

else

return false;

}

public float rotate(float x, float y, float ox, float oy, float a, boolean b)

{

float dst = (float) Math.sqrt(Math.pow(x-ox,2.0)+ Math.pow(y-oy,2.0));

float oa = (float) Math.atan2(y-oy,x-ox);

if(b)

return (float) Math.cos(oa + Math.toRadians(a))*dst+ox;

else

return (float) Math.sin(oa + Math.toRadians(a))*dst+oy;

}

public static void main(String[] args)

throws SlickException

{

AppGameContainer app =

new AppGameContainer( new ColTest() );

app.setShowFPS(false);

app.setAlwaysRender(true);

app.setTargetFrameRate(60);

app.setDisplayMode(800, 600, false);

app.start();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值