1

我一直在用 Slick2D 开发一个小游戏这是 JavaDoc:http ://slick.ninjacave.com/javadoc/overview-summary.html

这段代码给我带来了问题:

 public void move(){

        this.shape = (Ellipse)this.shape.transform(Transform.createTranslateTransform((float)(speed*Math.sin(angle)),(float)(speed*Math.cos(angle)*-1)));
        this.posx = this.posx+(float)(speed*Math.sin(angle));
        this.posy = this.posy+(float)(speed*Math.cos(angle)*-1);

         updateShape();
    }

这是错误:

java.lang.ClassCastException: org.newdawn.slick.geom.Polygon cannot be cast to org.newdawn.slick.geom.Ellipse

让我失望的是.. shape.transform() 返回一个抽象的 Shape 类,该类旨在转换为特定的形状。我对不同班级的多边形做了同样的事情,效果很好。

如果有人有这方面的经验,非常感谢,谷歌对我帮助不大

编辑*哦,对不起,我忘了包括 this.shape 是如何创建的:

Ellipse shape;
...
shape = new Ellipse(diameter/2,diameter/2,posx,posy);
4

1 回答 1

1

此问题是由this.shape.transform( )方法返回 Polygon 但您正在转换 Ellipse 引起的。

Ellipse并且PolygonShape. 所以声明 likeShape shape 而不是Ellipse shape.

现在您可以直接分配而无需强制转换。

this.shape =  this.shape.transform(Transform.createTranslateTransform((float)(speed*Math.sin(angle)),(float)(speed*Math.cos(angle)*-1)));

如果需要,您可以键入 cast 。

于 2013-10-23T16:27:38.643 回答