1 Объект связан с другим Объектом через третий Объект, как я могу найти третий Объект, основываясь на знании 2 других Объектов? - PullRequest
1 голос
/ 11 января 2011

Я специально работаю в AS3, но чувствую, что это довольно агностичный вопрос.

В частности, у меня есть объекты сферы, которые могут быть связаны с другими объектами сферы. Они связаны между собой третьим объектом. Я хотел бы иметь возможность искать связывающий объект только со знанием двух сферных объектов, которые в настоящее время связаны друг с другом. Как бы вы подошли к этому?

Я бы хотел хранить уникальную строку идентификатора в каждом объекте сферы, просто чтобы избежать глобальной проверки, чтобы убедиться, что они уникальны ... но не противоречат идее, если она сводится к этому.

----- решение ------

вот решение, которое я выбрал:

private function breakAtomicBonds( p_interactiveMatter:InteractiveMatter ):void
{
    var matchAmount:int;
    var key:Object;
    var atom:InteractiveMatter;
    var constraint:Constraint;
    var atoms:Vector.<InteractiveMatter>;
    var atomVOs:Vector.<InteractiveMatterVO>;
    var bond:InteractiveMatterVO;
    var bondIndex:int;
    var i:int;
    for( i = p_interactiveMatter.interactiveMatterVO.bonds.length - 1; i >= 0; i--) // each( bond in p_interactiveMatter.interactiveMatterVO.bonds )
    {
    bond = p_interactiveMatter.interactiveMatterVO.bonds[i];
    for( key in _constraints )
    {
        if( key is Constraint )
        {
            constraint = key as Constraint;
            atoms = _constraints[key] as Vector.<InteractiveMatter>;
            atomVOs = new Vector.<InteractiveMatterVO>;

            for each( atom in atoms )
            {
                atomVOs.push( atom.interactiveMatterVO );
            }

            matchAmount = 0;

            if( atomVOs.indexOf(p_interactiveMatter.interactiveMatterVO) != -1 )
            {
                matchAmount++;
            }

            if( atomVOs.indexOf( bond ) != -1 )
            {
                matchAmount++;
            }

            if( matchAmount == 2 )
            {
                trace( 'found constraint!' );
                _physicsWorld.removeConstraint( constraint );
                delete _constraints[constraint];

                for each(atom in atoms)
                {
                    bondIndex = atom.interactiveMatterVO.bonds.indexOf( bond )
                    if( bondIndex != -1 )
                    {
                        atom.interactiveMatterVO.bonds.splice( bondIndex, 1 ); 
                    }
                    bondIndex = atom.interactiveMatterVO.bonds.indexOf( p_interactiveMatter.interactiveMatterVO );
                    if( bondIndex != -1 )
                    {
                                    atom.interactiveMatterVO.bonds.splice( bondIndex, 1 );
                        }
                    }

                    break;
                }
            }
        }
    }
}

1 Ответ

0 голосов
/ 11 января 2011

Для узлов и дочерних элементов вы можете обратиться к шаблону составного дизайна.http://blog.createdbychristian.com/the-composite-design-pattern/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...