Java摆动基于2D像素的精灵类无法正常工作

时间:2016-12-23 17:02:54

标签: java swing sprite

我为java和swing中的简单游戏制作了一个基于像素的精灵类,我不想让一些精灵通过其他精灵。所以我编写了两个循环,它们应该将每个其他精灵的像素添加到关卡的“材质”数组中。 材料不应该通过。它的水平确实有效。精灵不能通过它的材料。但与其他精灵不同。它可以通过它们。这就是我真正想要修复的错误。似乎sprite的像素数组不是附加的。

非常感谢任何帮助!

代码:

int applied_pixels=lvl.material.length;
Sprite[] others=new Sprite[] {other sprites};
/*EDIT : others[i].frameborders[others[i].frame].all is the point array of the sprites' pixels
others[i].frame is the frame of the sprite object, because they contain an array of BufferedImages. Frame is the one that should be taken*/
Level lvl=the level; //Containing a couple of point arrays of pixels of some types, for example containing the material array of pixels
int apply_pixels=0; //How many pixels are needed ?
for (int i=0; i < others.length; i++) {
     if (others[i] != null) { //Isn't the sprite null
         apply_pixels=apply_pixels+others[i].frameborders[others[i].frame].all.length; //How many points does it has to add ?
     }
}
level=lvl.clone(); //Copy level to be able to later append points to the material array
level.material=new Point[apply_pixels];
System.arraycopy(lvl.material,0,level.material,0,lvl.material.length); //Copy old material array points
int appending_position=0;
appending_position=lvl.material.length; //Which destination position to append the points at ?
for (int i=0; i < others.length; i++) {
     if (others[i] != null) { //Isn't the sprite null
         System.arraycopy(others[i].frameborders[others[i].frame].all,0,level.material,appending_position,others[i].frameborders[others[i].frame].all.length); //Copy the points from the sprite to the material array
         appending_position=appending_position+others[i].frameborders[others[i].frame].all.length; //Position to append at is now plus the length of appended points
     }
}

1 个答案:

答案 0 :(得分:1)

我发现你的代码发布了两个可能的问题。

首先,level.material=new Point[apply_pixels];仅为新像素分配元素。它可能应该是level.material=new Point[lvl.material.length + apply_pixels];。或者,您可以将apply_pixels初始化为int apply_pixel = lvl.material.length而不是零。

第二个问题是,您从未向我们展示lvl如何替换原始level。据推测,您发布的代码是某个方法的一部分,level是传入的输入,但是可以通过程序的其他部分通过字段进行访问。除非正确返回修改后的lvl并替换原始代码,否则此处的代码将不起作用。但是,这只是推测,因为OP拒绝发布相关代码。