【问题标题】:issue with addChild's X and Y valueaddChild 的 X 和 Y 值问题
【发布时间】:2013-07-28 01:22:03
【问题描述】:

我有一个 Enemy 类来处理我的怪物移动和攻击。在那个类中,我有另一个类名为enemyMagic,它是一个空白影片剪辑,用作我将制作的不同影片剪辑的大师班。

所以在enemyMagic 类中,我添加了一个名为attack1 的movieclip

public var attack1:Attack1 = new Attack1;    
       public function EnemyMagic() {
                ////////////CREATE THE TIMER//////////
                masterEnemyAttackTimer.addEventListener(TimerEvent.TIMER, mastertimer);

                ////////////ATTACKS/////////
                //TIER 1//
                addChild(attack1);

            }

而在敌人类中,我会在敌人攻击某个位置时添加enemyMagic。

for (var k:int = 0; k < Main.tileset.length; k++)
            {

                if (! Main.tileset[k].tileMiddle.hitTestObject(this.enemyVisionPoint))
                {
                    if (Main.tileset[k].tileHP !== 0)
                    {
                        attackoptions.push(Main.tileset[k]);
                    }
                    if (Main.tileset[k].tileMiddle.hitTestObject(Main.player.visionPoint))
                    {
                        addChild(enemymagic);
                        Main.tileset[k].outline.gotoAndStop("attack");
                        this.enemymagic.x = (Main.tileset[k].x);
                        this.enemymagic.y = (Main.tileset[k].y);
                        trace(enemymagic.x, enemymagic.y, Main.tileset[k].x, Main.tileset[k].y); 

出于某种原因,enemymagic 正在追踪与瓷砖的 x 和 y 完全相同的数字,但它没有将其添加到瓷砖上。它将它添加到屏幕之外。我想可能是因为它从敌人的 x 和 y 开始然后计算?

所以我的问题是我怎样才能让enemymagic 影片剪辑准确地出现在图块的位置上?

【问题讨论】:

    标签: actionscript-3 flash-cs5


    【解决方案1】:

    你可以做两件事。首先,当你做一个普​​通的addChild() 时,子的基本坐标系是它的父坐标系,它是你的Enemy 实例,它当然在某个非零的地方。然后你给它分配Main.tileset[k] 的坐标,它有一个不同的父对象(很可能是Main 的实例)。这创造了你所说的距离。所以,为了将你的魔法定位在确切的瓷砖上,要么使用this.globalToLocal(Main.tileset[k].localToGlobal(PZERO)),其中PZEROnew Point()常量(或者写new Point()而不是PZERO,但这会创建另一个空的Point对象并且会迅速升级),或者直接对您正在攻击的图块执行addChild(),并使用未更改的坐标。

    【讨论】:

    • 感谢您的回答。为了澄清,我必须创建一个新点。我应该输入一个特定的 x 和 y 值吗?另外,我得到一个隐含的强制错误,我猜这意味着魔法的 x 值与 PZERO 不兼容。我确实考虑将孩子添加到 Tile 类本身,但我认为将与敌人有关的所有内容都放在敌人身上是理想的。谢谢大佬!
    • public static const PZERO:Point=new Point(); 这就是你声明零点的方式。诀窍是,您的图块的零点(在设计时等于锚点)通常是图块的左上角或死点。如果是前者,则声明PCENTER 等于瓷砖的中心。关于增加敌人 - 想象一下你投掷魔法,然后将敌人向左旋转 90 度。巴姆,你的魔法不再在选定的瓷砖上。一旦有任何东西从敌人身上分离出来(子弹、魔法、破损的零件等),最好不要将它们addChild() 给敌人,而是添加到一个可以容纳所有东西的类中。
    • 好的。我确实让敌人每10秒移动一次,所以魔法会受到影响。我最好的选择是将它添加到磁贴上,甚至是主类?
    猜你喜欢
    • 2011-03-28
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 2022-08-19
    • 2011-06-07
    • 1970-01-01
    相关资源
    最近更新 更多