티스토리 뷰
2009년 2월 기준
Flash CS3 정리
1frame - 정지, 2frame이상 - refeat
Ctrl+B - 이미지 Break
addEventListener(Event.ENTER_FRAME, handleFrame);
function handleFrame(e:Event):void
{
// 핸들프레임
}
F5 - insert
F7 - keyframe
F9 - action
Scale.X = 1 or -1 // 이미지 vertical
trace(); // 상태확인 및 디버그
이클립스 Flex 정리
override public function process():void
{
// 루프 계속 도는 프로세스.
}
super(); // 상속받은 개체의 생성자 실행
F3 - Goto Definition
타이머 관련
import flash.utils.Timer;
import flash.events.TimerEvent;
private var currentTime:int;
private var myTimer:Timer = new Timer(10); // 딜레이 값
myTimer.start();
myTimer.addEventListener(TimerEvent.TIMER, timerHandler);
private function timerHandler(e:TimerEvent):void
{
}
myTimer.currentCount; // 현재 시간 확인
랜덤함수
Math.random();
ex) Math.random()*10 0~9까지 난수 발생
public function get 함수명():Boolean
{
}
// if(함수명) 이렇게 변수처럼 사용가능
플래시 10 디버그 플레이어
http://download.macromedia.com/pub/flashplayer/updaters/10/flashplayer_10_ax_debug.exe
텍스트필드 txt.text = "test"; 자동줄바꿈이 되어서 "test"가 표시되는 현상.
txt.text = "";로 초기화 시켜준후에 사용하거나 텍스트필드 옵션 auto kern 체크시 <p>태그가 포함되므로(Multiline의 경우에만 해당됨) 해제 후 사용.
AS3.0 초기화
package
{
import flash.display.*;
import flash.text.*;
import flash.events.*;
public class BeatSkin extends MovieClip
{
public function BeatSkin ():void
{
addEventListener(Event.ADDED_TO_STAGE, onAddedHandler);
}
private function onAddedHandler(e:Event):void {
init();
}
private function init():void
{
removeEventListener(Event.ADDED_TO_STAGE, onAddedHandler);
}
}
}
플래시 배열 관련
var arr:Array = [1,2,3];
delete(arr[1]);
trace(arr);
// result : 1,,3
AS3.0 stage.stageWidth와 stage.width 차이
stage.stageWidth와 stage.stageHeight는 stage의 width와 height를 나타내고,
stage.width와 stage.height는 stage 위에있는 DisplayObject들의 width와 height를 나타냄.
Flash Tab 사용안함
tabChildren = false;
포커스 설정
stage.focus = displayObject;
Flex 경우는 setFocus()
로드하는 html의 body 태그에 추가
<body onLoad="window.document.${application}.focus();">
AS3 delete 관련
var mc:MovieClip = new MovieClip();
addChild(mc);
// delete mc; 이렇게 사용하는 것이 아니라
removeChild(mc);
mc = null;
// 다른 언어의 경우 new로 생성된 메모리의 위치를 기억하기 위한 변수 mc를 null로 만듬. 하지만 flash의 경우 mc의 참조를 없애서 가비지 컬렉터에게 제거해도 된다는 것을 알려줌. 실제로 메모리에서 제거되는 것은 가비지 컬렉터만 가능.
AS3 Array push와 직접 대입
var arr:Array = new Array();
/*arr.push("a");
arr.push("b");
arr.push("c");*/
arr[0] = "a";
arr[1] = "b";
arr[2] = "c";
trace(arr[2]);
stage.displayState = StageDisplayState.FULL_SCREEN;
// StageDisplayState.FULL_SCREEN는 String "fullScreen"이므로 "fullScreen"이라고 넣어줘도 됨.
<param name="allowFullScreen" value="true" />
<embed src="sample.swf" allowFullScreen="true"...
// allowFullScreen을 true로 해줘야만 풀스크린이 실행된다. (아닐경우 에러)
Flash System.useCodePage
// true시 리퀘스트는 시스템의 code page로 encode. false시 리퀘스트는 Unicode로 encode.
플래시 로컬 mp3 로드
file:///C:/music/n.mp3
주소 이렇게 지정
SecurityError: Error #2148: SWF 파일 http://mb.mjblitz.jp/music/test.swf 은(는) 로컬 리소스 file:///C:/music/n.mp3 에 액세스할 수 없습니다. local-with-filesystem과 신뢰할 수 있는 로컬 SWF 파일만 로컬 리소스에 액세스할 수 있습니다.
at flash.media::Sound/_load()
at flash.media::Sound/load()
at test_fla::MainTimeline/frame1()
Flash Player 접근 가능 디렉토리
C:\Documents and Settings\계정\Application Data\Macromedia\Flash Player\#Security\FlashPlayerTrust
// 이클립스 및 프로젝트의 bin-debug같은 경우는 자동으로 등록됨.
Flash AS3.0 우클릭 메뉴 감추기
flash.ui.ContextMenu(contextMenu).hideBuiltInItems();
// 우클릭 메뉴 감추기
플래시 속성 변경
-default-size 550 400 -default-background-color 0xffffff -default-frame-rate 45
// Properties-ActionScript Compiler-Additional compiler arguments에서 설정
[SWF(width="550", height="400", backgroundColor="#ffffff", frameRate="45")]
// 클래스 파일 상단에 아래와 같이 Metadata를 이용할 수 있음
플래시 htmlText img src로 이미지 로드
import flash.text.TextField;
import flash.display.Loader;
import flash.events.Event;
import flash.display.LoaderInfo;
import flash.events.ProgressEvent;
var myTextField:TextField = new TextField();
var myText1:String = "<p>이미지 테스트<img src='http://static.naver.com/www/u/2010/0611/nmms_215646753.gif' id='testimage'></p>";
myTextField.x = 10;
myTextField.y = 10;
myTextField.width = 600;
myTextField.height = 600;
myTextField.background = true;
myTextField.border = true;
myTextField.border = true;
myTextField.multiline = true;
myTextField.htmlText = myText1;
this.addChild(myTextField);
var image:DisplayObject = myTextField.getImageReference("testimage");
var lo : Loader = image as Loader;
lo.contentLoaderInfo.addEventListener(Event.COMPLETE , loadCompleteListener)
lo.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS ,progressListener)
function loadCompleteListener($e : Event) : void
{
var info : Loader = ($e.currentTarget as LoaderInfo).loader as Loader;
trace("width = " , info.width , " " , "height = " , info.height);
info.width = 100;
info.height = 500;
trace("width = " , info.width , " " , "height = " , info.height);
}
function progressListener($e : ProgressEvent) : void
{
trace("bytesLoaded = " , $e.bytesLoaded , "bytesTotal = " , $e.bytesTotal);
}
ActionScript 3.0 언어 및 구성 요소 참조 설명서
http://livedocs.adobe.com/flash/9.0_kr/ActionScriptLangRefV3/
AS3.0 stage.stageWidth와 stage.width 차이
stage.stageWidth와 stage.stageHeight는 stage의 width와 height를 나타내고, stage.width와 stage.height는 stage 위에있는 DisplayObject들의 width와 height를 나타냄
AS3.0에서 라이브러리의 클래스 이름을 이용하여 무비클립을 동적으로 사용
var c:Class = getDefinitionByName("mc") as Class;
var ob:DisplayObject = new c();
Error #2044: 처리되지 않은 IOErrorEvent입니다. text=Error #2036: 로드가 완료되지 않았습니다
이 에러는 외부의 이미지 로드에 실패 했을때 발생하는 에러이므로 리소스 swf 경로를 다시 확인
Flash String.search dot and comma problem
// search()는 정규표현식 사용. indexOf() 사용해서 문자열 찾아야 함.
crossdomain.xml
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" secure="false" />
<allow-http-request-headers-from domain="*" headers="*" secure="false" />
</cross-domain-policy>
// 외부도메인의 swf파일을 로드할때에는 보안정책상 루트폴더에 넣어주어야 한다.
package
{
import flash.display.Loader;
import flash.display.MovieClip;
import flash.net.URLRequest;
import flash.system.LoaderContext;
public class CheckPolicyFile extends MovieClip
{
public function CheckPolicyFile()
{
var urlRequest:URLRequest = new URLRequest("http://www.google.co.kr/images/nav_logo7.png");
var loader:Loader = new Loader();
var loaderContext:LoaderContext = new LoaderContext();
loaderContext.checkPolicyFile = true;
loader.load(urlRequest, loaderContext);
this.addChild(loader);
}
}
}
// URLRequest시 checkPolicyFile 설정 필요.
플래시 한글 텍스트필드가 느릴 경우
public function addListener(object:DisplayObjectContainer):void
{
for(var i:int=0; i<object.numChildren; ++i)
{
var child:DisplayObject = object.getChildAt(i);
if(child is SimpleButton)
{
setListener(child, MouseEvent.CLICK, handleClick);
setListener(child, MouseEvent.ROLL_OVER, handleRollOver);
setListener(child, MouseEvent.ROLL_OUT, handleRollOut);
}
// 한글 텍스트필드 느릴경우 alwaysShowSelection을 true로 해준다.
if(child is TextField)
{
TextField(child).alwaysShowSelection = true;
}
}
}
자바스크립트와 플래시 통신
플래시에서 자바스크립트내의 함수를 불러올때
ExternalInterface.call("함수명");
자바스크립트에서 플래시내의 함수를 불러올때
document.getElementById("플래시id").함수명();
자바스크립트에서 로드될 플래시함수는 addCallback을 해 두어야 한다.
ExternalInterface.addCallback("플래시내의 함수명", 로드될함수명);
MovieClip을 사용할지 Bitmap을 사용할지에 대한 고민
우선 MovieClip은 손이 두번가는데 비해, Bitmap은 리소스 교체가 쉽고 간결하다.
하지만 Bitmap은 MouseEvent가 안되므로 MovieClip을 사용.
Bitmap도 Tween은 가능. (greensock 기준)
Scene에 내보내 인스턴트 네임으로 사용할때는 이미지 교체(패가 바뀌었을 때)가 안되므로 Linkage로 사용한다.
// 각 객체에 마우스 이벤트를 걸 필요가 없이 버튼의 위치를 고정시킬 것이므로 비트맵으로도 문제가 없을듯.
mp3 이미지 표시
var binaryData:ByteArray;
var file:URLLoader = new URLLoader(new URLRequest("test.mp3"));
var finalData:ByteArray = new ByteArray;
var byteCon:Loader = new Loader;
var offset:int;
var rLength:int;
var found:Boolean = false;
var end:Boolean = false;
file.dataFormat = URLLoaderDataFormat.BINARY;
file.addEventListener(Event.COMPLETE, handleComplete);
function handleComplete(e:Event):void
{
binaryData = file.data as ByteArray;
binaryData.position = 0;
//get offset and length
while(!found){
var pos:int = binaryData.readUnsignedInt();
if(pos == 0x41504943){
offset = binaryData.position + 20;
}
if(pos == 0){
if (!found){
rLength = binaryData.position - 1 - offset;
if(rLength > 5000){
found = true;
}
}
}
binaryData.position = binaryData.position - 3;
}
finalData.writeBytes(binaryData, offset, rLength);
finalData.position = 0;
byteCon.loadBytes(finalData);
addChild(byteCon);
}
AS 3.0 이벤트 리스너에 인수 전달
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
// SWF Metadata
[SWF(width="400", height="300", backgroundColor="#FFFFFF", framerate="30")]
public class Main extends Sprite {
public function Main():void {
var btn:Sprite = new Sprite();
btn.graphics.clear();
btn.graphics.beginFill(0x0099FF);
btn.graphics.drawRect(0, 0, 100, 50);
btn.graphics.endFill();
btn.buttonMode = true;
btn.x = stage.stageWidth * 0.5 - btn.width * 0.5;
btn.y = stage.stageHeight * 0.5 - btn.height * 0.5;
addChild(btn);
btn.addEventListener(MouseEvent.CLICK, onClickHandler("0123456789"));
}
private function onClickHandler(value:String):Function {
function myfunc(event:MouseEvent):void {
trace(value);
trace(event.target);
}
return myfunc;
}
}
}
// Output
// 0123456789
// [object Sprite]
'Study' 카테고리의 다른 글
16진수의 FF의 이해 (0) | 2023.02.25 |
---|---|
2009년 11월 12일 SK 컴즈 세미나 후기 (0) | 2023.02.25 |
Workday(워크데이) Language Change(언어 변경) (0) | 2023.02.23 |
Mac(맥) 터미널 파일 명령어 (0) | 2023.02.23 |
Tistory(티스토리) Icon(아이콘) 변경 (0) | 2023.02.23 |