本文介绍了LibGDX-正确使用Polygon类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了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);

现在可以正常使用了!

这篇关于LibGDX-正确使用Polygon类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-02 15:12