您发布的代码 sn-p 有点令人困惑。
首先,语法不太正确,也许你的意思是这样的:
class Enemy extends SpaceShip {
PImage img;
Enemy(int xpos, int ypos) {
x = xpos;
y = ypos;
//assuming sprite is inherited from SpaceShip ?
sprite = new String[5];
sprite[0] = "1011101";
sprite[1] = "0101010";
sprite[2] = "1111111";
sprite[3] = "0101010";
sprite[4] = "1000001";
//you are loading an image, but I see no use of the sprite
img = loadImage("image.png");
}
void draw() {
image(img, x, y);
}
}
当您想将二进制字符串模式显示为图像时,为什么要加载单独的图像尚不清楚。如果我理解正确,您想将二进制字符串表示形式转换为 PImage。
你可以直接访问PImage的pixels,所以你可以直接这样写你的图像:
PImage sprite = new PImage(7,5,RGB);
sprite.pixels = new int[]{color(255),color( 0 ),color(255),color(255),color(255),color( 0 ),color(255),
color( 0 ),color(255),color( 0 ),color(255),color( 0 ),color(255),color( 0 ),
color(255),color(255),color(255),color(255),color(255),color(255),color(255),
color( 0 ),color(255),color( 0 ),color(255),color( 0 ),color(255),color( 0 ),
color(255),color( 0 ),color( 0 ),color( 0 ),color( 0 ),color( 0 ),color(255)};
sprite.updatePixels();
noSmooth();
image(sprite,0,0,70,50);
注意 color(255) 用于您期望 1 的位置,color(0) 是您期望 0 的位置。
或者,您可以遍历String[] 和每行的每个字符来设置PImage 的像素:
PImage fromBinaryStrings(String[] sprite){
int h = sprite.length;
int w = sprite[0].length();
PImage result = new PImage(w,h,RGB);
for(int y = 0 ; y < h; y++){
String row = sprite[y];
for(int x = 0; x < w; x++){
if(row.charAt(x) == '1'){
result.set(x,y,color(255));
}else{
result.set(x,y,color(0));
}
}
}
return result;
}
基本演示:
void setup(){
noSmooth();
scale(10);
Enemy e = new Enemy(0,0);
e.draw();
}
PImage fromBinaryStrings(String[] sprite){
//determine height: number of lines
int h = sprite.length;
//determine width: length of a line
int w = sprite[0].length();
//create an image
PImage result = new PImage(w,h,RGB);
//traverse rows
for(int y = 0 ; y < h; y++){
//access row string
String row = sprite[y];
//traverse cols
for(int x = 0; x < w; x++){
//check each char's value and set the color accordingly
if(row.charAt(x) == '1'){
result.set(x,y,color(255));
}else{
result.set(x,y,color(0));
}
}
}
return result;
}
class SpaceShip{
int x,y;
String[] sprite;
}
class Enemy extends SpaceShip {
PImage img;
Enemy(int xpos, int ypos) {
x = xpos;
y = ypos;
sprite = new String[5];
sprite[0] = "1011101";
sprite[1] = "0101010";
sprite[2] = "1111111";
sprite[3] = "0101010";
sprite[4] = "1000001";
img = fromBinaryStrings(sprite);
}
void draw() {
image(img, x, y);
}
}