2016-07-13 8 views
0

Sprite bucketImage, Hintergrund, r1, r2, r5, r10, r20, r50, r100, r200, r500, k1, k2, k5, k10, k20, k50;Sprites-Array verschmilzt die beim Rendern von Sprites

Ich erstelle Objekte in der Methode namens spawnRaindrop(). Ich habe eine Reihe von Sprites und ich möchte Sprites in dem Zyklus geändert werden, wie es jetzt ist, es funktioniert, aber die Bilder werden miteinander verschmolzen.

sprites = new Sprite[15]; 
    r1 = new Sprite(atlas.findRegion("r1")); 
    r1.flip(false, true); 
    r2 = new Sprite(atlas.findRegion("r2")); 
    r2.flip(false, true); 
    r5 = new Sprite(atlas.findRegion("r5")); 
    r5.flip(false, true); 
    r10 = new Sprite(atlas.findRegion("r10")); 
    r10.flip(false, true); 
    r20 = new Sprite(atlas.findRegion("r20")); 
    r20.flip(false, true); 
    r50 = new Sprite(atlas.findRegion("r50")); 
    r50.flip(false, true); 
    r100 = new Sprite(atlas.findRegion("r100")); 
    r100.flip(false, true); 
    r200 = new Sprite(atlas.findRegion("r200")); 
    r200.flip(false, true); 
    r500 = new Sprite(atlas.findRegion("r500")); 
    r500.flip(false, true); 
    k1 = new Sprite(atlas.findRegion("k1")); 
    k1.flip(false, true); 
    k2 = new Sprite(atlas.findRegion("k2")); 
    k2.flip(false, true); 
    k5 = new Sprite(atlas.findRegion("k5")); 
    k5.flip(false, true); 
    k10 = new Sprite(atlas.findRegion("k10")); 
    k10.flip(false, true); 
    k20 = new Sprite(atlas.findRegion("k20")); 
    k20.flip(false, true); 
    k50 = new Sprite(atlas.findRegion("k50")); 
    k50.flip(false, true); 
    sprites[0] = r1; 
    sprites[1] = r2; 
    sprites[2] = r5; 
    sprites[3] = r10; 
    sprites[4] = r20; 
    sprites[5] = r50; 
    sprites[6] = r100; 
    sprites[7] = r200; 
    sprites[8] = r500; 
    sprites[9] = k1; 
    sprites[10] = k2; 
    sprites[11] = k5; 
    sprites[12] = k10; 
    sprites[13] = k20; 
    sprites[14] = k50; 

Spiel Erstellen Objekt

private void spawnRaindrop() { 
    Rectangle raindrop = new Rectangle(); 
    raindrop.x = MathUtils.random(0, 800 - 100); 
    raindrop.y = 480; 
    raindrop.width = 100; 
    raindrop.height = 100; 
    raindrops.add(raindrop); 
    lastDropTime = TimeUtils.nanoTime(); 
} 

Erstellen und Array Sprite

game.batch.draw(bucketImage, bucket.x, bucket.y); 

    for (Rectangle raindrop : raindrops) { 
     for (int i = 0; i < sprites.length - 1; i++) { 

      game.batch.draw(sprites[i], raindrop.x, raindrop.y); 
     } 
    } 
    game.batch.end(); 

RESULT zeichnen: angebracht ich das Bild, und es kann, dass die Bilder aufeinander ansammeln ersichtlich

enter image description here

+0

Also was genau ist deine Frage? –

+0

@ Edvin Tenovim Wie zeichne ich ein Array von Sprits durch game.batch.draw (Sprites, raindrop.x, raindrop.y); korrekt??? – upward

Antwort

1

Es sieht so aus, als ob Ihr Problem darin besteht, dass Sie dieselben raindrop.x und raindrop.y Koordinaten für alle Sprites verwenden!

for (Rectangle raindrop : raindrops) 
{ 
    for (int i = 0; i < sprites.length - 1; i++) 
    { 
     // The following will draw ALL sprites at the same location! 
     game.batch.draw(sprites[i], raindrop.x, raindrop.y); 
    } 
} 

Was Sie versuchen können, ist eine neue Klasse (zum Beispiel) genannt zu erstellen: Raindrops und dann in dieser Klasse halten einen einzelnen x, y für jedes einzelne Bildkoordinaten:

class Raindrop 
{ 
    Vector2 coordinates; 
    Sprite sprite; 
} 

dann in Ihre spawnRaindrop Methode, erstellen Sie ein Array dieser Regentropfen und ein individuelles (zufälliges?) Bild für jeden.

EDIT: Ich schrieb den folgenden Code direkt hier ohne etwas zu testen, so wird es wahrscheinlich haben einige Fehler, aber nichts, was Sie sollten sich nicht beheben können, zu ...

// This goes into your initialisation method 
String regions[] = {"r1", "r2", "r5", "r10", "etc etc etc"} 
Raindrop raindrops[] = new Raindrop[15]; 
for (int i = 0; i < raindrops.length; i++) 
{ 
    raindrop[i] = new Raindrop(); 
    raindrop[i].coordinate.x = MathUtils.random(screenWidth); 
    raindrop[i].coordinate.y = MathUtils.random(screenHeight); 
    raindrop[i].sprite = atlas.findRegion(regions[(int)MathUtils.random(regions.length)]); 
} 

Dann Haupt Schleife sollte in etwa so aussehen:

game.batch.draw(bucketImage, bucket.x, bucket.y); 
for (Raindrop raindrop : raindrops) 
{ 
    game.batch.draw(raindrop.sprite, raindrop.coordinate.x, raindrop.coordinate.y); 
} 
game.batch.end(); 
+0

Ja, ich möchte die Sprites zufällig zeichnen. wie man es implementiert, helfen? – upward

+0

mein Problem ähnlich diesem | http://stackoverflow.com/questions/30198058/libgdx-render-for-rectangle-array-different-textures – upward

+0

Regentropfen Regentropfen [] = neuer Regentropfen [15]; Ich habe keine Klasse Ich erstelle ein Objekt Array Regentropfen; sieht dies, mein Beispiel https://github.com/libgdx/libgdx/wiki/A-simple-game Um die Erstellung von Regentropfen zu erleichtern wir eine Methode schreiben würden spawnRaindrop() aufgerufen, die ein neues Rechteck instanziiert , setzt es auf eine zufällige Position am oberen Rand des Bildschirms und fügt sie dem Regentropfen-Array hinzu. – upward

Verwandte Themen