Я специально работаю в 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;
}
}
}
}
}