Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AndEngine SetAlpha does not Effect child Entity

I'm having trouble setting Alpha on a child entity. I create a Rectangle entity and attach a Text entity to the rectangle like this:

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

Now I want to set the Alpha of this background entity to 0:

m_background.setAlpha(0.0f);

I was under the impression that the child entities would be affected as well, is that not the case? How could I do this except by setting alpha directly on the child entities? Is there a better way?

Thanks in advance, Zerd

like image 936
HashtagMarkus Avatar asked Apr 13 '26 18:04

HashtagMarkus


1 Answers

Unfortunately no, a child entity is only effected by the position of its parent (it's attached). If you want to have a Rectangle with a Text and apply the alpha modification on both of them, either you apply the alpha to the text as well or if you want to use that concept more often and do other stuff besides altering the alpha channel, you create your own class.

Something like this maybe:

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

It's just an example. If you need to do more with the rectangle (resizing etc) you just create your own methods that take care of the rectangle as well as of the text. The only thing that is automatically for both is the position (here I place the Text at the position 0,0 of the Rectangle).

Hope this helps

  • Christoph
like image 97
GameDroids Avatar answered Apr 16 '26 09:04

GameDroids