2016-04-14 8 views
-1

Ich benutze binäre Ziffern, um einen Feind zu erstellen und jetzt suche ich es mit einem Bild zu ersetzen, aber ich bekomme immer Fehler, wenn ich versuche, die Sprite-Daten zu einem Bild zu ersetzen, da sie zu viele sind Codezeilen, die beim Ändern der Daten berücksichtigt werden müssen. Ich habe enthalten, wie ich meine Sprite erstellt und was ich versuche, es zu tun, um ein Bild zu ändern, und was Fehler Ich erhalte:Ändern von Sprite in Bild in Bearbeitung

Dies ist, wie ich meine Sprite zog:

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

Der Fehler Ich bekomme, dass, obwohl das Sprite ersetzt wird, es sich nicht bewegt, wie das Sprite war und auch nicht die richtige Größe hat.

+0

Bitte geben Sie eine [mcve] an, die wir ausführen können. Beachten Sie, dass dies nicht Ihre ganze Skizze sein sollte, nur ein Beispiel. Wenn Sie zum Beispiel nur ein Bild anzeigen möchten, brauchen wir keinen Code, um den Player zu bewegen oder Kugeln zu schießen. Bitte posten Sie auch den genauen Text aller Fehler, die Sie erhalten. Fügen Sie bei Bedarf Screenshots hinzu. –

Antwort

0

Das Code-Snippet, das Sie gepostet haben, ist ein wenig verwirrend. Zunächst wird die Syntax nicht ganz richtig ist, vielleicht gemeint Sie etwas wie folgt aus:

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

} 

Es ist unklar, warum Sie ein separates Bild geladen, wenn Sie das Binärkette Muster als Bild angezeigt werden soll. Wenn ich es richtig verstehe, möchten Sie die binäre Zeichenfolgendarstellung in eine PImage konvertieren.

können Sie direkt den PImage Zugang pixels, so dass Sie direkt Ihr Bild so schreiben könnte:

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

Hinweis color(255) verwendet wird, wo man es erwarten würde 1 und color(0) ist, wo Sie 0.

erwarten würden

Alternativ können Sie die String[] und jedes Zeichen jeder Zeile zu setzen Pixel eines PImage Traverse:

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

Basisdemo:

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

Danke für die Hilfe, aber ich habe einen anderen Weg gefunden, um das Problem zu lösen. Ich löschte einfach die Sprite-Daten und machte neuen Code, mit dem ich das Bild sofort aufrufen konnte. –

Verwandte Themen