我怎么知道如果Scene2d演员的舞台坐标本地组

问题描述 投票:0回答:1

当我们在Scene2d的演员似乎不知道哪种坐标它。再说了,我们需要演员舞台COORDS。所以,如果它是一个演员直接添加到舞台那么它将有一个舞台的坐标,所以我们should't转换。但是,当演员属于一个集团,将拥有集团本地COORDS这些应转换。有没有办法知道是否COORDS应该转换或不?

对于演员直接加入到阶段actor.getParent()= actor.getStage()!;这样的做法是行不通的。

有一个2D游戏。我有一个SphereActor ClickListener,与touchDragged方法,在这里我得到的所有的演员“下”(在Z指数而言)的拖累SphereActor。因此,如果我们拖到SphereActor和它悬停在磁铁(在Z轴),它粘在磁铁。所以伪代码会看起来像这样:

 public void touchDragged(InputEvent event, float x, float y, int pointer) {

 Actor hit = getActorUnderThis();
 SphereActor thisActor = (SphereActor) event.getListenerActor();

 if (thisActor.canBeAttractedBy(hit)) {//true for magnets
     thisActor.setPosition(hit.getX(), hit.getY()); //stick to magnet
 }
}

这种方法只除非我们所有的磁体属于直接的阶段。或localToStage当我们所有的磁铁是一个集团内部的皈依会工作。

但也有不同类型的磁体,其中一些有动画,所以我做了他们作为一个集团,其中有些都没有,所以他们直接连接到舞台上。所以有上面的代码工作,我必须使它超级丑陋

if (hit instanceOf AnimatedMagnet) {
// convert coords to stage before use
}

现在球知道太多关于磁铁实现。如果有一百个不同的对象是什么有些人的组中,有些则不是?添加一个instanceof检查每一个看起来很可怕。

所以我的问题主要是结构的角度来看,我应该做的架构(以避免球磁铁太多的知识),而不仅仅是isBelongsToStageDirectly()方法。

java libgdx scene2d
1个回答
1
投票

您可以检查以查看是否有演员的母公司等于舞台的根集团。

当创建一个阶段将创建一个名为根演员添加到组实例。见Stage.java构造看到它初始化自动https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/scenes/scene2d/Stage.java

所以,你可以这样做 if (hit.getParent() == stage.getRoot()) { // this is something added directly to the root of the stage }

如果你进入嵌套组N多的时候,你可以递归while循环检查的父母,直到你到舞台根。

© www.soinside.com 2019 - 2024. All rights reserved.