2017-05-29 4 views
0

Ich versuche ein schwarzes Rechteck zu erstellen, das eingeblendet wird, wenn eine bestimmte Aktion in meiner Anwendung ausgeführt wird, aber ich kann keinen Weg finden, es zu tun. Ich habe eine neue Rectangle-Klasse, die Scene2D der Schauspieler und das ist erweitert, wie es aussieht:Wie man einen "handgemachten" Schauspieler verblassen lässt LibGDX

public class Rectangle extends Actor{ 
    private Texture texture; 

    public Rectangle(float x, float y, float width, float height, Color color) { 
     createTexture((int)width, (int)height, color); 

     setX(x); 
     setY(y); 
     setWidth(width); 
     setHeight(height); 
    } 

    private void createTexture(int width, int height, Color color) { 
     Pixmap pixmap = new Pixmap(width, height, Pixmap.Format.RGBA8888); 
     pixmap.setColor(color); 
     pixmap.fillRectangle(0, 0, width, height); 
     texture = new Texture(pixmap); 
     pixmap.dispose(); 
    } 

    @Override 
    public void draw(Batch batch, float parentAlpha) { 
     Color color = getColor(); 
     batch.setColor(color.r, color.g, color.b, color.a * parentAlpha); 
     batch.draw(texture, getX(), getY(), getWidth(), getHeight()); 
    } 
} 

Das Problem ist, wenn ich das Rechteck zu zeichnen, ich habe eine konstante parentAlpha einzustellen. Wenn ich anrufe:

rectangle.addAction(alpha(0.5f)); 

Es wird nichts tun, weil das Alpha sich nicht ändert. Gibt es eine Möglichkeit, es ohne feste Eltern Alpha zu tun?

Antwort

0

Was bedeuten feste ElternAlpa?

Von Ihrer Frage, Sie wollen fade in ein schwarzes Rechteck. Um dies zu erreichen, setzen Sie den Alpha-Wert Ihres Schauspielers auf Null und fügen Sie fadeIn() Action hinzu, wenn Sie auf dem Bildschirm erscheinen möchten.

public class MultiLine extends ApplicationAdapter { 

    Stage stage; 

    @Override 
    public void create() { 

    stage=new Stage(); 

    RectActor rectActor=new RectActor(100,100,100,100, Color.BLACK); 
    RectActor rectActor1=new RectActor(150,150,100,100, Color.BLACK); 

    stage.addActor(rectActor1); 
    stage.addActor(rectActor); 

    rectActor.getColor().a=0;    //Make transparent 
    rectActor.addAction(Actions.fadeIn(1f)); // In one second rectActor appear on Screen. 
    } 

    @Override 
    public void render() { 

    Gdx.gl.glClearColor(1,0,0,0); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    stage.draw(); 
    stage.act(); 
    } 

    @Override 
    public void dispose() { 
     stage.dispose(); 
    } 
} 

Rectangle ist bereits in API, so dass es besser ist, andere Namen zu verwenden.

public class RectActor extends Actor { 

    private Texture texture; 

    public RectActor(float x, float y, float width, float height, Color color) { 
     createTexture((int)width, (int)height, color); 

     setX(x); 
     setY(y); 
     setWidth(width); 
     setHeight(height); 
    } 

    private void createTexture(int width, int height, Color color) { 
     Pixmap pixmap = new Pixmap(width, height, Pixmap.Format.RGBA8888); 
     pixmap.setColor(color); 
     pixmap.fillRectangle(0, 0, width, height); 
     texture = new Texture(pixmap); //creating texture for each RectActor is not profitable so create once and share in all RectActor 
     pixmap.dispose(); 
    } 

    @Override 
    public void draw(Batch batch, float parentAlpha) { 
     Color color = getColor(); 
     batch.setColor(color.r, color.g, color.b, color.a * parentAlpha); 
     batch.draw(texture, getX(), getY(), getWidth(), getHeight()); 
    } 
} 
+0

Ich weiß, es klingt komisch, aber ist es möglich, dies zu erreichen, ohne das Rechteck auf eine Bühne hinzufügen? – vladutelu

+0

Warum machst du dein Rect als 'Actor', wenn du nicht in die 'Stage' einfügen willst? Wie Sie Ihren 'Actor' manuell nicht durch Stages' draw() 'Methode zeichnen wollen. Es ist besser, ein "Sprite" -Objekt anstelle von "Actor" zu erstellen, das auch eine eigene Farbe hat und seinen Alpha-Wert manuell entsprechend der logischen Berechnung ändert. Fragen Sie, wenn Sie Hilfe benötigen. – Aryan

+0

Ich erschaffe es als Schauspieler, weil der Schauspieler api bereits die eingebauten Aktionen für Einblenden, Ausblenden usw. hat und es spart mir etwas Zeit. Ich weiß nicht, wie ich eine Aktion erstellen soll, die in einer bestimmten Zeit von mir selbst ausgeführt wird. – vladutelu

Verwandte Themen