2016-04-14 6 views
-1

私は敵を作成するために2進数字を使用していますが、今度はイメージで置き換えようとしていますが、スプライトデータをイメージデータに置き換えようとするとエラーが発生しますデータの変更時に考慮するコード行。処理中にスプライトをイメージに変換する

class Enemy extends SpaceShip { 
    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"; 
    }       

    PImage img; 

    img = loadImage("image.png"); 
    } 

    void draw() { 
    image(img, x, y); 
    } 

エラー:

これは私が私のスプライトを描いた方法です:私は、私は何のエラー私は得続ける私のスプライトと私はイメージにそれを変更するために行うにしようとしています、とを作成する方法が含まれていますスプライトがどのように動いているのか、正しいサイズではないのか、スプライトが置き換えられるのですが、私はそれを得ています。

+0

実行可能な[mcve]を入力してください。これはあなたの全体のスケッチではないことに注意してください。たとえば、イメージを表示することを求めているだけの場合、プレーヤを移動させたり、弾丸を弾くためのコードは必要ありません。また、取得したエラーの正確なテキストを投稿してください。必要に応じてスクリーンショットを含めます。 –

答えて

0

投稿したコードスニペットはちょっと混乱します。あなたがイメージとしてバイナリ文字列のパターンを表示したいときに別の画像をロードしている理由は不明だ

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に変換する必要があります。あなたは0

を期待したいところ1と color(0)が期待 color(255)が使用されている

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); 

注意:あなたが直接このようなあなたのイメージを書き込むことができるように

あなたは直接、PImageのpixelsにアクセスすることができます

あるいは、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); 
    } 

} 
+0

助けてくれてありがとうが、私は問題を解決する別の方法を考え出した。スプライトデータを削除して新しいコードを作成するだけで、画像をすぐに呼び出すことができました。 –

関連する問題