Starling에는 별도의 마우스 이벤트가 존재하지 않습니다.
대신 Touch이벤트로 마우스 이벤트를 대신할 수 있는데...
(Mouse 이벤트를 Touch이벤트에 통합한게 아닐까 생각합니다.)
MouseOver와 MouseOut을 구현하기에는 Touch이벤트의 Hover이벤트 뭔가 부족합니다.
이유는 이 Hover라는 이벤트가 마우스가 Over상태에서도 Out상태에서도 그냥 Hover이라는 이벤트만 알리기 때문에 실제 프로그래머는 Over인지 Out인지 알 수가 없기 때문입니다.

MouseOver와 MouseOut을 어떻게 구현해야 할지 고민해야 하다니...
그래서 구글링도 하고 설명서도 뒤져가며 방법을 찾아냈습니다.
구글링을 하다보면 

private function _hitTouchHandler(e:TouchEvent):void
{
	if (e.getTouch(this).phase == TouchPhase.HOVER)
	{
		// MouseOver Here
	}
	else
	{
		// MouseOut Here
	}
}

형태로 Over, Out을 구별할 수 있다고 나온곳이 많은데 적용해보면 생각대로 되지 않습니다;;
왜냐하면 위 형태대로라면 객체에서 마우스가 나갈 때 e.getTouch(this).phase 값이 null을 반환해야 하지만 객체가 마우스를 나갈때는 TouchPhase.HOVER값을 호출하기 때문입니다.

Over, Out을 재대로 구분하려면 마우스가 객체위에 있는지 밖에 있는지 구분할 수 있는 값이 필요합니다.
그래서 Starling 참조 설명서를 봤더니 
interactsWith라는 함수가 있었습니다.
이 함수는 파라미터로 객체를 넣어주면 현재 TouchEvent가 객체와 충동하는지 여부를 알려줍니다.
객체와의 hitTest결과를 반환(Boolean)하는거죠.
그래서 TouchPhase.HOVER와 interactsWith함수를 활용하면 Over와 Out을 구별해 낼 수 있습니다.

private function hitTouchHandler(e:TouchEvent):void 
{
	var touch:Touch = e.getTouch(this);
	
	if (touch)
	{
		if (touch.phase == TouchPhase.HOVER && e.interactsWith(e.target))
		{
			if (!_isOver)
			{
				// MouseOver here!
				_isOver = true;
			}
		}
		else if (touch.phase == TouchPhase.HOVER && !e.interactsWith(e.target))
		{
			// MouseOut here!
			_isOver = false;
		}
	}
}

위와 같이 Over와 Out을 구현할 수 있습니다.

그리고 _isOver값이 있는데요...
객체에 마우스가 올라가면 마우스가 객체위를 움직일 때마다 계속해서 TouchPhase.HOVER을 남발하게 됩니다;;
마우스 오버시 명령어를 한 번만 실행하기 위해서 _isOver값을 넣었습니다.
이상 Starling에서 MouseOver, MouseOut 구현하기였습니다.

'FLASH > Starling' 카테고리의 다른 글

Starling - MouseOver? MouseOut? 구현하기;;  (0) 2013.06.21
Posted by 레들러 트랙백 0 : 댓글 0

댓글을 달아 주세요

Starling으로 게임을 만들려면 이미지 패킹툴이 필요하게 됩니다.
현재 가장 일반적으로 사용하는 툴이 TexturePacker입니다.
이미지 패킹에 있어서는 가장 강력한 툴이 아닌가 생각해 봅니다;;

그런데 문제는 TexturePacker는 유료입니다.
돈을 내야 쓸 수 있죠;;
그나마 블로그나 개인 홈페이지를 운영하는 사람들에게는 TexturePacker을 리뷰하고 소개하는 글을 5개 이상 올리면 무료로 배포하고 있습니다.
http://www.codeandweb.com/request-free-license
무료 라이센스를 얻기 위해서 작성해야 하는 입력폼입니다. (영어로 쓰세요^^;;)
글 5개 올리기도 귀찮고... 입력폼을 영어로 채울려니... 앞이 깜깜해서 다른 무료 패킹툴이 없나 구글을 뒤지기 시작했습니다...



그래서 건져 올린게 Shoebox입니다.
http://renderhjs.net/shoebox/
방문하시면 무료로 다운받으실 수 있습니다.


간단한 사용법 보기 (클릭하면 펼쳐집니다.)



설치하고 실행하면 처음 위와 같이 실행이 됩니다.
무료툴인데 디자인도 괜찮고 사용법도 간단합니다.
이미지 패킹외에도 여러가지 기능들이 있는데... 다른 기능은 무엇에 쓰는지 모르겠습니다;;
간단하게 패킹하는 방법만 소개하겠습니다.


먼저 패킹할 사진들을 선택해고 위에서 처럼 드래그 앤 드롭해서 추가합니다.


추가하면 Sprite Sheet 창이 생성되면서 미리보기 화면이 나타납니다.
설정하지 않고 Save하면 이미지가 있는 디렉토리에 기본설정 상태로 결과물이 저장됩니다.
Starling에 사용할 Sprite Sheet를 생성하려면 Settings를 클릭해서 설정을 변경해 줘야 합니다.


Settings를 클릭하면 Sprite Sheet Settings(오른쪽 하단) 창이 나타납니다.
다양한 설정을 해줄 수 있지만... 대부분 무엇을 세팅하는건지는 모르습니다;;
다행히 Template를 클릭해서 보면 몇가지 기본적인 프레임워크에 대해 기본세팅이 되어 있습니다.


Starling, Sparrow를 선택합니다.


다른 세팅은 그대로 두고 File Name만 수정합니다.
Starling은 기본적으로 2048X2048사이즈의 Sprite Sheet만 지원하므로 Tex Max Size를 확인합니다.
(2048X2048사이즈를 초과하면 Sprite Sheet를 생성하지 못합니다.)

세팅이 완료되면 Export.sbx를 클릭해서 sbx파일을 저장합니다.
sbx파일은 Shoebox 전용 파일로 사용자 설정 정보가 들어있습니다.
Apply를 눌러 적용하고 미리보기 화면에 Save를 클릭해서 결과물을 저장합니다.


결과물 저장화면 입니다.
위와 같이 저장 후 Starling의 TextureAtlas로 활용하면 됩니다.
직관적이고 쉽게 잘 만들었네요 ^^



참고 링크
기본 사용방법 - http://renderhjs.net/shoebox/manual.htm
이미지 패킹방법 - http://renderhjs.net/shoebox/packSprites.htm

사이트 참고하시고 다른 메뉴들도 활용해 보시기 바랍니다.

'FLASH > Tools' 카테고리의 다른 글

TexturePacker를 대신할 AIR 기반 이미지 패킹 툴 Shoebox  (0) 2013.06.19
Posted by 레들러 트랙백 0 : 댓글 0

댓글을 달아 주세요


C#과 플래시를 연동해서 어플리케이션을 하나 만들었습니다.
전체적인 틀은 AS3.0을 사용해서 만들었고 핵심 컨텐츠는 기존에 사용하던 AS2.0을 로드해서 사용했습니다.
로드까지는 문제가 없었는데 데이터를 주고 받을 수가 없어서 고민하던 중 Localconnection을 사용해서 AS3,0의 데이터를 AS2.0에 전달했습니다.
(AS3.0에서 로드한 AS2,0에서는 addCallback를 사용할 수 없었습니다. 그래서 굳이 방법을 찾은게 LocalConnection;;)

그런데 Windows 8이 나오고 플래시 플레이어 최신버전이 윈도우 업데이트 형식으로 설치되고 나서 문제가 생겼습니다.
LocalConnection이 연결이 안되서 AS2.0으로 데이터를 전달하지 못하고 있었습니다.

그래서... 구글링...

열심히 했지만 결국 해결방법은 찾지 못했습니다.
누군가 어도비 커뮤니티에 글을 올렸지만...

http://forums.adobe.com/message/5103110

딱히 해결방법은 없는거 같습니다.
보안문제 때문에 안된다는거 같긴한데....

그래도 굳이 해결책을 찾는다면...
1. AS2.0을 AS3,0으로 변환한다.
2. 윈도우 업데이트를 삭제한다. (KB2824670)
정도;;


Good news - Microsoft have just released an update that fixes this issue
마이크로소프트에서 해당 이슈에 대한 문제를 해결했습니다.

Posted by 레들러 트랙백 0 : 댓글 1

댓글을 달아 주세요

  1. addr | edit/del | reply 주진현 2013.05.17 12:46 신고

    블로그 개설 하려고 하는데 초대장이 필요합니다. 네이버 하다가 티스토리 해보려고 합니다. 초대장 주시면 대단히 감사하겠습니다. ehfehekfl@naver.com