티스토리 툴바



정상적으로 릴리즈가 잘 되다가 "Flex builder could not publish project : null "라는 메세지를 보여주고 갑자기 릴리즈가 되지 않을 때, 클린도하고 프로젝트를 제거 했다가 다시 임포트를 해보았지만 문제가 해결되지 않을 때!

셋팅 파일 중, .actionScriptProperties에 문제가 있는 경우이다.
 <application>태그의 하위 중, <airExcludes> 태그에 문제가 있는지 살펴 보자, 이전에 릴리즈를 했을 경우, 릴리즈 대상에서 특정 파일이나 폴더를 대상에서 제외 하였을때 생성되는 태그인데 이 태그는 반드시 필요하지는 않은 정보이다. 
 <airExcludes> 
    <airExclude path="includeAssets"/>
 </airExcludes>
가끔은 위의 형태처럼 기형 형태의 태그가 에러를 유발하므로, 이부분을 삭제하고 이클립스를 Restart하면 정상적으로 릴리즈가 가능하다.
저작자 표시 비영리 변경 금지

Creative Commons License

리스트에서 아이템을 드래그하여 3D 객체가 있는 뷰어로 드랍하는 드래그앤드랍 기능을 구현해 보자

우선 리스트를 생성한다.

//데이터는 임시로 위와 같이 넣어주고, dragEnabled는 true로 해준다. 
//드랍 대상이 리스트 자신이 아니므로 물론 dropEnabled는 기본값인 false로 둔다
뷰어단에서는 기본 뷰어를 만들어주고 이벤트리스너를 두개 추가해준다.
/* 뷰어 내부 작성 코드 */
override protected function createEvent():void
{
	super.createEvent();

	this.addEventListener( DragEvent.DRAG_ENTER, onDragEnter );
	this.addEventListener( DragEvent.DRAG_DROP, onDragDrop );
}

private function onDragEnter( e:DragEvent ):void
{
	if ( viewport.interactiveSceneManager.currentDisplayObject3D )
	//마우스 아래 3D객체가 있을 때에만 드랍이 가능하도록한다.
	{
		DragManager.showFeedback( DragManager.COPY );
		//드래그앤드랍의 종류이다. COPY, LINK, MOVE등 원하는 것으로 수정해준다.
		DragManager.acceptDragDrop( this );
		
	}
}

private function onDragDrop( e:DragEvent ):void
{
	//드래그 드랍
	var obj:Object = e.dragSource.dataForFormat( e.dragSource.formats[ 0 ])[ 0 ];
	//TODO: obj 드래그된 아이템을 배치하는 코드 작성
	
	obj = null;
}

 


<마우스 아래 아무것도 없는 경우 드랍 안됨>


<마우스 아래 3D 오브젝트가 있는 경우 드랍 가능>


여기서 중요 코드 몇개,

1. DragManager.acceptDragDrop 함수는 드랍을 받을 컴포넌트 내부에서 해주는 것이 좋다. (뷰어단코드 17번째 줄)
드랍을 받을 컴포넌트의 owner에서 acceptDragDrop(대상컴포넌트)를 호출할 경우 어떨때는 정상적으로 드래그앤드랍이 가능하지만 어떨때는 잘 되지 않는다.
2.e.dragSource.dataForFormat의 활용 (뷰어단 코드 25번째 줄)
사실상 e.draggedItem에 드래그되고있는 아이템이 있어야 정상이지만 아무것도 안들어있는 경우가 허다하다.
e.dragSource.dataForFormate함수를 활용한다.
멀티셀렉티드 상태에서 드래그 되는 경우를 위하여 e.dragSource.dataForFormat( e.dragSource.formats[ 0 ])은 Array형태로 나온다. 
3. viewport.interactiveSceneManager의 활용 (뷰어단 코드 12번째 줄)
viewport.interactiveSceneManager에 현재 마우스 아래에 있는 객체 혹은 마우스의 3d좌표 등 모든 정보가 들어있다. 물론 마우스 아래에 있는 객체의 MaterialObject3D의 interactive속성이 true여야 한다.
viewport.interactiveSceneManager.currentDisplayObject3D가 null이면 현재 마우스 아래에 아무 오브젝트가 없다는 것은 너무 당연한 이야기!
하지만 이 경우 viewport.interactiveSceneManager.currentMousePos는 원점이다.
차후 마우스의 3d 위치를 이용할 일이 있을 때를 위하여 반드시 기억해두자.
저작자 표시 비영리 변경 금지

Creative Commons License
이전 1 2 3 다음