2015-12-28 111 views
0

我派发了一个活动,让子弹在页面上产生。但子弹应该位于页面的孩子应该在的区域。有一个页面MovieClip,其中有一个名为玩家和玩家的孩子是。所以我试图保持子弹的位置和旋转与玩家的枪一样。所以我需要访问Page One的孩子的孩子。玩家和炮塔正在使用实例名称而不是变量。as3 - 如何进入孩子的孩子?

我试过这段代码,但子弹在页面中产生,但不会在炮塔的位置产生。此事件位于PageOne类中。

function fire(e:Event) 
{ 
    var b:Bullet = new Bullet(); 
    b.rotation = player.turret.rotation; 
    b.x = player.turret.x + player.turret.width * Math.cos(player.turret.rotation/180 * Math.PI); 
    b.y = player.turret.y + player.turret.width * Math.sin(player.turret.rotation/180 * Math.PI); 
    addChild(b); 
} 
+0

我不知道如果我理解你。但是你的问题是子弹不是在炮塔口的位置产生的? – ElChiniNet

+0

是的,因为我似乎无法访问player.turret的位置,因为它不会让我以某种方式访问​​孩子的孩子。 – Crook

+0

您可以访问播放器“MovieClip”内的任何实例化子项。你有什么错误吗?请记住,如果你使用不同的范围,你需要翻译coords。 – ElChiniNet

回答

0

您可以访问炮塔的孩子。问题是,你需要将COORDS转换炮塔MovieClip内的坐标中PAGEONE MovieClip内:

var b: Bullet = new Bullet(); 

var turretpoint:Point = new Point(player.turret.width, 0); 
var pagepoint: Point = this.globalToLocal(player.turret.localToGlobal(turretpoint)); 

b.rotation = (player.scaleX > 0) ? player.turret.rotation : 180 - player.turret.rotation; 
b.x = pagepoint.x; 
b.y = pagepoint.y; 
addChild(b); 
+0

对不起,我遵循了你的步骤,但它似乎并没有做到这一点。我不确定这个问题到底是什么......子弹似乎在错误的方向上产卵,也没有产生炮塔的枪口。 – Crook

+0

用代码发一点闪光以查看问题。如果炮塔旋转,则需要将其内部的坐标转换。 – ElChiniNet

+0

https://www.dropbox.com/s/5bnao3hcybkur96/Shooting.zip?dl=0 – Crook