碰撞检测的多边形位置不会更新?或碰撞?
问题描述:
我正在使用多边形进行碰撞检测。我有一块石头,在某个方向上移动。碰撞检测的多边形位置不会更新?或碰撞?
当我运行该应用程序时,该多边形呈现为一个完美的矩形,在该矩形开始时是岩石。
然而,它并不移动与岩石。
public Polygon box;
private int width;
public int height;
public float [] vertices;
public Rock (float x, float y, int width, int height) {
this.width = width;
this.height = height;
position = new Vector2(x, y);
velocity = new Vector2(20, 0);
vertices = new float[] {position.x, position.y, position.x+width, position.y, position.x+width, position.y+height,
position.x, position.y+height};
box = new Polygon();
box.setOrigin(width/2, height/2);
}
public void RockMove (float delta) {
position.add(velocity.cpy().scl(delta));
box.setVertices(vertices);
box.setPosition(position.x, position.y);
}
精灵一批摇滚
public void render (float delta) {
batch.begin();
batch.enableBlending();
batch.draw(rock, rock.GetX(), rock.GetY(), rock.GetWidth(), rock.GetHeight());
batch.disableBlending();
batch.end();
}
这是从呈现类
shapeRenderer.begin(ShapeRenderer.ShapeType.Line);
shapeRenderer.setColor(Color.RED);
shapeRenderer.polygon(Rock.vertices);
shapeRenderer.end();
又有些代码,多边形完全显示出来,但不会移动。我没有任何错误。
编辑:我在岩石移动方法中再次定义了顶点,现在他们随着岩石移动。
public void RockMove (float delta) {
position.add(velocity.cpy().scl(delta));
box.setVertices(vertices);
box.setPosition(position.x, position.y);
vertices = new float[] {position.x, position.y, position.x+width,
position.y, position.x+width, position.y+height,
position.x, position.y+height};
}
但是由于某些原因,碰撞检测不起作用。
答
不要在更新中再次定义顶点,而应该使用“多边形”的transformedVertices。
Polygon polygon=new Polygon();
float transformed[] = polygon.getTransformedVertices();
TransformedVertices是已应用缩放,旋转和位置平移之后的多边形的顶点。
谢谢,我其实已经亲身体会到了这一点。 –
太棒了:) – Aryan