[英]Libgdx Adding sprites to array and drawing them to screen
在下面的代码中,我尝试创建一个硬币类并使它成为精灵。 我试图将所有这些精灵添加到一个数组,然后将该数组绘制到屏幕上。 它不会产生任何错误,只是不会将图形打印到屏幕上。 我还想知道我是否可以使用精灵测试碰撞。 我知道我的代码不是很好,因为它很凌乱,我只是想找到一个解决方案。 谢谢
public class Gold extends Sprite {
private SpriteBatch batch;
private TiledMap map;
private Sprite sprite;
private Boolean isCollected;
public Gold(TiledMap map, Rectangle bounds, Texture gold) {
this.map = map;
sprite = new Sprite(gold);
sprite.setSize( bounds.width / MarioBros.PPM, bounds.height / MarioBros.PPM);
sprite.setPosition(bounds.x / MarioBros.PPM, bounds.y / MarioBros.PPM);
isCollected = false;
}
for (MapObject object : map.getLayers().get(5).getObjects().getByType(RectangleMapObject.class)) {
Rectangle rect = ((RectangleMapObject) object).getRectangle();
for(int i = 0; i < map.getLayers().get(5).getObjects().getCount() - 1; i++){
goldArray[i] = new Gold(map, rect, gold);
}
}
public void drawGold(TiledMap map){
for(int i = 0; i < map.getLayers().get(5).getObjects().getCount() - 1; i++){
goldArray[i].draw(batch);
}
}
在渲染中:
mapCreator.drawGold(map);
编辑-我根据前两个建议采取行动,现在程序输出此错误
Exception in thread "LWJGL Application" java.lang.NullPointerException
at com.alexcz.mariobros.Tools.MapCreator.<init>(MapCreator.java:77)
在这行上goldArray[i] = new Gold(rect, gold);
因为Gold
类的构造函数没有调用超类的( Sprite
)构造函数,所以默认构造函数被隐式调用。 如果查看Sprite
的默认构造函数的文档 ,您会发现它特别指出:
...创建一个未初始化的精灵。 该精灵需要先设置纹理区域和边界,然后才能绘制 。
这就解释了为什么什么都没画。 解决此问题的一种方法是设置“ Texture Region
。 因此,在Gold
构造函数中添加以下内容:
setRegion(gold);
也有不同的解决方案。 这完全取决于您要完成的工作。
我注意到您的Gold类(即Sprite)也引用了其他一些Sprite,而其他Sprite是您将区域设置为该Sprite,而不是您正在绘制的Sprite。 删除对Gold类中另一个Sprite的所有引用。
另外,最好不要在Sprite中引用SpriteBatch或TiledMap。 这引入了不必要的耦合,可能导致错误提示,或者随着代码变得更加复杂而使其维护更加困难。
public class Gold extends Sprite {
private boolean isCollected; //only use a primitive wrapper if you really need one
public Gold(Rectangle bounds, Texture gold) {
super(gold);
setSize( bounds.width / MarioBros.PPM, bounds.height / MarioBros.PPM);
setPosition(bounds.x / MarioBros.PPM, bounds.y / MarioBros.PPM);
isCollected = false;
}
//...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.