【问题标题】:CreateJS - updating children coordinates with parentCreateJS - 与父级更新子级坐标
【发布时间】:2013-08-16 17:18:42
【问题描述】:

我想更改父容器中 2 个子容器的坐标。最初,我循环遍历父容器的子容器并单独更改它们的x,y...但随后更改父容器的x,y 更有意义...

问题是...我需要获取每个子容器的单独更改坐标...但是更改父容器的坐标似乎不会更改子容器相对于舞台的坐标...

问题是......当我改变他们父母的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...

【问题讨论】:

    标签: javascript createjs


    【解决方案1】:

    你会做一个 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

    【讨论】:

    • 谢谢安德鲁。请看上面的编辑...我使用正确吗?
    • 安德鲁,这个问题是……现在如果我直接改变孩子的 x 怎么办……而不是父母?我测试了ContainerOfAnimals.children[0].x-=2; 来移动孩子...现在距离检查器将无法工作...在这种情况下,当我进行距离检查时...我必须同时检查localToLocallocalToGlobal坐标?
    • 对象 player_Arr[0] 是舞台的直接子级吗?您要确保在同一坐标空间中比较项目。如果玩家确实是舞台的直接孩子,您将首先执行 localToGlobal 以获取全局(舞台)坐标空间中的动物 x/y,然后进行比较。我已经更新了小提琴,使其更适用于您的项目。 Check it out。值得注意的是,这并没有考虑到形状的实际宽度。你可能想研究一个好的碰撞算法,除非这纯粹是一个学习经验。
    • 是的,我已经考虑了宽度;这是一种学习经历。无论如何, player_Arr[0] 是舞台的直接子容器。需要与 player_Arr[0] 容器进行比较的孩子已添加到舞台中,如下所示:stage &lt;-- worldContainer &lt;-- ContainerOfAnimals &lt;-- child1 and child2
    • 这里有更多可能有帮助的live action example
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 2021-05-26
    • 2013-02-19
    • 1970-01-01
    • 2014-09-02
    相关资源
    最近更新 更多