【问题标题】:LibGDX - How does the parent of an Actor class work?LibGDX - Actor 类的父类如何工作?
【发布时间】:2020-12-27 07:23:22
【问题描述】:

这里是初学者,所以这个问题可能有点愚蠢,我很抱歉。

我正在尝试为我正在开发的游戏制作菜单,并且我正在使用 Scene2d。 我知道父类和子类是如何工作的,但我在试图理解 Actor 类时遇到了困难。

我创建了一个名为“Actor1”的类,它继承自 Actor,覆盖了 draw 方法并简单地绘制了默认的 libgdx 图像:

public class Actor1 extends Actor{

    Texture tex = new Texture("badlogic.jpg");

    public void draw(Batch batch, float alphaParent){
        batch.draw(tex, 0, 0);
    }   
}

它工作正常,但我对“alphaParent”参数有点困惑。所以我做了一些研究,我已经阅读了大量关于 parent 类的文章和问题,例如 github wiki:

如果 parentAlpha 与该 actor 的 alpha 如图所示组合,子 actor 将受到父级半透明的影响。

传递给draw的Batch配置为在父级的坐标中绘制,所以0,0是父级的左下角。

据我所知,我猜Actor 类是Actor1 类的父级。但如果是这样,“父母的坐标”或“父母的半透明度”是什么?它们在哪里初始化或定义,我在哪里可以更改它们?这些参数是来自Actor 类还是由其他东西定义的,比如舞台?

【问题讨论】:

    标签: java libgdx scene2d


    【解决方案1】:

    不,当它谈论父母时,它不是在谈论类层次结构。它谈论的是包含此 Actor 的 Group Actor 实例。 Group 是 Actor 的子类,可以有 Actor 子类。如果您将一个 Actor 直接添加到 Stage,它的父级是 root Group,它位于 (0, 0),因此您的 Actor 的位置是相对于世界的。

    但是你可以将一个 Actor 添加到一个 Group 中,然后它的位置是相对于它的父位置的。而alphaParent参数就是父级的透明度级别。

    draw() 方法中,必须始终在绘制之前设置 Batch 的颜色,因为无法保证当前设置的颜色是什么。如果您希望 Group 的子级与父级一起正确淡入和淡出,则应应用 Actor 的父级 alpha。

    典型的绘制方法如下所示:

        public void draw(Batch batch, float alphaParent){
            Color color = getColor();
            batch.setColor(color.r, color.g, color.b, color.a * parentAlpha);
            batch.draw(tex, 0, 0);
        } 
    

    【讨论】:

      猜你喜欢
      • 2020-04-26
      • 2012-09-11
      • 1970-01-01
      • 2017-02-21
      • 2016-12-25
      • 1970-01-01
      • 2015-12-08
      • 2016-04-15
      • 2015-10-19
      相关资源
      最近更新 更多