我正在尝试使用Processing IDE(版本3.3.7)在Java中创建精灵。它运行良好,但由于我的color [] []数组仅接受十六进制格式而不是rgba格式,因此无法绘制透明像素。
<svg xmlns="http://www.w3.org/2000/svg" width="75" height="83" viewBox="0 0 75 83" fill="none">
<path d="M90.6668 0H0L49.9325 61.7586L90.6668 0Z" transform="translate(40.1452 82.6093) rotate(-115.609)" fill="#6F7800" />
</svg>
以上部分不是问题,但对于解决问题可能有用。
void setup(){ //This chunk of code is working fine
size(384, 216);
surface.setResizable(true);
noStroke();
renderSprite(Sprite.test, 100, 100);
}
void renderSprite(color[][] tex, int x, int y){
for(int i = 0; i < tex.length; i++){
for(int k = 0; k < tex[i].length; k++){
fill(tex[i][k]);
rect(x + i, y + k, 1, 1);
}
}
}
这是问题所在。使用(r,g,b,a)格式代替十六进制值之一会产生错误。 (期望RPAREN,找到',')我尝试创建使用rgba的颜色对象
static class Sprite{
static color[][] test = new color[][]{
{#FF0000, #00FF00},
{#0000FF, #FFFFFF}
};
}
可能用替换其中一个十六进制值,但它给了我同样的RPAREN错误。 (当使用十六进制代替时不会发生这种情况)
我想知道为什么不能在十六进制可以使用的地方使用rgba,以及是否有任何可能的解决方案。 rgb会产生相同的错误,因此我认为不透明本身不是问题。谢谢。
答案 0 :(得分:0)
处理提供了一种创建图像并通过其 PImage 对象指定每个像素的颜色和透明度的方法。
换句话说,既然已经完成,您就可以废弃要尝试实现的内容。
作为示例,以下代码将创建不透明度为50%的红色方块。
PImage sprite;
void setup() {
.
.
.
sprite = createImage(100, 100, ARGB);
for (int i = 0; i < sprite.pixels.length; i++) {
sprite.pixels[i] = color(255, 0, 0, 128);
}
.
.
.
}
void draw() {
.
.
.
image(sprite, 0, 0);
.
.
.
}
这具有缓存数据的额外优势,因此您无需遍历其像素即可在每一帧绘制精灵(不同于您的 renderSprite()方法)。