Memory Libgdx Pixmap内存泄漏
我正在编写一个小项目,其中我需要一条从给定对象到鼠标的线。我让事情顺利进行,并想出了这个快速而肮脏的代码:Memory Libgdx Pixmap内存泄漏,memory,libgdx,textures,pixmap,Memory,Libgdx,Textures,Pixmap,我正在编写一个小项目,其中我需要一条从给定对象到鼠标的线。我让事情顺利进行,并想出了这个快速而肮脏的代码: addListener(new ClickListener() { Image lineImage; Pixmap pixmap; @Override public void touchDragged(InputEvent event, float x, float y, int pointer) {
addListener(new ClickListener() {
Image lineImage;
Pixmap pixmap;
@Override
public void touchDragged(InputEvent event, float x, float y, int pointer) {
// Get Actor Origin
// Get local Origin
int x2 = (int) event.getListenerActor().getX(Align.center);
int y2 = (int) event.getListenerActor().getY(Align.center);
// Make it global
x2 = (int) event.getListenerActor().getParent().getX() + x2;
y2 = (int) event.getListenerActor().getParent().getY() + y2;
// Get Stage Coordinates
Vector2 v = localToStageCoordinates(new Vector2(x, y));
Vector2 v2 = new Vector2(x2, y2);
Stage stage = event.getStage();
int width = (int) stage.getWidth();
int height = (int) stage.getHeight();
if (pixmap == null) {
pixmap = new Pixmap(width, height, Pixmap.Format.RGBA8888);
} else {
pixmap.setColor(1, 1, 1, 0);
pixmap.fill();
}
pixmap.setColor(Color.BLUE);
// line
for (int m = -2; m <= 2; m++) {// x
for (int n = -2; n <= 2; n++) {// y
pixmap.drawLine((int) (v2.x+m), (int) (height-v2.y+n) , (int) (v.x+m), (int) (height-v.y+n));
}
}
if (lineImage != null) {
/*lineImage.clear();
lineImage.remove();
*/
lineImage.setDrawable(new SpriteDrawable(new Sprite(new Texture(pixmap))));
} else {
lineImage = new Image(new Texture(pixmap));
}
lineImage.setPosition(0,0);
stage.addActor(lineImage);
// super.touchDragged(event, x, y, pointer);
}
@Override
public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
if (lineImage != null) {
lineImage.clear();
lineImage.remove();
}
lineImage = null;
super.touchUp(event, x, y, pointer, button);
}
});
addListener(新建ClickListener(){
图像线图像;
Pixmap-Pixmap;
@凌驾
public void touchdrable(InputEvent事件、浮点x、浮点y、int指针){
//获得演员来源
//获得本地来源
int x2=(int)event.getListGenerator().getX(Align.center);
int y2=(int)event.getListGenerator().getY(Align.center);
//让它全球化
x2=(int)event.getListGenerator().getParent().getX()+x2;
y2=(int)event.getListGenerator().getParent().getY()+y2;
//获取舞台坐标
Vector2 v=本地到标记坐标(新Vector2(x,y));
向量2 v2=新向量2(x2,y2);
Stage=event.getStage();
int width=(int)stage.getWidth();
int height=(int)stage.getHeight();
if(pixmap==null){
pixmap=新的pixmap(宽度、高度、pixmap.Format.rgba888);
}否则{
pixmap.setColor(1,1,1,0);
pixmap.fill();
}
pixmap.setColor(Color.BLUE);
//线
对于(int m=-2;m@noone是对的。在将可绘制图形分配给lineImage后,添加注释所在的行以处理您的pixmap
if (lineImage != null) {
/*lineImage.clear();
lineImage.remove();
*/
lineImage.setDrawable(new SpriteDrawable(new Sprite(new Texture(pixmap))));
} else {
lineImage = new Image(new Texture(pixmap));
}
pixmap.dispose(); // <-----------Add this line here!!!
lineImage.setPosition(0,0);
stage.addActor(lineImage);
if(lineImage!=null){
/*lineImage.clear();
lineImage.remove();
*/
lineImage.setDrawable(新SpriteDrawable(新Sprite)(新纹理(pixmap)));
}否则{
lineImage=新图像(新纹理(pixmap));
}
dispose();//那是因为pixmaps需要被修改,谢谢你们这么多人,修复了它!