'분류 전체보기'에 해당되는 글 134건

  1. accessibility (06.10.20)
  2. 마스크가 씌워진 무비클립안에서의 마스크(06.10.18)
  3. 티스토리에 syntaxhighlighter 3.0.83 적용하기 + jQuery + autoloader 3
  4. flash player downloads.html
  5. Android 용 ANE 파일 만들기 //2012/05/26 21:11
  6. Adding Flash Player 11.2 support to Flash Pro CS5 and CS5.5 //2012/05/09 02:08
  7. Flash CS5.5 -ANE (AIR Native Extension) 이용하여 .apk 만들기 //2012/03/08 01:13 1
  8. zoom 컨트롤시 //2009/08/04 10:09
  9. 페이지 전환이 많은 플래시 구현시 //2009/03/12 21:29
  10. embed font의 한글 표시 문제 //2009/03/12 17:11 1
  11. crossdomain.xml //2008/10/06 19:32
  12. 서로 다른 도메인간의 swf <-> javascript //2008/09/17 12:58
  13. CS3 - xml 로드와 FLV seekBar //2008/02/09 14:57
  14. [flash8] 동적 폰트 임베딩 //2007/11/15 19:57 1
  15. 플래시 static 폰트 임베딩시... //2007/08/07 15:41

accessibility (06.10.20)

accessibility (06.10.20)

 

- 시각 장애인에게는 모션이나 그래픽은 불필요하다

- 판독기(WindowEyes)가 액션스크립트로 적용된 부분을 알아채지 못한다

  (텍스트 필드는 별도 설정없이 읽는다)

- 최대한 텍스트를 살려서 만든다.

 

* Accessibility.isActive():Boolean 이용

 -> true = 텍스트로 구성

 -> false = 그래픽으로 구성

 

* WindowEyes - 스테이지에 직접위치시킨 무비클립안의 텍스트필드는 외부(_root)의 텍스트 필드와 닿아야만 인식.

 (Accessibility.isActive() 확인 이후에 생성(런타임 생성?)된 텍스트필드는 정상인식)

마스크가 씌워진 무비클립안에서의 마스크(06.10.18)

 

- 일반 마스크는 가능

 

블러를 적용한 (cacheAsBitmap=true)마스크는 불가능

http://alexgorbatchev.com/SyntaxHighlighter/download/


위 링크의 syntaxhighlighter 3.0.83 파일을 다운로드한다.


압축을 해제하여 scripts와 styles 폴더의 모든 파일들을 "HTML/CSS편집 -> 파일업로드"에 추가 해준다.



jquery-1.6.1.min.js



첨부한 jQuery파일을 같은 위치에 추가한다.

(jQuery 부분은 http://bryan7.tistory.com/10 이곳에서 참고했다.)



HTML/CSS편집 에서 <head> 태그에 안에 css를 추가 해준다.


<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<title>fsj :: '분류 전체보기' 카테고리의 글 목록 (6 Page)</title>

<link href="./style.css" rel="stylesheet" type="text/css" />

<link rel="alternate" type="application/rss+xml" title="fsj" href="https://showjean.tistory.com/rss" />

<link rel="shortcut icon" href="https://blog.showjean.com/favicon.ico" />

<link rel="stylesheet" type="text/css" href="./images/shCoreEclipse.css" />

<link rel="stylesheet" type="text/css" href="./images/shCore.css" />

</head>

- 여기서 shCore.css는 추가하지 않아도 제대로 작동한다. 스크롤바 패치를 테마css파일에 직접하지 않기 위해서 shCore.css에 적용 후 추가했다. 이러면 테마를 변경하더라도 패치가 계속 유지된다. 


overflow를 x, y로 분리하여 설정한 shCore.css의 내용. 가로 스크롤바만 생긴다.

.syntaxhighlighter {

  border: 1px solid #222 !important;

  width: 98% !important;

  margin: 1em 0 1em 0 !important;

  position: relative !important; 

  font-size: 1em !important;

  overflow-y: hidden !important; 

  overflow-x: auto !important;

}



마찬가지로 </body> 태그 위에 다음 script를 추가한다. 

- 참고 : http://ddoong2.com/601


<!-- jQuery 삽입 -->

<SCRIPT type=text/javascript src="./images/jquery-1.6.1.min.js"></SCRIPT>

<!-- <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> -->

<script type="text/javascript" src="./images/shCore.js"></script>

<script type="text/javascript" src="./images/shAutoloader.js"></script>

<SCRIPT type="text/javascript">

/* jQuery 부분  */ 

jQuery.noConflict();  // 다른 라이브러리와 충돌을 방지한다.

jQuery(document).ready(function(){  // 문서가 모두 읽힌 후에 다음을 실행

    jQuery("blockquote[class^=brush]").each( function() {  //blokquote를 사용한 태그

        var $this = jQuery(this);

 

        // 복사 붙여넣기 했을때 탭처리

        $this.find("span[class*=Apple-tab-span]").replaceWith(function() {

            return jQuery(this).text();

        });

 

        // 편집창에서 직접 수정했을때 탭 처리

        $this.find("p[style*=margin-left]").each(function() {

            var $elem = jQuery(this);

            var style = $elem.attr("style");

            var result = /\s*?margin-left:\s(\w+?)em;\s*?/gi.exec(style);

            if ( result != null ) {

                result = result[1];

            }

            var spaceCount = parseInt(result) * 2;

            var spaceString = "";

            for (var i = 0; i < spaceCount; i++) {

                spaceString += "&nbsp;";

            }

            $elem.removeAttr("style");

            $elem.html(spaceString + $elem.html());

        });

 

        var temp = $this.html(); //  내용 복사

        temp = temp.replace(/\n/gi, "");

        temp = temp.replace(/<p><\/p>/gi, "");

        temp = temp.replace(/<p><br\s*\/?><\/p>/gi, "\n");    // 줄바꿈

        temp = temp.replace(/<P>(.*?)<\/P>/gi, "$1\n");       // 한줄끝

        temp = temp.replace(/<br\s*\/?>/gi, "\n");            // 줄바꿈

 

        temp = '<script type="syntaxhighlighter" class="' + $this.attr('class') + '"><![CDATA[' + temp + ']]><\/script>'

        $this.replaceWith(temp);

    });

     

/*  SyntaxHighlighter autoloader  */

//<![CDATA[

SyntaxHighlighter.autoloader(

  'applescript            ./images/shBrushAppleScript.js',

  'actionscript3 as3      ./images/shBrushAS3.js',

  'bash shell             ./images/shBrushBash.js',

  'coldfusion cf          ./images/shBrushColdFusion.js',

  'cpp c                  ./images/shBrushCpp.js',

  'c# c-sharp csharp      ./images/shBrushCSharp.js',

  'css                    ./images/shBrushCss.js',

  'delphi pascal          ./images/shBrushDelphi.js',

  'diff patch pas         ./images/shBrushDiff.js',

  'erl erlang             ./images/shBrushErlang.js',

  'groovy                 ./images/shBrushGroovy.js',

  'java                   ./images/shBrushJava.js',

  'jfx javafx             ./images/shBrushJavaFX.js',

  'js jscript javascript  ./images/shBrushJScript.js',

  'perl pl                ./images/shBrushPerl.js',

  'php                    ./images/shBrushPhp.js',

  'text plain             ./images/shBrushPlain.js',

  'py python              ./images/shBrushPython.js',

  'ruby rails ror rb      ./images/shBrushRuby.js',

  'sass scss              ./images/shBrushSass.js',

  'scala                  ./images/shBrushScala.js',

  'sql                    ./images/shBrushSql.js',

  'vb vbnet               ./images/shBrushVb.js',

  'xml xhtml xslt html    ./images/shBrushXml.js'

);      

//]]> 

    /*  SyntaxHighlighter 사용부분  */

    SyntaxHighlighter.defaults['toolbar'] = false; // 툴바 안 보기

    SyntaxHighlighter.all();

});

</SCRIPT>

</body>


사용법 1

1. 인용구(ctrl+Q)를 만들어 그 안에 코드를 넣는다.

2. HTML모드로 들어가 해당 인용구(blokquote)의 class를 "brush: type;"으로 변경한다.

3. 기타 syntaxhighlighter에 필요한 옵션(http://alexgorbatchev.com/SyntaxHighlighter/manual/configuration/)을 적용한다. 


- 이 경우 jQuery에서 각종 태그들이 제거되거나 변형(주로 줄바꿈 관련)되므로 이를 무시하고 싶다면 2번째 방법으로 사용한다.


사용법 2

1. HTML모드로 아래와 같이 직접 입력한다.

//code




'etc' 카테고리의 다른 글

티스토리에 자동 링크 적용하기  (0) 2013.10.09

flash player downloads.html

http://www.adobe.com/support/flashplayer/downloads.html

adt를 실행하기위한 준비물


- 안드로이드 API를 작동시킬 .jar파일

- jar파일과 연동 되는 .swc파일

- extension.xml




## jar 파일 만들기

jar cf "만들 .jar파일 이름" -C "이클립스로 컴파일된 java 파일(프로젝트폴더\bin\classes)" . 

(마지막에 . 누락 주의)




## SWC파일 만들기


* flex SDK로 만들기 (Flash Builder에서는 /bin폴더에 SWC파일이 자동으로 생성된다.)


compc -o "만들 .swc파일 이름" -is "as소스폴더" -external-library-path "AIR의 airglobal.swc파일 지정" -swf-version 13

- airglobal.swc는 NativeExtension을 지원하는 2.5버전 이상을 지정한다. 단, .apk로 package시 포함되는 .swf파일의 버전보다는 낮거나 같아야한다.


- "-swf-version 13" 이라는 옵션을 추가하여 adt로 ane파일을 생성할때 "Invalid swc file. The extension NameSpace requires the SWF version to be 13 or lower."가 나타나지 않도록 한다.



* Flash CS5.5로 만들기 


0. Player 를 "AIR 2.5" 이상으로 변경한다.


1. 필요한 class를 import 하고 new 할 필요없이 클래스명만 적어준다.

import com.showjean.ANE.AlertANE;
AlertANE;

2. Publish Settings 에서 SWC 를 선택하고 테스트 무비를 실행한다.




## extension.xml 작성


 ANE.Alert
 1
 
  
   
    AlertANE.jar
    air.extensions.AlertExtension
    air.extensions.AlertExtension
   
    
 

<id> : ane를 구동하는 연결고리같은 존재이므로 되도록 유일한 값을 입력한다.

<nativeLibrary> : .jar 파일이름

<initializer><finalizer> : 자바클래스




## adt를 이용해서 .ane파일 생성


1. Android-ARM폴더를 만들어 .jar파일과 swc안의 library.swf파일을 복사해 넣는다.

(swc파일은 확장자를 zip으로 변경하여 내용을 확인할 수 있다.)


2. 다음을 정확히 입력한다.

adt -package -target ane "만들 .ane파일 이름" "extension.xml파일 지정" -swc ".swc파일 지정" -platform Android-ARM -C "Android-ARM폴더 경로지정" .

(마지막에 . 누락 주의)




ANE.alert.rar




- Flash CS5.5에서 ane 사용하기 : http://showjean.tistory.com/54

http://blogs.adobe.com/rgalvan/2011/11/adding-fp11-support-to-flash-pro-cs5-and-cs5-5.html


위 링크(FP11을 설정하는 법)을 따라하되 


폴더 이름을 FP11.2로 바꾸고 그 안에 playerglobal11_2.swc를 복사해 넣고 playerglobal.swc로 이름을 변경한다,


$Flash//Common/Configuration/Players/FlashPayer11_2.xml 파일의 내용을 다음과 같이 수정한다.(파일이 없으므로 이전 버젼 것을 복사한 후 이름을 변경해준다.)





Flash Player 11.2
   
   Device Central/adcdl.exe
   Device Central/adcdl
   
.....


FlashDevelop 4.0.1에서 Player를 11.2로 선택하는 경우 -swf-version이 14로 잘못 설정되어 컴파일시 정상적으로 작동되지 않는다. (대표적으로 마우스 오른쪽 버튼 클릭 이벤트가 작동하지 않는다.) 해결법은


Project > Properties > Compiler Options > ADvanced > Additional Compiler Options


위 항목에 "-swf-version=15"(따옴표 제외)를 추가하면 컴파일시 적용되어 정상 작동된다.

reference : http://help.adobe.com/en_US/air/build/WS597e5dadb9cc1e0253f7d2fc1311b491071-8000.html

movie 1/2 : http://www.youtube.com/watch?v=Axg6E001a7I

movie 2/2 : http://www.youtube.com/watch?v=MRcoJ6ClLqo&feature=channel


0. AIR3.1 SDK : http://www.adobe.com/devnet/air/air-sdk-download.html

   Android SDK r16 : http://developer.android.com/sdk/index.html


1. ANE 파일 준비 


Vibration 예제 (http://www.adobe.com/devnet/air/native-extensions-for-air/extensions/vibration.html)

샘플 파일을 다운로드한다.


2. flash cs5.5 에서 file - new - AIR for Android 로 새 파일을 생성하고 저장한다.

  (어짜피 adt를 이용해 package하게 되므로 AIR for Android를 고집할 필요없다. overlay 한 AIR3.1(http://kb2.adobe.com/cps/908/cpsid_90810.html)을 선택해도 된다.

"Included native extension 'com.adobe.mobile' includes a SWF version 13 which is greater than the version of the root SWF of this application: 11"

- 위와 같은 내용의 에러가 발생시 3.1을 선택해서 해결할 수 있다.)


3. ANE의 com.adobe.extensions.Vibration.ane 파일을 복사하여 com.adobe.extensions.Vibration.swc로 확장자를 변경한다.


4. flash의 Library path에 위 swc 파일을 추가하고 ⓘ를 클릭하여 Link Type을 External로 변경한다.


5. 적당한 스크립트를 작성한다.

package 
{

 import flash.display.MovieClip;
 import com.adobe.nativeExtensions.Vibration;


 public class VibrationExam extends MovieClip
 {


  public function VibrationExam()
  {
   // constructor code
   var vibe:Vibration;
   if (Vibration.isSupported)
   {
    vibe = new Vibration();
    vibe.vibrate(500);
   }
  }
 }

}



6. 인증서를 생성/등록한다.


7. name-app.xml에 퍼미션을 추가한다. (필요없다면 하지 않아도 된다.)



8. name-app.xml에 extensionID를 추가한다. (ANE마다 정해진 id값이 있는 것으로 보여짐. 이 예제의 경우 txt파일로 제공. ane파일을 zip으로 확장명을 변경하고 압축을 해제하면 extension.xml이라는 이름의 파일을 찾을 수 있다. 이안에 id값이 지정되어 있다.)

 
    com.adobe.Vibration 



- 이 상태에서 test movie를 실행하면 swf 파일만 생성되고 화면에 나타나지 않는다. 위 노드를 주석처리하고 실행해도 클래스를 찾을 수 없다는 에러는 발생된다. 에뮬레이터나 디바이스에서만 작동을 확인할 수 있다.


9. 해당 폴더에 extensionsDir 폴더를 만들어 com.adobe.extensions.Vibration.ane 파일을 복사 해 넣는다.

(.ane파일의 이름은 변경해도 작동하는 것으로보아 이름은 어떤 것이든 관계없는 것으로 보인다.)


10. adt를 실행해 apk파일을 만든다. 생성시 인증서 비밀번호가 필요하다. (어느 디렉토리에서 실행가능하도록 adt의 경로를 path에 등록해 둔다.)

adt -package -target apk -storetype pkcs12 -keystore showjean.p12 vibrationExam.apk vibrationExam-app.xml vibrationExam.swf -extdir extensionsDir


11. apk 파일을 디바이스에 설치해 테스트 한다.(adb도 마찬가지로 path 등록)

adb install vibrationExam.apk

재설치시엔 "install" 뒤에 -r 옵션을 붙여준다.



확대는 대상의 중심을 기준으로

축소는 화면의 중심을 기준으로

실행해야 화면에서 대상이 사라지는 것을 예방할 수 있다.

- index, selectedIndex

 

1. 메뉴 포커스 이동 -> index 변화

2. 메뉴 선택 -> selectedIndex에 index 지정, 이전 selectedIndex와 다르면 hasChanged = true;

3. hasChanged 가 true라면 뭐든 생성 -> selectedIndex 에 해당하는 뭐든 생성, hasChanged = false;

* 외부에서 내용변경시 2번에서 시작...

 

 

- user input을 공통적으로 막을 수 있도록한다.

 

1. key 입력은 main에서 시작되므로 이를 main에서 관리하도록.

 

 

- 각 페이지가 갖는 서브페이지에 key input을 전달하는 방법을 모색

 

1. main에 _keyListener 변수로 key input을 직접 전달

2. 페이지에서 원할 때 _keyListener를 등록할 수 있음.

3. IKeyListener 로 구현

 

 

- 각 페이지들은 다른 페이지들과 연관관계가 없도록(적도록) 구성한다.

 

1. 페이지간의 이동이 원활해진다.

2. 데이터 참조가 목적이라면 데이터객체를 독립시켜 각각 참조하여 관계를 없앤다.

 

 

- 페이지 전환시 동작 순서

 

0.5. user input 막음

1. 이전 페이지 사라짐 -> 사라짐 완료

2. 현재 페이지 나타남 -> 나타남 완료

2.5. user input 시작

 

 

- 이전 페이지로 이동하는 방법 모색

 

1. 각 페이지는 고유의 id가 있다.

2. 현재 페이지는 이전 페이지의 id를 가지고 있다. (또는, main에서 페이지 순서를 관리한다)

3. 이전 이동시 이전 페이지의 id를 이용

 

 

- AbstractPage : 각각의 페이지 클래스

 

1. implements IKeyListener :: pressKey(code) : 키 입력을 받을 수 있는 객체

1.1. implements IKeyListener :: focusIn() : 키 객체로 지정되었을 때;

1.2. implements IKeyListener :: focusOut() : 키 객체가 아님으로 지정되었을 때;

2. create() : 데이터 로드 시작, 보여지는 것 생성

3. dispose() : 데이터 이외의 보여지는 것 제거

4. live() : 약한 전환을 위한 메서드, background에서 계속 진행하고 싶을 때 (약한 전환시에는 작동하지 않는 메서드)

5. kill() : 상동

6. index : 포커스가 맞춰진 index

7. selectedIndex : user가 선택한 index

8. hasChanged() : selectedIndex의 변화가 있는지 확인

9. clearChanged() : selectedIndex의 변화가 없음으로 지정

10. setChanged() : selectedIndex의 변화가 있음으로 지정

11. appear() : create()이후 나타나는 동작 시작

12. disappear() : dispose()이전 사라지는 동작 시작

 

 

- AbstractPageContainer : 페이지안에 페이지를 가질 수 있는 클래스

 

1. extends AbstractPage

2. addPage(AbstractPage) : 서브 페이지를 추가

3. removePage(AbstractPage) : 서브페이지를 제거

4. createSubPage() : selectedIndex의 서브페이지를 생성

5. removeSubPage() : 현재 서브페이지를 제거

6. subIndex : 서브페이지의 인덱스(선택된 서브의 sub.index or sub.selectedIndex)

* 서브페이지 생성시 addChild()는 별도로 구현한다. - 각 페이지마다 붙여지는 위치가 다르므로..

2.0에서 특정 상황에 보이던 현상이 3.0에서도 보여진다.

 

임베드를 적용한 인풋 텍스트에

'우리들은 일학년"을 타이핑하면

 

'우'글자가 사라진다.

 

이리저리 테스트 해보니

 

'리'를 입력하고 '들'의 ㄷ을 입력하는 동시에 '릳'라는 글자가되어야 하는데 이 글자가 임베드된 폰트에 포함되어 있지 않으면 이상현상으로 앞의 글자가 사라지는 것 같다.

 

텍스트 필드를 무비클립으로 만들고 필요한 폰트셋을 임베드한 후 swc로 변환해서 사용하는 중에 포함되지 않는 글자때문으로 보여진다.

 

폰트 전체를 swc로 만들 수 있나?

crossdomain.xml에서 허용한 도메인은 .swf파일의 도메인이다.

 

.swf를 표시하는 .html 등의 도메인이 아니다.

http://kostory.com  - .swf가 있는 도메인

 

 - .swf 내부에 allowDomain()을 설정한다.

 Security.allowDomain("*.showjean.com");

 

 - crossdomain.xml 파일로 http://showjean.com의 접근을 허용한다.

<?xml version="1.0"?>
<cross-domain-policy>

        <allow-access-from domain="*.showjean.com" /> 

</cross-domain-policy>

 

 

http://showjean.com  - .html이 있는 도메인

 

 - .html의 allowScriptAccess을 always로 설정한다.

 <param name="allowScriptAccess" value="always" />

xml 로드(URLLoader) 후 FLV를 생성하고 .seekBar = seekbar를 지정하면 seekbar가 제대로 작동하지 않는다.

 

- 모든 경우에 해당하는지는 알 수 없음.

- xml로드 전 생성/지정하면 이상 없음.

swf파일을 로드하여 임베딩 폰트를 이용할 수 있는 방법(액션을 이용해서 텍스트 필드를 생성할 경우)

 

1. embedFont.fla - 실제로 폰트를 저장하고 있는 swf파일 만들기

- 1. 텍스트필드가 들어 있는 심볼(이하 임베드심볼) 하나를 만들어, 텍스트필드에 임베드할 폰트를 지정하고, embed버튼으로 임베드할 글자들을 선택한다.

- 2. 라이브러리의 임베드심볼 Linkage옵션에서 Export Runtime sharing을 체크하고 아래의 URL 박스에 export할 swf이름을 넣는다.(아무이름이나 넣어도 된다)

- 3. 스테이지에 임베드심볼을 가져다 놓는다.

- 4. 테스트무비를 실행해 swf파일(embedFont.swf)를 생성한다.

 

2. useFont.fla - 폰트를 사용할 수 있도록 로드해주는 swf만들기

- 1. 새로운 fla파일을 만든다.

- 2. 라이브러리창을 2개로 만들어, embedFont.fla의 임베드심볼을 useFont.fla의 라이브러리로 가져다 놓는다.

- 3. useFont.fla 라이브러리의 임베드심볼 Linkage옵션(Import for runtime sharing이 선택되어 있다)에서 URL에 임베드폰트의 swf(embedFont.swf)를 넣는다

주의 : embedFont.swf의 경로는 최종적으로 폰트가 사용되는 swf(test.swf)파일의 위치가 기준이된다.

- 4. useFont.fla 라이브러리의 임베드심볼을 스테이지에 올려 놓는다.

- 5. 테스트무비를 실행해 swf파일(useFont.swf)를 생성한다.

 

3. test.fla - 위 두파일을 로드하여 임베드폰트를 사용할 swf

- 1. 위 두 파일을 무비클립로더를 이용해서 로드한다.

   (embedFont.swf를 로드완료 한 후 useFont.swf를 로드한다.)

- 2. 로드가 완료되면 텍스트 필드를 생성해 폰트를 적용해 본다.

주의 : 폰트이름은 linkage가 아닌 실제 폰트명으로 사용해야 한다.

 

특징

- 1. 임베드폰트를 사용할 swf는 폰트의 어떠한 정보도 가지고 있지 않다. 그래서, 외부에서 폰트를 마음대로 바꿀 수 있다.

- 2. 임베드폰트관련 파일을 로드하여 사용하기때문에 유연성을 가질 수 있다.

- 3. 사용자가 원하는 글자셋만 임베드 할 수 있다.

- 4. 첨부파일의 test.swf에서는 텍스트필드 생성후 텍스트필드를 한번 클릭해야 텍스트가 보인다.

- 5. 텍스트의 위치가 일반적이지 않은 곳에 있다.

- 아직 4, 5에 관한 더 이상의 테스트는 진행하지 않았다.



font_embed-showjean.zip


* 사용조건 - 폰트임베드, attachMovie, 자체 swf 프리로드

 

자체 swf를 프리로드하기위해서는 1프레임의 용량을 최소한으로 줄여야한다.

이를 위해서 임베드된 폰트심볼(attachMovie로 이용될)의 'export in first frame'을 체크해제하고, 2프레임이후에 심볼을 위치시켜야 한다.

 

이때 만약 1프레임에 임베드된 폰트와 같은 폰트의 static폰트가 사용되고 있다면, 위의 임베드폰트가 1프레임에 로드되고 만다.

 

1프레임의 폰트를 'break apart'해서 해결할 수 있다.