3 Stimmen

AndEngine SetAlpha hat keine Auswirkung auf untergeordnete Entität

Ich habe Probleme, Alpha auf eine untergeordnete Entität zu setzen. Ich erstelle eine Rechteck-Entität und hänge eine Text-Entität an das Rechteck wie folgt an:

m_background = new Rectangle(0.0f, 0.0f, m_activity.getCamera().getWidth(), m_activity.getCamera().getHeight(), m_activity.getVertexBufferObjectManager());
m_background.setColor(0.0f, 0.0f, 0.0f);

FontFactory.setAssetBasePath("font/");

final ITexture fontTexture = new BitmapTextureAtlas(m_activity.getTextureManager(), 256, 256, TextureOptions.BILINEAR);
this.m_Font = FontFactory.createFromAsset(m_activity.getFontManager(), fontTexture, m_activity.getAssets(), "Droid.ttf", 48, true, android.graphics.Color.WHITE);
this.m_Font.load();

Text text = new Text(100, 300, this.m_Font, "LoadingScreen", new TextOptions(HorizontalAlign.RIGHT), m_activity.getVertexBufferObjectManager());
    m_background.attachChild(text);

Jetzt möchte ich das Alpha dieses Hintergrundobjekts auf 0 setzen:

m_background.setAlpha(0.0f);

Ich hatte den Eindruck, dass auch die untergeordneten Einrichtungen betroffen sind, ist das nicht der Fall? Wie könnte ich dies tun, außer indem ich Alpha direkt auf die untergeordneten Entitäten setze? Gibt es einen besseren Weg?

Vielen Dank im Voraus, Zerd

5voto

GameDroids Punkte 5493

Leider nein, ein untergeordnetes Objekt wird nur von der Position seines Elternteils beeinflusst (es ist angehängt). Wenn Sie ein Rechteck mit einem Text haben und die Alphamodifikation auf beide anwenden wollen, wenden Sie entweder die Alphamodifikation auch auf den Text an oder Sie erstellen eine eigene Klasse, wenn Sie dieses Konzept häufiger verwenden und neben der Änderung des Alphakanals noch andere Dinge tun wollen.

Vielleicht so etwas wie das hier:

public class Background extends Entity {

    private Text text;

    public Background(float x, float y, float width, float height, Font font, String textMessage, VertexBufferObjectManager vertexBufferObjectManager) {
         this.setPosition(x, y);
         this.attachChild(new Rectangle(0, 0, width, height, vertexBufferObjectManager));
         this.text = new Text(0, 0, font, textMessage, vertexBufferObjectManager);
         this.attachChild(text);
    }

    @Override
    public void setAlpha(float pAlpha) {        
         super.setAlpha(pAlpha);
         this.text.setAlpha(pAlpha);
    }   
}

Das ist nur ein Beispiel. Wenn Sie mehr mit dem Rechteck tun müssen (Größenänderung usw.), erstellen Sie einfach Ihre eigenen Methoden, die sich sowohl um das Rechteck als auch um den Text kümmern. Das einzige, was automatisch für beide gilt, ist die Position (hier platziere ich den Text an der Position 0,0 des Rechtecks).

Ich hoffe, das hilft

  • Christoph

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X