【问题标题】:ActionScript3 - addChild() relative to another objectActionScript 3 - 相对于另一个对象添加 Child()
【发布时间】:2012-03-07 11:09:42
【问题描述】:

我看过代码,其中一个对象可以相对于另一个对象添加,但我无法让它工作。我只是想画一个矩形,然后添加另一个相对于第一个更小的矩形

public var rectangle:Sprite = new Sprite();
public var other:Sprite = new Sprite();

rectangle.graphics.beginFill(0xFF0000);
rectangle.graphics.drawRect(250, 10, 100, 100);
rectangle.graphics.endFill();

other.graphics.beginFill(0x00FF00);
other.graphics.drawRect(0, 0, 50, 50);
other.graphics.endFill();
rectangle.addChild(other);
this.addChild(rectangle);

两个矩形最终都相对于舞台进行渲染。我在这里做错了什么?

【问题讨论】:

  • 你能画出你想要达到的目标吗?我很难理解你的意思。
  • 大正方形中的小正方形。我当然可以只使用绝对坐标,但本地坐标会让生活更轻松。我知道这是可能的,但我不确定我做错了什么。
  • 你的意思是你只想添加一个矩形,比如说,在另一个矩形的左边 10 像素?在这种情况下,您只需要使用:rectangle.x = firstRectangle.x + 10;
  • 啊,我想这行得通。我认为精灵能够包含其他显示对象作为子对象,并且子对象将是相对于父对象的位置?

标签: actionscript-3 addchild


【解决方案1】:

您可以将精灵作为子精灵添加到精灵中。但是您的问题是您从未更改过两个精灵的坐标。因此,您可以看到没有视觉差异,因为舞台和父精灵具有相同的坐标系。

尝试修改父精灵的坐标,你会看到子精灵随之移动。

现在要在一个大矩形中插入一个小矩形,您可以这样做:

public var rectangle:Sprite = new Sprite();
public var other:Sprite = new Sprite();

rectangle.graphics.beginFill(0xFF0000);
rectangle.graphics.drawRect(0, 0, 100, 100);
rectangle.graphics.endFill();

other.graphics.beginFill(0x00FF00);
other.graphics.drawRect(0, 0, 50, 50);
other.graphics.endFill();

rectangle.x = 250;
rectangle.y = 10;
other.x = 25;
other.y = 25;

rectangle.addChild(other);
this.addChild(rectangle);

【讨论】:

  • 啊!我的错误是认为 drawRect(x, y) 与精灵的 rectangle.x 和 rectangle.y 是一样的。现在知道了,谢谢!
【解决方案2】:

问题在于,当为drawRect(或任何其他形状)指定坐标时,无论它出现在屏幕上的哪个位置,该形状总是朝向0, 0。这很令人困惑,我不确定为什么要这样设置,但解决方案始终是在 0、0 处绘制形状,然后通过指定 x 和 y 来移动它们。那么您孩子的 x 和 y 将相对于父母的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多