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

댓글을 달아 주세요


'JAVASCRIPT > jQuery' 카테고리의 다른 글

jQuery 최신버전 링크  (0) 2013.06.20
TAG jQuery
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

댓글을 달아 주세요


트위처 API가 1.1로 업그레이드 되면서 타임라인의 글을 불러오는 부분에도 문제가 생겼습니다.

기존
http://api.twitter.com/1/statuses/user_timeline/username.json
만으로 쉽게 사용자의 타임라인 글이나 작성일등 정보들을 쉽게 가져올 수 있었습니다.

그런데 이런 부분들이 무분별하게 남용되고 있는것이 문제가 되는지  어플리케이션을 통해 승인을 받아야만 사용자 글에 대한 정보를 가져올 수 있게 됐습니다.

위에 링크를 타고가면 다음과 같은 에러를 만날 수 있습니다.
{"errors": [{"message": "The Twitter REST API v1 is no longer active. Please migrate to API v1.1. https://dev.twitter.com/docs/api/1.1/overview.", "code": 68}]} 1.1로 바뀐 새로운 API 문서를 참고하라는 내용입니다. 참고하면 뭔가 해결될 거 같지만... 친절하게 코딩을 어떻게 해야 하는지까지 알려주지는 않습니다;; 다음은 해당 리스트를 불러오는 코딩입니다.

<?php
require_once("twitteroauth/twitteroauth/twitteroauth.php"); 

$twitteruser = "twitterusername"; // 트위터 아이디
$notweets = 30; // 불러올 타임라인 글의 개수
// 어플리케이션 생성 후 발급받는 키 값
$consumerkey = "12345";
$consumersecret = "123456789";
$accesstoken = "123456789";
$accesstokensecret = "12345";

function getConnectionWithAccessToken($cons_key, $cons_secret, $oauth_token, $oauth_token_secret) {
  $connection = new TwitterOAuth($cons_key, $cons_secret, $oauth_token, $oauth_token_secret);
  return $connection;
}
  
$connection = getConnectionWithAccessToken($consumerkey, $consumersecret, $accesstoken, $accesstokensecret);

$tweets = $connection----->get("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=".$twitteruser."&count=".$notweets);
 
echo json_encode($tweets);
?>

위 코드는 다음 블로그를 참고했습니다.
http://www.webdevdoor.com/php/authenticating-twitter-feed-timeline-oauth/
위 문제에 대한 좀 더 자세한 내용이 영어로 나와있습니다.
물론 해석을 해드리고 싶지만...ㅠㅠ

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

댓글을 달아 주세요


2013년 5월 트위터 API가 1.1로 업데이트 됐습니다.
아래는 업데이트 관련 문서 링크입니다.
해석을 해드리고 싶지만...
https://dev.twitter.com/docs/api/1.1/overview

1.1로 업데이트 되면서 트위터 로그인 및 어플리케이션 승인 요청에 문제가 생겼습니다.
에러도 없이 기존처럼 잘 되는것처럼 보이지만...
로그인도 되어있지 않고 트위터 아이디도 받아오지 못합니다...

원인은 1.1로 업데이트 되면서 API ROOT URL이 변경됐기 때문입니다.
간단한 수정으로 해당 문제를 해결할 수 있습니다.






twitteroauth.php 파일에서

/* Set up the API root URL. */
// public $host = "https://api.twitter.com/1/";
public $host = "https://api.twitter.com/1.1/";

1을 1.1로 수정하면 됩니다 
참 쉽죠;;

$connection = new TwitterOAuth(...);
$connection->host = "https://api.twitter.com/1.1/";

또는 위와 같이 트위터 클래스를 선언할 때 호스트 주소를 변경해도 똑같이 적용됩니다.


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