Libgdx NESTED ShapeRenderer 不画线
Libgdx NESTED ShapeRenderer not drawing lines
在下面的代码中,我检索了一个顶点数组列表(我已经调试过,它们实际上就在那里),然后尝试在渲染方法中托管的嵌套循环排列中渲染它们。出于某种原因,如果这是嵌套的,ShapeRenderer 无法连接所有的线?有人可以告诉我我做错了什么吗?屏幕上没有任何内容;我没有收到任何错误。
shapeRenderer.setProjectionMatrix(camera.combined);
shapeRenderer.begin(ShapeType.Line);
for(int i = 0;i<tmpBodies.size;i++)
{
if(tmpBodies.get(i).getType().equals(BodyType.DynamicBody) &&
!tmpBodies.get(i).equals(car.getChassis()) &&
!tmpBodies.get(i).equals(car.rightWheel)&&
!tmpBodies.get(i).equals(car.leftWheel)&&
!tmpBodies.get(i).equals(terrain)) // tmpBodies.get(i).getFixtureList().get(0).getShape().equals(Type.Chain)
{
ChainShape tempShape = new ChainShape();
ArrayList<Vector2> bodyPoints = new ArrayList<Vector2>();
tempShape = (ChainShape)tmpBodies.get(i).getFixtureList()
.get(0).getShape();
for(int q=0; q<tempShape.getVertexCount(); q++)
{
Vector2 linePoints = new Vector2();
tempShape.getVertex(q, linePoints);
Vector2 newLinePoints = tmpBodies.get(i).getWorldPoint(linePoints);
bodyPoints.add(newLinePoints);
}
for(int z=0; z<tempShape.getVertexCount()-1; z++)
{
shapeRenderer.setColor(1, 1, 0, 1);
shapeRenderer.line(bodyPoints.get(z).x,
bodyPoints.get(z).y,
bodyPoints.get(z+1).x,
bodyPoints.get(z+1).y);
}
}
}
不是我解释的好,也就是可能吗?如果使用 box2d 例如 PPM 单位,则需要使用另一个 matrix4。
shapeRenderer.setProjectionMatrix(camera.combined);
改变例如:
testMatrix4 Matrix4; //<-- Variable Class.
//在你的代码中
//Other Code
//batch or Camera Matrix
testMatrix4 = batch.getProyectionMatrix().cpy()
.scale(YOUR_PPM_X, YOUR_PPM_Y, 0);
shapeRenderer.setProjectionMatrix(testMatrix4);
//Other Code
我从来没有做过这样的事情,但如果它不起作用,请通知我,我会删除。
在下面的代码中,我检索了一个顶点数组列表(我已经调试过,它们实际上就在那里),然后尝试在渲染方法中托管的嵌套循环排列中渲染它们。出于某种原因,如果这是嵌套的,ShapeRenderer 无法连接所有的线?有人可以告诉我我做错了什么吗?屏幕上没有任何内容;我没有收到任何错误。
shapeRenderer.setProjectionMatrix(camera.combined);
shapeRenderer.begin(ShapeType.Line);
for(int i = 0;i<tmpBodies.size;i++)
{
if(tmpBodies.get(i).getType().equals(BodyType.DynamicBody) &&
!tmpBodies.get(i).equals(car.getChassis()) &&
!tmpBodies.get(i).equals(car.rightWheel)&&
!tmpBodies.get(i).equals(car.leftWheel)&&
!tmpBodies.get(i).equals(terrain)) // tmpBodies.get(i).getFixtureList().get(0).getShape().equals(Type.Chain)
{
ChainShape tempShape = new ChainShape();
ArrayList<Vector2> bodyPoints = new ArrayList<Vector2>();
tempShape = (ChainShape)tmpBodies.get(i).getFixtureList()
.get(0).getShape();
for(int q=0; q<tempShape.getVertexCount(); q++)
{
Vector2 linePoints = new Vector2();
tempShape.getVertex(q, linePoints);
Vector2 newLinePoints = tmpBodies.get(i).getWorldPoint(linePoints);
bodyPoints.add(newLinePoints);
}
for(int z=0; z<tempShape.getVertexCount()-1; z++)
{
shapeRenderer.setColor(1, 1, 0, 1);
shapeRenderer.line(bodyPoints.get(z).x,
bodyPoints.get(z).y,
bodyPoints.get(z+1).x,
bodyPoints.get(z+1).y);
}
}
}
不是我解释的好,也就是可能吗?如果使用 box2d 例如 PPM 单位,则需要使用另一个 matrix4。
shapeRenderer.setProjectionMatrix(camera.combined);
改变例如:
testMatrix4 Matrix4; //<-- Variable Class.
//在你的代码中
//Other Code
//batch or Camera Matrix
testMatrix4 = batch.getProyectionMatrix().cpy()
.scale(YOUR_PPM_X, YOUR_PPM_Y, 0);
shapeRenderer.setProjectionMatrix(testMatrix4);
//Other Code
我从来没有做过这样的事情,但如果它不起作用,请通知我,我会删除。