scaleform.minarto.com

디스플레이 객체가 어떤 컨테이너의 자식 디스플레이 객체인지 확인하는 방법 본문

Interaction

디스플레이 객체가 어떤 컨테이너의 자식 디스플레이 객체인지 확인하는 방법

미나토 2015. 11. 2. 12:18

어떤 디스플레이 객체가 어떤 컨테이너 안에 속해있는지를 판단해야 할 때가 있습니다. as3 라면 contains 같은 메소드로 간단히 해결하겠지만, as2는 그렇지가 못하죠



하지만 다른 방법이 있습니다.


전역함수에 targetPath 라는 녀석이 있고, 디스플레이 객체의 경로를 반환하죠...


뭐 이런 겁니다...


var container:MovieClip = this.createEmptyMovieClip("container", 0);
var mc:MovieClip = container.createEmptyMovieClip("mc", 0);

trace(targetPath(container))
trace(targetPath(mc))
trace(targetPath(mc).indexOf(targetPath(container)) > -1)


이런 식으로 체크가 가능하지요...


위의 방법을 이해하셨다면 스케일폼에서는 응용해서 다음과 같은 것도 가능하겠지요


_global.gfxExtensions = true;

var container:MovieClip = this.createEmptyMovieClip("container", 0);
var containerPath:String = targetPath(container);
var mc:MovieClip = container.attachMovie("mc", "mc0", 0);

Mouse.addListener(this);
this.onMouseUp = function():Void
{
	var mc:MovieClip = MovieClip(Mouse.getTopMostEntity(true)), p:String;

	if(mc)
	{
		p = targetPath(mc);
		trace(p.indexOf(containerPath) > -1)
	}
}


참고로 createEmptyMovieClip 로 생성된 자식은 다른 결과를 얻을 수 있으니 유의하셔야 합니다. getTopMostEntity(false) 로만 동작합니다