在我使用libgdx开发的小游戏中,我将矛作为游戏对象。
我使用Scene2D实现它们,作为Actor的子类。长矛可以旋转90度。我想把我的形象中的“speartip”部分作为“伤害”玩家的一部分,轴应该是无害的。因此,当我构造我的Spear物体时,我还构造了2个矩形,覆盖了矛的尖端和轴。但是当我的演员使用setRotation()
进行旋转时,矩形显然不会,因为它们没有“附着”到矛物体上。
你对如何处理这类东西有什么建议吗?代码如下。
public TrapEntity(Texture texture, float pos_x, float pos_y, float width, float height, Vector2 center,
float rotation, Rectangle hurtZone, Rectangle specialZone) {
super(texture, pos_x, pos_y, width, height, center, rotation);
this.hurtZone = new Rectangle(hurtZone.getX(), hurtZone.getY(), hurtZone.getWidth(), hurtZone.getHeight());
this.specialZone = new Rectangle(specialZone.getX(), specialZone.getY(), specialZone.getWidth(), specialZone.getHeight());
}
同一类中的render方法。我用它来渲染“hurtZone”矩形的边界:
@Override
public void draw(Batch batch, float alpha){
super.draw(batch, alpha);
batch.end();
sr.setProjectionMatrix(batch.getProjectionMatrix());
sr.setTransformMatrix(batch.getTransformMatrix());
sr.begin(ShapeRenderer.ShapeType.Line);
sr.setColor(Color.RED);
sr.rect(hurtZone.getX(), hurtZone.getY(), hurtZone.getWidth(), hurtZone.getHeight());
sr.end();
batch.begin();
}
答案 0 :(得分:1)
矩形不能旋转,我不得不做类似的事情并努力寻找解决方案。我发现的最佳解决方案是使用Polygon。你会做这样的事情;
//Polygon for a rect is set by vertices in this order
Polygon polygon = new Polygon(new float[]{0, 0, width, 0, width, height, 0, height});
//properties to update each frame
polygon.setPosition(item.getX(), item.getY());
polygon.setOrigin(item.getOriginX(), item.getOriginY());
polygon.setRotation(item.getRotation());
然后,检查点是否在旋转的Polygon使用范围内;
polygon.contains(x, y);