【问题标题】:How to set the application icon for a libGDX desktop application?如何为 libGDX 桌面应用程序设置应用程序图标?
【发布时间】:2013-08-17 13:00:52
【问题描述】:

我正在尝试使用 -desktop 特定类设置应用程序图标:

package org.osgameseed.games.animalflip;

import com.badlogic.gdx.Files;
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;

public class Main {
    public static void main(String[] args) {
        LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();
        cfg.title = "AnimalFlip";
        cfg.useGL20 = false;
        cfg.width = 800;
        cfg.height = 600;
        cfg.addIcon("data/ic_launcher.png", Files.FileType.Internal);

        new LwjglApplication(new AnimalFlipGame(), cfg);
    }
}

图标未设置(至少在 Linux 上),知道如何设置它吗?

【问题讨论】:

  • 当您导出或不在正确的位置时,您的图像可能未包含在内。你是如何导出的?
  • Afaik 你不需要导出图像,它被放置在正确的数据路径上,如果我重命名文件,配置加载器将失败,所以我确定它正在被加载。
  • 我不是这个意思。例如,如果您从 Eclipse 导出为 jar,您的资产可能不会像您在目录中那样导出。
  • 我正在使用 ANT 构建规则组装 jar,包含图标。但就像我说的,配置加载器能够找到文件,所以并不是真正的资源定位问题。我只是不知道如何指示 libGDX 使用该图标作为窗口图标。
  • 打开你导出的 jar 并检查你是否有一个数据文件夹,如果你有你的图标。如果图标不存在,您的 jar 不会崩溃。

标签: java libgdx lwjgl


【解决方案1】:

看看 api (addIcon(...)):

添加一个窗口图标。图标按添加的顺序尝试,第一个 使用该作品。通常应提供三个图标:128x128 (适用于 Mac)、32x32(适用于 Windows 和 Linux)和 16x16(适用于 Windows)。

可能您的图标尺寸错误,因此无法设置。否则它应该工作!

顺便提一下,您只是将小图标设置在左上边缘(如果应用程序已启动),而不是您在桌面上看到的图标!

【讨论】:

  • 图标确实有适当的尺寸:ic_launcher.png:PNG 图像数据,32 x 32,8 位/彩色 RGBA,非隔行扫描,但它不显示。
  • 有人找到解决办法了吗?它也没有出现在我的 Mac 上。
  • 那么如何设置桌面图标呢?这没有回答最初的问题。
  • @Jake 使用安装包装器在安装时设置相应的图标。桌面图标不是应用程序代码的一部分,但可以在安装应用程序时设置。如果我知道的话,它是 windows/Linux 文件夹/文件定义的一部分。
  • 32x32 显示质量低且像素化。我切换到 128x128,它似乎工作得很好。如果重要的话,我在 Linux 上
【解决方案2】:

将 Icon 带入了我的 Mac-Dock! ;) 一定要在你的 Lwjgl-Thread 中调用它

/**
 * workaround for Mac
 */
private static void setApplicationIcon() {
    try {
        Class<?> cls = Class.forName("com.apple.eawt.Application");
        Object application = cls.newInstance().getClass().getMethod("getApplication").invoke(null);

        FileHandle icon = Gdx.files.local("icons/icon.png");
        application.getClass().getMethod("setDockIconImage", java.awt.Image.class)
                .invoke(application, new ImageIcon(icon.file().getAbsolutePath()).getImage());
    } catch (Exception e) {
        // nobody cares!
    }
}

【讨论】:

    猜你喜欢
    • 2015-07-28
    • 2023-01-02
    • 2011-07-29
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多