2013-08-16 60 views
0

我想更改父容器內2個子容器的座標。原來,我正在循環通過父容器的孩子,並單獨更改他們的x,y ......但是,這樣做更有意義,只需更改父容器的x,y ...CreateJS - 使用父級更新子級座標

問題在於...我需要以獲得每個孩子的個人改變的座標...但改變父容器的座標似乎並沒有改變孩子的座標相對於舞臺...

問題是...我怎麼能得到當我改變父母的x,y時,更改x,y

感謝


所以,如果我走動的孩子們的容器本身:

function NPCMove() { 
if (pointA) { 
    if (ContainerOfAnimals.x < 400) { 
     ContainerOfAnimals.x +=2; 
    } 
    else { 
     pointA = false; 
     pointB = true; 
    } 
} 
else if (pointB) { 
    if (ContainerOfAnimals.x > 100) { 
     ContainerOfAnimals.x-=2; 
    } 
    else { 
     pointB = false; 
     pointA = true;     
    } 
} 
} 

我可以檢查玩家的距離,每個孩子在父容器本身使用localToGlobal? (NPC_Array包含父容器)

for (var i = 0; i < NPC_Array.length; i++) { 
//get children containers of each big Container 
for (var j = 0; j < NPC_Array[i].children.length; j++) { 
    //need child.x's global location now... 
    var pt = NPC_Array[i].localToGlobal(NPC_Array[i].children[j].x, NPC_Array[i].children[j].y); 

    var distX = Math.abs(players_Array[0].x - pt.x); 
    var distY = Math.abs(players_Array[0].y - pt.y); 

    if (distX < 50 && distY < 50) { 
     //Player is near child... 

回答

2

你會做一個localToGlobal:

var stage = new createjs.Stage("test"); 

var p = new createjs.Container(); 
p.x = 200; 
p.y = 200; 

var c1 = new createjs.Shape(); 
c1.graphics.beginFill("#FF0000"); 
c1.graphics.drawRect(0, 0, 100, 100); 
c1.graphics.endFill(); 

var c2 = new createjs.Shape(); 
c2.graphics.beginFill("#00FF00"); 
c2.graphics.drawRect(0, 0, 100, 100); 
c2.graphics.endFill(); 
c2.x = 100; 

p.addChild(c1); 
p.addChild(c2); 

stage.addChild(p); 

stage.update(); 

var pt = p.localToGlobal(c2.x, c2.y); 
alert("Stage x of c2: " + pt.x); 

See it in action

+0

感謝安德魯。請參閱上面的編輯...我是否正確使用它? – Growler

+0

安德魯,這個問題是...現在如果我直接改變孩子的x ...而不是父母?我測試了做'ContainerOfAnimals.children [0] .x- = 2;'移動孩子......現在距離檢查器將不起作用...在那種情況下,當我進行距離檢查時......我必須檢查'localToLocal'和'localToGlobal'座標嗎? – Growler

+0

對象player_Arr [0]是舞臺的直接子項嗎?你想確保你在相同的座標空間比較項目。如果玩家確實是舞臺上的直接子女,那麼你首先要做一個localToGlobal來獲取全局(舞臺)座標空間中的動物x/y,然後比較它們。我已更新小提琴以更適用於您的項目。 [檢查出來](http://jsfiddle.net/dR7Ur/1/)。值得注意的是,這並不影響形狀的實際寬度。你可能想研究一個好的碰撞算法,除非這純粹是一個學習exp。 – Andrew