LibGDX - 正确使用多边形类

LibGDX - properly using Polygon class(LibGDX - 正确使用多边形类)
本文介绍了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);

现在完美运行了!

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

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How to send data to COM PORT using JAVA?(如何使用 JAVA 向 COM PORT 发送数据?)
How to make a report page direction to change to quot;rtlquot;?(如何使报表页面方向更改为“rtl?)
Use cyrillic .properties file in eclipse project(在 Eclipse 项目中使用西里尔文 .properties 文件)
Is there any way to detect an RTL language in Java?(有没有办法在 Java 中检测 RTL 语言?)
How to load resource bundle messages from DB in Java?(如何在 Java 中从 DB 加载资源包消息?)
How do I change the default locale settings in Java to make them consistent?(如何更改 Java 中的默认语言环境设置以使其保持一致?)