我正在制作一个 LibGdx 应用程序作为 Android 片段嵌入。
我在传递要在 LibGdx 中使用的 Android 颜色资源时遇到问题
这是我的颜色
<resources>
<color name="red">#FF0000</color>
</resources>
Run Code Online (Sandbox Code Playgroud)
我通过这种颜色如下
ContextCompat.getColor(getContext(),R.color.red)
Run Code Online (Sandbox Code Playgroud)
这将返回一个int我转换为float
我有一个纹理,它是一个我着色的白色圆圈
spriteCircle.setColor(myColor)
Run Code Online (Sandbox Code Playgroud)
这要求Sprite班级public void setColor (float color)
输出不是红色而是不同的颜色
使用来自 LibGdx 的 Color 常量之一会com.badlogic.gdx.graphics.Color产生正确的结果,因此我的纹理可以正确着色,因此我可以排除这种情况。
我的理论是 Android 颜色的格式与 LibGdx 不同
我写了这个方法来帮助转换
private com.badlogic.gdx.graphics.Color convertColorToLibGdxColor(int color) {
float alpha = Color.alpha(color);
float red = Color.red(color);
float green = Color.green(color);
float blue = Color.blue(color);
return new com.badlogic.gdx.graphics.Color(red, green, blue, alpha);
}
Run Code Online (Sandbox Code Playgroud)
注意Color.red方法来自android.graphics.Color类
/**
* Return the red component of a color int. This is the same as saying
* (color >> 16) & 0xFF
*/
public static int red(int color) {
return (color >> 16) & 0xFF;
}
Run Code Online (Sandbox Code Playgroud)
有一种方法对于蓝色、绿色和 alpha 是好的。
然后我public void setColor (Color tint)从Sprite班上打电话
有趣的是,如果我使用来自 Android 的 Color 常量,android.graphics.Color例如
@ColorInt public static final int RED = 0xFFFF0000;
Run Code Online (Sandbox Code Playgroud)
它工作正常,但不是我上面发布的颜色资源
当我比较两者时,我可以看到我的颜色资源省略了 alpha 通道,所以我决定填充那部分,所以现在是
<resources>
<color name="red">#FFFF0000</color>
</resources>
Run Code Online (Sandbox Code Playgroud)
但是,我仍然遇到同样的问题
调试ContextCompat.getColor(getContext(),R.color.red)
产生一个值0xFFD4172A。我想问题出在这里
tl;dr 是否可以翻译 Android 颜色资源以在 LibGdx 中使用?
谢谢
小智 5
在 libgdx 颜色类中实际上有一个方法。 https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/Color.html#argb8888ToColor-com.badlogic.gdx.graphics.Color-int-
它也是静态方法,但不是返回新颜色,而是更改现有颜色。
| 归档时间: |
|
| 查看次数: |
1406 次 |
| 最近记录: |