正在处理导出的应用程序 canvas 大小不同于 ide 已启动的应用程序
Processing exported application canvas size differs from ide launched application
我有一个简单的 Processing 3 应用程序,我刚刚迁移到 Processing 4。
旧版本有一些全局变量针对 1920x1080 显示器进行了微调,因此在移植时我决定使其更具动态性,并使这些全局变量取决于 displayWidth 和 displayHeight。
现在,当我通过 IDE 启动应用程序时,它工作正常:
但是,如果我导出应用程序(文件 > 导出应用程序 > Windows 64 位包含 Java),则会发生这种情况:
我的卡片图像是 svg,所以我觉得它们看起来如此像素化很奇怪,所以我的猜测是由于某种原因 canvas 尺寸合适但它也被拉伸了。
这只是一个猜测,我可能完全错了。无论如何,尺寸不对,我想修复它,但我不知道如何修复。
谁能帮帮我?
我的代码如下:
//Global variables.
int frameRate = 30;
int cardWidth;
int cardHeight;
int border;
int edge;
int cardsetSpace;
int cardSpace;
int textSize;
int yOffset;
float savedGameWritingDurationLeft = 0;
int loadingWritingDurationLeft = 0;
boolean isLoading = false;
final String loadingWriting = "CARICAMENTO...";
final String savedGameWriting = "PARTITA SALVATA";
//Global variables.
void settings()
{
cardWidth = (int) (displayWidth / 15.36);
cardHeight = (int) (displayHeight / 6.17);
border = cardWidth / 10;
edge = border / 3;
cardsetSpace = border + edge * 2;
cardSpace = (int) (cardHeight / 4.6);
textSize = displayHeight / 54;
yOffset = textSize + 8;
size(cardWidth * 8 + cardsetSpace * 9, cardHeight * 5 + textSize * 2);
}
(整个代码可以在GitHub上找到,但我认为只有上面一段是相关的)
编辑:
我做了更多测试,发现:
- IDE 启动的应用程序和导出的应用程序都在
settings()
内正确检测到 displayWidth
和 displayHeight
分别为 2560 和 1440。
- IDE 启动的应用程序也在
settings()
之外正确检测到 displayWidth
和 displayHeight
,而导出的应用程序检测到 displayWidth
的 1707 和 displayWidth
的 960 displayHeight
在 settings()
之外。
- 两个应用的宽度和高度分别为 1562 和 1217。
- 似乎
displayDensity()
returns 在 IDE 中时为 1,在导出时为 2。此外,如果我在 IDE 中尝试将 pixelDensity()
强制为 2,我会收到一条警告,提示我的显示器不支持它。
我不知道为什么会发生这一切,但问题现在很清楚了:导出的应用程序认为我的 2560x1440 显示器实际上是 1707x960 显示器,所以在绘制 1562x1217 canvas 时它变得很大。
是的,我确实尝试了 pixelDensity(displayDensity())
,但这只会导致导出的应用 canvas 变得更大。
我发现这是由于 Processing 4 (beta 8) 的一些错误。
不幸的是,我没有时间也不愿意查明确切的问题,但是我可以分享我发现的一个可行的解决方案:降级到 Processing 3。
降级并 re-exporting 应用修复了它。
希望这个问题将在 Processing 4 的未来版本中得到解决。
我有一个简单的 Processing 3 应用程序,我刚刚迁移到 Processing 4。
旧版本有一些全局变量针对 1920x1080 显示器进行了微调,因此在移植时我决定使其更具动态性,并使这些全局变量取决于 displayWidth 和 displayHeight。
现在,当我通过 IDE 启动应用程序时,它工作正常:
我的卡片图像是 svg,所以我觉得它们看起来如此像素化很奇怪,所以我的猜测是由于某种原因 canvas 尺寸合适但它也被拉伸了。
这只是一个猜测,我可能完全错了。无论如何,尺寸不对,我想修复它,但我不知道如何修复。
谁能帮帮我?
我的代码如下:
//Global variables.
int frameRate = 30;
int cardWidth;
int cardHeight;
int border;
int edge;
int cardsetSpace;
int cardSpace;
int textSize;
int yOffset;
float savedGameWritingDurationLeft = 0;
int loadingWritingDurationLeft = 0;
boolean isLoading = false;
final String loadingWriting = "CARICAMENTO...";
final String savedGameWriting = "PARTITA SALVATA";
//Global variables.
void settings()
{
cardWidth = (int) (displayWidth / 15.36);
cardHeight = (int) (displayHeight / 6.17);
border = cardWidth / 10;
edge = border / 3;
cardsetSpace = border + edge * 2;
cardSpace = (int) (cardHeight / 4.6);
textSize = displayHeight / 54;
yOffset = textSize + 8;
size(cardWidth * 8 + cardsetSpace * 9, cardHeight * 5 + textSize * 2);
}
(整个代码可以在GitHub上找到,但我认为只有上面一段是相关的)
编辑:
我做了更多测试,发现:
- IDE 启动的应用程序和导出的应用程序都在
settings()
内正确检测到displayWidth
和displayHeight
分别为 2560 和 1440。 - IDE 启动的应用程序也在
settings()
之外正确检测到displayWidth
和displayHeight
,而导出的应用程序检测到displayWidth
的 1707 和displayWidth
的 960displayHeight
在settings()
之外。 - 两个应用的宽度和高度分别为 1562 和 1217。
- 似乎
displayDensity()
returns 在 IDE 中时为 1,在导出时为 2。此外,如果我在 IDE 中尝试将pixelDensity()
强制为 2,我会收到一条警告,提示我的显示器不支持它。
我不知道为什么会发生这一切,但问题现在很清楚了:导出的应用程序认为我的 2560x1440 显示器实际上是 1707x960 显示器,所以在绘制 1562x1217 canvas 时它变得很大。
是的,我确实尝试了 pixelDensity(displayDensity())
,但这只会导致导出的应用 canvas 变得更大。
我发现这是由于 Processing 4 (beta 8) 的一些错误。
不幸的是,我没有时间也不愿意查明确切的问题,但是我可以分享我发现的一个可行的解决方案:降级到 Processing 3。
降级并 re-exporting 应用修复了它。
希望这个问题将在 Processing 4 的未来版本中得到解决。