LibGDX - 正确使用多边形类
我创建了 Polygon
对象来包裹我的飞机(飞机的 TextureRegion
大小是 256x74,但游戏中这个大小是 70x20).所以:
I have created Polygon
object to wrap my airplane (size of airplane's TextureRegion
is 256x74, but size of this one in a game is 70x20). So:
TextureRegion[] texRegsAirplane = TextureRegion.split(textureAirplane, 256, 74);
Rectangle bounds = new Rectangle(0, 0, 70, 20);
Polygon polygon = new Polygon(new float[]{0,0,bounds.width,0,bounds.width,bounds.height,0,bounds.height,0,0});
之后在我的 update
函数中更新它的位置:
After that in my update
function I update position of it:
public void update(float delta){
Vector2 v = getPosition();
v.add(velocity);
polygon.setPosition(v.x, v.y);
}
然后我渲染多边形以知道它在哪里:
Then I render polygon to know where it is:
public void render(SpriteBatch spriteBatch, float pixelPerUnitX, float pixelPerUnitY){
spriteBatch.draw(testTexture,polygon.getX()*pixelPerUnitX, polygon.getY()*pixelPerUnitY,
polygon.getBoundingRectangle().width*pixelPerUnitX,polygon.getBoundingRectangle().height*pixelPerUnitY);
}
最后,我创建了 2 架飞机并让它们相互飞行,每次迭代我都尝试检测如下碰撞:
At the end I create 2 airplanes and make them fly to each other and every iteration I try to detect collision like below:
public void detectCollision(){
for(Airplane airplane1 : Airplanes){
for(Airplane airplane2 : Airplanes){
if(Intersector.overlapConvexPolygons(airplane1.getPolygon(), airplane2.getPolygon())){
//COLLISION DON'T HAPPEN!!!
}
}
}
我看到两个矩形相互移动并相交,但是 overlapConvexPolygons
函数不起作用!为什么?
I see that 2 rectangles move to each other and intersect, but overlapConvexPolygons
function doesn't work! Why?
推荐答案
我已经解决了这个问题.我错误地指定了顶点.我需要得到矩形多边形,所以我不得不使用以下:
I've solved this problem. I incorrectly specified vertices. I needed to get rectangular polygon, so I had to use following:
polygon = new Polygon(new float[]{0,0,bounds.width,0,bounds.width,bounds.height,0,bounds.height});
如果要旋转多边形对象,请不要忘记设置原点:
and do not forget set origin if you are going to rotate polygon object:
polygon.setOrigin(bounds.width/2, bounds.height/2);
现在完美运行了!
相关文章