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需要被修改,谢谢你们这么多人,修复了它!