Price Effect :: 가격 카운팅 효과

[JIN_U/My Portfolio]
"신세계몰"에서 사용한 가격 카운팅 효과이다. 카운팅에 가장 어울리는 효과는 "Quintic.easeOut"로 뽑아서 사용하였다. 효과를 적용한 곳은 "신세계 백화점 브랜드", "신세계 이마트 베스트 셀러"에 사용되었다.

아래는 카운팅 효과를 3가지 이징 타입으로 적용시켜 본 것이다. 
현재 엔진은 0부터 시작하게 되어있는데 하나의 파라메터를 받아 현재의 값에서 차이값을 계산하는 부분을 확장할 생각이다. 확장 후에 다시 업뎃해야 겠다.



좌측 "신세계 백화점 브랜드"는 '부용운 대리', 우측 "신세계 이마트 베스트 셀러"은 '이현정 대리'가 작업하였다.
사용자 삽입 이미지사용자 삽입 이미지

사용자 삽입 이미지
2008/10/19 22:29 2008/10/19 22:29

as 3.0 IPOD Rotation Scroll System

[FLASH/Classes]

클래스를 만들다 중간에 잘못 만들어 다시 만들어야 하는 상황이 되었다. 만약 지금이 실작업이였다면 눈물방울 하나가 뚝 하고 떨어져내렸을 것이다. 내가 포인트 모션을 넣을려다 잘못 만들었다는 판단을 내렸다. 아우... 다시 클래스만들어서 올려야지. 우선 swf만 올리고 소스는 다시 수정해서 올려야 겠다.

2008/05/15 08:33 2008/05/15 08:33

as 3.0 RotateTo Class

[FLASH/Classes]
예전에 사용하였던 것을 이연선대리 블러그를 갔다가 보고 나도 하나 만들었봤다.
업그레이드 할려니깐 오류가 참 많이 나는군... 기초를 좀 더 다져야 겠는걸... 흠~



## Color 변환 프로그램은 우야꼬(윤진상)님의 ASDecorator air 파일로 변환함.
## Document Class

- FileName : RotationSystem.as

package
{
   
// 내장 클래스
    import flash.display.Sprite;
   
import flash.display.MovieClip;
   
import flash.display.DisplayObject;
   
import flash.display.Stage;
   
//
    import flash.events.MouseEvent;
   
// 외장 클래스
    import jin_u.display.RotateTo;
   
//
    public class RotateToSystem extends Sprite
    {
        
private var poleMC:MovieClip;
        
//
         public function RotateToSystem ():void
         {
              trace (
"## RotateToSystem constructor");
             
//
              initialize ();
         }
        
private function initialize ():void
         {
              trace (
"## RotateToSystem initialize()");
             
//
              poleMC=new Pole() ;
              poleMC.name=
"poleMC";
              poleMC.x=stage.stageWidth / 2;
              poleMC.y=stage.stageHeight / 2;
              addChild (poleMC);
             
//
              setListener ();
         }
        
private function setListener ():void
         {
              stage.addEventListener (MouseEvent.CLICK,onClick);
         }
        
private function onClick (e:MouseEvent):void
         {
              RotateTo.rotateToPos (poleMC,mouseX,mouseY,0.2);
         }
    }
}

- FileName : jin_u.display.RotateTo .as
package jin_u.display
{
    import flash.display.DisplayObject;
    //
    import flash.events.Event;
    //
    public class RotateTo
    {
         private static var tMC:DisplayObject;
         //
         private static var tX:Number;
         private static var tY:Number;
         private static var dX:Number;
         private static var dY:Number;
         private static var kP:Number;
         private static var dR:Number;
         private static var sP:Number;
         private static var nR:Number;
         private static var oR:Number;
         //
         public function RotateTo ():void
         {
              trace ("## RotateTo constructor");
         }
         public static function rotateToPos (tmc:DisplayObject=null,targetX:Number=0,targetY:Number=0,targetSp:Number=0):void
         {
              tMC = tmc;
              tX = targetX;
              tY = targetY;
              sP = targetSp;
              //
              setListener ();
         }
         private static function setListener ():void
         {
              tMC.addEventListener (Event.ENTER_FRAME, onEF);
         }
         private static function onEF (e:Event):void
         {
              dX=tMC.x - tX;
              dY=tMC.y - tY;
              kP=Math.atan2(dY,dX) / Math.PI * 180;
              //거리를 계산하여 x값을 rotation값으로 변환시킨다.
              dR=kP - tMC.rotation;
              //0 과 -180 을 지날때 변경 시킨다
              if (Math.abs(dR) > 180)
              {
                   dR=360 - Math.abs(kP - tMC.rotation);
                   if (tMC.rotation < 0)
                   {
                        tMC.rotation=tMC.rotation - dR * sP;
                   }
                   else if (tMC.rotation > 0)
                   {
                        tMC.rotation=tMC.rotation + dR * sP;
                   }
              }
              else
              {
                   //0 과 180 을 지날때는 그냥 대입한다
                   tMC.rotation=tMC.rotation + dR * sP;
              }
              nR = tMC.rotation;
              // 현재 로테이션과 이전의 로테이션이 같다면 리스터를 삭제함.
              if (nR == oR)
              {
                   destroy ();
              }
              oR = nR;
         }
         private static function destroy ():void
         {
              tMC.removeEventListener (Event.ENTER_FRAME, onEF);
         }
    }
}
2008/05/14 07:59 2008/05/14 07:59

as 3.0 귀찮은 import 키워드.

[FLASH/Classes]

class를 공부하다가 항상 import를 써서 사용(Java, C)을 하지 않으면 절대경로로 접근하던가 해야 하는데 난 이것을 한군데서 받을 수 없을까를 고민해 봤다.

일반적으로 타임라인(Timeline)에서 작업을 하면 바로 사용할 수는 있지만, 자신이 만든 class는 import를 하지 않은 이상 아니면, Preference > Language > Actionscript 3.0 Settings 또는 class 상에서 절대경로로 위치를 잡아주지 않는 이상 사용할 수가 없다. 그래서 난 매 페이지 마다 중복되는 import를 무시하고 사용할 수 있는 방법을 찾아보다가 아래와 같이 만들어 보았다.

FB3(Flex Builder 3)에서 자동적으로 생성이 된다는 말에 약간의 타격을 받았지만!! 어쨌든 3~4시간을 고민하면서 잘 하지도 못하는 class로 만들어 보았다.

타입 유형 체크를 하지 못하는 단점을 갖고 있지만, 언제부터 플래시가 타입선언을 하면서 언어로 자리 잡은것인가!!! 대충 코드 넣고 최적화에 신경 좀 써주고 비주얼만 잘 뽑아내면 된다. 코드는 사용자에겐 아무 소용이 없다. 디자이너 분들이여 그대들의 위치를 사수하고 자신과 맞지 않는 것을 하기 위해 너무 무리하게 힘 낭비를 하지 말았으면 좋겠다. 자신의 재능을 먼저 찾아 볼 수 있는 디자이너가 되었으면 좋겠다.

"사용자는 내면의 가치 보다 외면의 가치에 만족하게 되어있다."
(그냥 내 생각을 쓰고 싶었다. 아래 코드와는 상관 없다.)

## Color 변환 프로그램은 우야꼬(윤진상)님의 ASDecorator air 파일로 변환함.
## Document Class

- FileName : GlobalPathofClass.as

package
{
    import flash.display.MovieClip;
    // 해당되는 import를 하나의 클래스에 담아서 사용한다.
    // 현재 클래스명이 길지만 이것을 짧게 처리 한다면, 짧게 접근하여 처리가 가능해진다.
    import jin_u.GlobalImport;
    //
    public class GlobalPathofClass extends MovieClip
    {
         public function GlobalPathofClass ():void
         {
              trace ("## GlobalPathofClass constructor");
              // 클래스 확인
              trace ("GlobalImport._MovieClip = ",GlobalImport._MovieClip);
              trace ("flash.display.MovieClip = " + flash.display.MovieClip);
             trace ("GlobalImport._MovieClip == flash.display.MovieClip = ",GlobalImport._MovieClip == flash.display.MovieClip);

              // ClassA 클래스 테스트
              trace ("GlobalImport._ClassA = " + GlobalImport._ClassA);
              var ca:* =new GlobalImport._ClassA() ;
              ca.setName ("jin_u");
              trace ("## GlobalImport._ClassA : ca.setName() = ","jin_u");
              trace ("## GlobalImport._ClassA : ca.getName() = ",ca.getName());

              // ClassB 클래스 테스트
              var tf:* =new GlobalImport._ClassB() ;
              addChild (tf.createTextField("Test of GlobalImport Class",20,20));
         }
    }
}

- FileName : jin_u/GlobalImport.as
package
jin_u

{
    import flash.display.Sprite;
    import flash.display.MovieClip;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;
    //
    import jin_u.classA.ClassA;
    import jin_u.classB.ClassB;
    //
    public class GlobalImport
    {
         // 내장 클래스 정의
         public static const _Sprite:* = Sprite;
         public static const _MovieClip:* = MovieClip;
         public static const _TextField:* = TextField;
         public static const _TextFieldAutoSize:* = TextFieldAutoSize;
         public static const _TextFormat:* = TextFormat;
         // 외장 클래스 정의
         public static const _ClassA:* = ClassA;
         public static const _ClassB:* = ClassB;
    }
}

- FileName : jin_u/classA/ClassA.as
package jin_u.classA
{
    public class ClassA
    {
         private var name:String;
         //
         public function ClassA ():void
         {
              trace ("## ClassA constructor");
         }
         public function setName (pname:String="nobody"):void
         {
              name=pname;
         }
         public function getName ():String
         {
              return name;
         }
    }
}

- FileName : jin_u/classB/ClassB.as
package
jin_u.classB
{
    import jin_u.GlobalImport;
    //
    public class ClassB
    {
         public function ClassB ():void
         {
              trace ("## ClassB constructor");
         }
         public function createTextField (str:String, x:Number, y:Number):*
         {
              trace ("## ClassB : createTextField (",str,",", x,",", y,")");
              //
              var label:* = new GlobalImport._TextField();
              label.text = str;
              label.x = x;
              label.y = y;
              label.autoSize = GlobalImport._TextFieldAutoSize.LEFT;
              label.background = true;
              label.border = true;

              var format:* = new GlobalImport._TextFormat();
              format.font = "Verdana";
              format.color = 0xFF0000;
              format.size = 12;
              format.underline = true;

              label.defaultTextFormat = format;

              return label;
         }
    }
}

사용자 삽입 이미지

2008/05/12 14:56 2008/05/12 14:56

AS3.0 3D Engine: Alternativa Platform

[FLASH/Note]

Alternativa3D tech specs:

  • Signals system — only nesessary calculations;
  • BSP — quality polygon sorting, “sharp” crossings;
  • n-gons support;
  • reusing layers (only changed regions redrawing, polygons are independent);
  • objects hierarchy;
  • only necessary matrix, coords and UVs recalculating;
  • perspective correction — dynamic triangulation;
  • collision detection.

new features::

2008/05/01 17:41 2008/05/01 17:41
TAG. , , ,

AS3.0 WOW-ENGINE

[FLASH/Note]
http://seraf.mediabox.fr/wow-engine/as3-3d-physics-engine-wow-engine/

작업하다가 갑짜기 박남숙씨가 날려준 쓸뒤 엔진이다.
정말 WOW 다.. ㅋㅋ

시간 있을때 한번 봐야지. 그게 언제일까나... ㅋㅋ
2008/01/29 17:49 2008/01/29 17:49

Error: Error #1502: 스크립트 실행 시간이 기본 제한 시간인 15초를 초과했습니다.

[FLASH/Note]
ㅎㅎ Flash CS3로 for문을 너무 돌렸더니. 아래와 같은 에러가 방생했다. ㅡㅡ;

Error: Error #1502: 스크립트 실행 시간이 기본 제한 시간인 15초를 초과했습니다.
뻘짓거리로 인하여 제한 시간이 15초인걸 알게 되었다. 뻘짓거리도 가끔 해볼만 하군.. 냥냥
(기존에도 15초인가? 기존에는 이런 에러를 본적이 없어서 몰겠네...)

그리고 요번에 CS3로 작업하다가 먼가를.. 발견했는데 버그였는데 머였더라.. 생각나면 따로 글써야 겠군...
2007/09/04 13:06 2007/09/04 13:06
TAG. , ,

요즘의 나 그리고 몸

[JIN_U/My Life]
블러그에 글쓴지가 일주일이 넘었네. CJTicket 작업에 빠져있었더니 블러그질을 못하겠다. 대부분 Back-End 쪽 심플한 이미지 편집툴 개발 작업을 Flash CS3 AS3.0으로 진행하고, 거기서 편집한 이미지를 다시 Front-End 쪽에서 플래시8로 받아와서 효과를 주는 작업을 진행하고 있다. 부담없이 백단 작업을 3.0으로 했다. MD만 업뎃하면 되니깐... ㅎㅎ

CS3.0으로 개발을 해보니 새로운 것들 투성이였다. 코드가 정말 많이 바뀌었다는 걸 실감하게 했다. 처음에만 그렇고 시간이 지나면서 익숙해 지니깐 손에 딱딱 맞는게 느낌 좋던데???

나이 많은 빽단 개발자들과는 잘 맞지 않는거 같다... 특히나 근래에는 기획에 관련되서 너무 민감하게 내가 나댄다. 기획에 기짜도 모르는 놈이... 기획 공부 좀 해야겠다는 생각을 하고 있다. 생각없이 일을 시키는 인간들과 싸우기 위해서? ㅎㅎ. 그렇다. 싸우기 위해서이고 나아가 재미있을꺼 같다. 재미있는건 해두면 나의 세상은 또 다르게 돌아갈 것이다. 약간 기대?? ^^

요즘의 몸상태는... 그러니깐 저번주와 요번주는 몸이 안좋아서 고생 좀 했다. 비가 많이 오니 수술 부분이 왜이리 쑤시던지 원... 참 괴로운 나날이였다. 회사도 몇번 못가고 재택을 했으니.. 머.. 말 다했지... 아프지 말아야 되는데... 점점 몸이 망가지는 느낌이 드냔 말야.. ㅡㅡ^

이 글을 보는 모든 사람들은 아프지 않기를 바란다.
2007/08/23 21:35 2007/08/23 21:35

AS3.0 :: caurina tweener easing sample

[FLASH/Library]


caurina 베지어 곡선의 이징 효과를 보기 위해 Easing Method ComboBox를 추가시켰다. 엄청난 노가다다. 느낌 다보기 위해서 이런짓을 하다니. 에휴~ 머~ 클래스 분석도 할 겸. 겸사겸사 공부도 되긴 했다.

이거 완조니 자수 꼬임에 넘어간 느낌이다. 주말 caurina class에 빠져버렸다. -_-a

2007/08/06 00:24 2007/08/06 00:24

AS3.0 :: caurina tweener

[FLASH/Library]
update : http://code.google.com/p/tweener/
jasu's discriptoin : [AS3] caurina Tweener 클래스 사용 방법

caurina tweener로써 MIT 라이센스를 가지구 있는거 같다.
자수 said "static 형태로 되어 있어서 따로 인스턴스화 할 필요가 없어서 사용하기도 편하고 하나의 오브젝트에 여러개의 프로퍼티 속성에 대한 트윈을 적용할때도 복수 프로퍼티 트윈이 가능하고 포인트와 포인트 양 두점에 대한 트윈 뿐만 아니라 복수 포인트 에싱도 가능"

위와 같은 여러가지 트윈 기능을 수행할 수도 있는 것을 보인다. 아직 사용을 안해봤지만, 샘플을 몇개 봤는데 베지어 곡선에 대한 트위닝까지도 기본적으로 가능하고 그 외의 3D 작업까지도 가능 할 것으로 추정된다. 3D는 페이퍼비젼을 사용하는거 같은데... 아직 파일만 다운 받았지 분석은 해보지 못했다.

저 트윈을 찾다가 우연히 http://proto.layer51.com/default.aspx 을 보게 되었다. 감회가 새롭다. 정말 많이 갔던 곳이였는데... 코드 분석 역시 이곳에서 많이 했는데 ㅎㅎ;

음... 내일 쉴까.. caurina tween을 분석할까.. 말까.. 고민되넹 오랫만에 아무것도 없는 주말인데... 그냥 주말을 즐길까나?? ^^
2007/08/04 23:55 2007/08/04 23:55