LIBGDX之Actor

Actor:演员类

Actor作为一个2D场景的图形节点,它具有以下属性:

  1. (position)位置 :position 以父节点作为参照物,指该Actor未旋转(未缩放的情况下),以左下角作为参考点的 相对位置
  2. 大小 指Actor的纹理大小width and height
  3. (origin)中心原点: Actor的中心原点,主要用于旋转或缩放
  4. 缩放
  5. 旋转
  6. Z轴
  7. 颜色等属性

一个演员随着时间的推移需要执行一系列的动作。通常是改变 它的位置(移动)、缩放等等进行表现。[这些动作可以在act(float).Action等上进行执行]

Actor有两种与之相关的监听器,监听器会将所接收到的事件反馈给 演员或其子类,常规的监听器被设计成允许演员响应已交付的事件.而捕获监听器则允许父容器在 子演员之前处理事件。查看fire()方法可以了解更多。

InputListener 监听器可以捕获基本的输入事件,更复杂的监听器(如ClickListener和ActorGestureListener)配合 InputListener 可以识别多点触摸以及挤压操作.

draw(@Nullable Batch batch,float parentAlpha)方法

Actor#draw()方法默认是空实现的,该方法可以很方便的实现 一个TextureRegion的旋转或缩放,并且默认情况下,batch(我们可以理解为画布)的batch.begin()/batch.end()已经默认调用。
绘制Actor的时候,我们需要把Actor的alpha*parentAlpha再执行绘制.
以下是一个实现示例:

@Override
    public void draw(Batch batch, float parentAlpha) {
        super.draw(batch, parentAlpha);
        if (region == null || !isVisible()) {
            return;
        }
        // 备份 batch 原本的 Color
        Color tempBatchColor = batch.getColor();
        // 获取演员的 Color
        Color color = getColor();
        // 将演员的 Color 结合 parentAlpha 设置到 batch
        batch.setColor(color.r, color.g, color.b, color.a * parentAlpha);
        // 结合演员的属性绘制表示演员的纹理区域
        batch.draw(
                region,
                getX(), getY(),
                getOriginX(), getOriginY(),
                getWidth(), getHeight(),
                getScaleX(), getScaleY(),
                getRotation()
        );
        // 还原 batch 原本的 color
        batch.setColor(tempBatchColor);
    }

act(float delta)

逐帧更新Actor的行为,通常在此方法上进行逻辑代码的更新,默认的空实现是 Action.act(float)

boolean fire(@NotNull Event event)

将该Actor设置为Event事件并根据需要将事件传播给Actor及其父容器,如果该演员不在舞台上(stage),必须在执行该方法之前,将Actor设置到舞台上再执行fire方法。
事件的通知分为两个阶段:
1.在捕获阶段,从父容器 往下通知 到各个 演员Actor节点
2.第二阶段,从演员节点开始,往上通知到父容器(如果Event.getBubbles()返回true的请情况下)
当然如果 事件中途被停止了,那么它就不会继续往下通知。此时fire方法返回true。

你可能感兴趣的:(LIBGDX之Actor)