addChild的X和Y值问题

时间:2013-07-28 01:22:04

标签: actionscript-3 flash-cs5

我有一个敌人类来处理我的怪物移动和攻击。在那个类中,我有另一个名为enemyMagic的类,它是一个空白的动画片段,作为我将制作的不同动画片段的大师类。

所以在敌人魔法类中,我添加了一个名为attack1

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

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

            }

在敌人阶级中,当敌人攻击某个位置时,我会添加敌人魔法。

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); 

出于某种原因,敌人可以跟踪与平铺的x和y完全相同的数字,但它不会在平铺上添加它。它在屏幕上添加了它。我想这可能是因为它从敌人的x和y开始然后计算?

所以我的问题是如何才能让敌人的电影剪辑准确地获得拼贴的位置?

1 个答案:

答案 0 :(得分:1)

你可以做两件事。首先,当你做一个普​​通的addChild()时,孩子的基本坐标系就是它的父母之一,这是你的Enemy实例,当然它在某个非零的地方。然后为它分配Main.tileset[k]的坐标,该坐标具有不同的父级(很可能是Main的实例)。这创造了你所说的距离。因此,为了在确切的磁贴上找到您的魔力,请使用this.globalToLocal(Main.tileset[k].localToGlobal(PZERO)) PZEROnew Point()常量(或写new Point()而不是PZERO,但这会创建另一个空的Point对象,并会快速升级),或者直接使用未更改的坐标对正在攻击的磁贴执行addChild()