小编mat*_*ory的帖子

Android图形巨大堆内存消耗? - LibGDX

我目前有一个空白的LibGDX应用程序,什么都不做.它不会呈现任何内容,也不会更新任何内容.这只是空洞的Screen.当我将应用程序部署到android时,我遇到了一些可怕的内存消耗.使用DDMS我在我的设备上运行应用程序时创建以下堆转储:

在此输入图像描述

内存最重要的用途是13.163 MB 1字节数组分配.这不是堆的一半吗?!

我检查了分配,发现没有任何指向分配的大小:

在此输入图像描述

现在使用Eclipse MAT我分析堆转储:

在此输入图像描述

因此,内存的高使用率仍来自byte []数组.进一步分析byte []部分我想出了这个:

在此输入图像描述

我现在看到巨大的byte []分配来自android图形.我甚至没有画任何东西!有什么方法可以避免让这个应用程序的Android图形部分占用一半的堆.这只会导致过多的垃圾收集在事情真正发生时发生,或者这是正常的,我只需要处理它?

注意:我在带有libGDX 1.4版的三星Galaxy S4上运行它(或者不管最新版本是什么)

更新:我没有发现应用程序的14-13MB字节数组分配是正常的,但我仍然有问题.我的堆大小太小了.如果Android图形占据了我的堆的一半,我几乎没有任何有用的空间,垃圾收集器变得疯狂.在我使用旧版本的libgdx创建的另一个应用程序(一个无可否认的编码较差的应用程序),堆大小为73 Mb.如何增加堆大小?我认为73 Mb相当大,你可以看到它的大部分都没用过.以下是旧应用程序的堆统计信息: 在此输入图像描述

java memory heap android libgdx

8
推荐指数
1
解决办法
4075
查看次数

创建新的Bufferstrategy时出现非法状态异常

当我试图弄清楚如何使用缓冲区策略时,整体上只是改进了我编写代码和清理内容的方式.当我运行以下代码时,我在"createBufferStrategy(3)"时出错

    package Game1Test;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.io.IOException;

import javax.swing.*;

public class Base extends Canvas implements Runnable{

    private static final long serialVersionUID = 1L;
    private boolean running = false;
    int ticks = 0;

    public Base(JFrame f) {
        setSize(f.getWidth(),f.getHeight());
        start();
    }

    public void start(){
        running = true;
        new Thread(this).start();
    }
    public void stop(){

    }
    public void run(){
        while(running){
            ticks++;
            System.out.println(ticks);
            render();

                try {
                    Thread.sleep(2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
        }
    }
    public void render(){ …
Run Code Online (Sandbox Code Playgroud)

java buffer illegalstateexception

7
推荐指数
1
解决办法
1万
查看次数

在eclipse中添加/重新添加按钮到工具栏?

我不小心删除了eclipse中的"Create new Class"按钮.如何将其重新放回顶部工具栏?我查看了所有菜单,但我找不到这样做的选项.

谢谢

eclipse toolbar

7
推荐指数
1
解决办法
8921
查看次数

无法在Android Studio(libGDX)中运行项目

每次我尝试在Android Studio中运行我的桌面项目时,我立即收到以下错误:

Error:com.android.tools.idea.gradle.util.Projects.lastGradleSyncFailed(Lcom/intellij/openapi/project/Project;)Z
Run Code Online (Sandbox Code Playgroud)

没有发生gradle构建或任何类型的同步.Android Studio直接跳转到此错误.

我已经重启/无效缓存,我已经在项目和家庭位置删除了我的.gradle文件夹,我重新安装了android studio,我创建了一个新项目,但我仍然得到同样的错误.

当我手动运行gradle构建时,构建成功完成.我甚至可以毫无问题地运行Android项目.只是桌面项目给我带来了麻烦.

任何建议将不胜感激.

我使用的是最新版本的android gradle(2.3.0),而我的JDK是正确的版本(1.8).

我在更新到Android Studio 2.3后收到此错误.

为了澄清,Gradle构建/同步完成了SUCCESSFULLY.

java android gradle libgdx android-studio

7
推荐指数
1
解决办法
1266
查看次数

Java平铺游戏 - 碰撞检测

我正在使用瓷砖制作java游戏.我遇到了碰撞元件的问题.我为地图上的每个图块定义矩形,为播放器定义另一个矩形.我遇到麻烦的是知道玩家在撞到矩形时从哪一边来,然后按照玩家来自的方向推动玩家.我已经创建了一个方法来检查字符在矩形内的多少,因此它可以知道将它推出多少,但我无法弄清楚如何判断字符来自哪一方.

这是我当前的碰撞方法 - 注意rect1是字符,rect2是tile

public void collision(Rectangle rect1, Rectangle rect2) {
    float xAdd;
    float xAdd2;
    float yAdd;
    float yAdd2;

    boolean hitRight = false;
    boolean hitLeft = false;
    boolean hitTop = false;
    boolean hitBot = false;

    Vector2f rect1Origin = new Vector2f(rect1.x, rect1.y);
    Vector2f rect2Origin = new Vector2f(rect2.x, rect2.y);
    Vector2f rect1Mid = new Vector2f((rect1.x + rect1.width) / 2,(rect1.y + rect1.height) / 2);
    Vector2f rect2Mid = new Vector2f((rect2.x + rect2.width) / 2,(rect2.y + rect2.height) / 2);

    Vector2f rect1A = new Vector2f(rect1Origin.x + rect1.width, …
Run Code Online (Sandbox Code Playgroud)

java collision-detection tile

5
推荐指数
1
解决办法
2523
查看次数

为什么我在libGDX中的纹理上获得黑色轮廓/边缘?

每当我绘制一个边缘有alpha的纹理(它被photoshop消除锯齿)时,这些边缘就会变暗.我无休止地使用纹理滤镜和混合模式,但没有成功.

这就是我的意思:

minFilter: Linear magFilter: Linear

在黄色背景的圈子 红色背景

minFilter: MipMapLinearNearest magFilter: Linear

在此输入图像描述 在此输入图像描述

minFilter: MipMapLinearLinear magFilter: Linear

在此输入图像描述 在此输入图像描述

正如您所看到的,更改libGDX Texture Packer上的过滤器会对事物的外观产生很大影响,但alpha 仍然很暗.

我尝试在libgdx中手动设置纹理过滤器:

texture.setFilter(minFilter, magFilter);
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

我已经读过使用线性滤波器进行缩减会导致alpha像素默认为黑色?如果是这种情况,我该如何避免呢?

我也试过改变混合模式:glBlend(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_APHA)没有区别.glBlend(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)完全删除alpha,这样就不起作用了.

希望我的设置minFilterNearest因为它使事情看起来非常像素化.我已经尝试了所有其他纹理滤镜组合,但所有内容都会产生相同的黑/暗边/轮廓效果.

java photoshop android opengl-es libgdx

3
推荐指数
1
解决办法
499
查看次数

Java:如果某个字符在字符串中,那么如何检查它,然后打印出它相对于字符串的位置?

我想要做的是创建一个方法,它有一个字符串和一个字符作为参数,然后该方法接受字符串并搜索给定的字符.如果字符串包含该字符,则返回字符所在的整数数组.这是我到目前为止:

public class Sheet {
public static void main(String[] args) {
    String string = "bbnnbb";
    String complete = null;
    //*******
    for(int i = 0; i < string.length(); i++){
        complete = StringSearch(string,'n').toString();
    }
            //********
}

public static int[] StringSearch(String string, char lookfor) {
    int[]num = new int[string.length()];
    for(int i = 0; i < num.length; i++){
        if(string.charAt(i)== lookfor){
            num[i] = i;
        }
    }
    return num;
}
Run Code Online (Sandbox Code Playgroud)

}

该方法工作正常,并返回此:

0
0
2
3
0
0
Run Code Online (Sandbox Code Playgroud)

我想做的是将它们变成1个字符串,所以它看起来像这个"002300".有没有办法做到这一点?我试图在代码的星号区域中做到这一点,但我没有成功.

java arrays string search char

-1
推荐指数
1
解决办法
177
查看次数