APE : SpringConstraint의 이벤트는 왜...

Project/Programming 2007. 8. 23. 05:50

Collide 이벤트를 가지고 형광등을 표현해 봤다. 형광등의 진공 유리관에도 collide 이벤트를 적용하려고 했었는데 SpringConstraint에서 이벤트 반응을 하지 않는다. 구조상으로는 SpringConstraint -> AbstractConstraint -> AbstractItem -> EventDispatcher 와 같은 상속관계를 갖고 있음에도 이벤트에 반응하지 않는 것이 좀 이상하다.

일단은 진공관에 대한 이벤트 반응과 collidable을 false로 해 놓았다.


    

설정

트랙백

댓글

[AS3] APE : CollisionCircleParticle

Programming/Physics Engine 2007. 8. 18. 06:37
APE의 RectangleParticle 클래스를 이용해서 파티클을 생성하고 등록할 경우에는 자체 rotation (angle) 표현을 하지 못한다. 이는 CircleParticle의 경우도 같다. 하지만 CircleParticle을 상속하고 있는 WheelParticle의 경우에는 자체 angle값을 가지고 있어서 마찰과 각도에 따라서 자체 회전을 하게 된다. 아래 실험한 오브젝트의 경우도 WheelParticle을 통해서 생성한 오브젝트들이기 때문에 회전이 가능하다.

화면에서 마우스를 down한 상태에서 시간의 흐름에 따라 원형의 크기가 커지는데 Max 값은 반지름 80으로 한정하였다. 생성한 오브젝트를 MouseDown and Drag하면 힘의 방향을 바꿀 수 있으며 MouseUp을 하게 되면 마우스 포인트와의 SpringConstraint를 removeConstraint를 실행하여 연결을 끊어 주었다. 이러한 형태는 앙드레 미쉘이 만들고 있는 Revive의 엔진 자체에 있는 마우스 이벤트와 비슷하지만 구현 방법은 아마 다를 듯싶다.

오브젝트가 없는 화면에서 위에서 생성한 방법으로 생성할 수 있는 오브젝트의 개수는 10개로 한정하였다. 생성한 모든 오브젝트들은 서로 collision이 가능하다.(외벽 또한 그러함) 8개로 오브젝트를 한정한 이유는 오브젝트가 많으면 지누 컴이 뻑난다.(쿠쿠)

이러한 형태를 어디에 쓸 수 있을 지는 생각해 봐야겠다. 원래 이런 형태로 테스트 하려고 했던 것은 아니었는데 하다 보니…

원래 하려고 했던 것은 위에서 언급했던 것과 같이 RectangleParticle의 경우 자체 angle이 지원되지 않아서 중력에 의해서 외부의 충격을 받았을 때 WheelParticle처럼 회전을 하지 못한다는 것을 고민하다가 APE 제작자 alec cove와 APE를 사용하는 kiosk(키오스크 작업을 하는지 이름이 그러한지 모르겠다.) 와의 대화를 보고 알게 되었다. 방법은 아래와 같다.

4면에 대한 충돌과 각도에 따라 회전이 가능한 사각형의 오브젝트를 만들 때는 4점이 되는 모서리 부분에 CircleParticle을 생성하고 그 모서리의 외각선을 따라 각각 4개의 SpringConstraint로 연결해 준다. 이렇게만 하면 4점이 모두 연결 되었으나 외각선에 따라 연결되었기 때문에 충격을 받으면 쓰러지듯이 퍼져버린다. 이를 방지하기 위해서 모서리 4개 중에서 대각선으로 마주보는 CircleParticle들을 연결하는 2개의 SpringConstraint로 연결하되, 그 연결은 non-collidable springs 이어야 한다는 점이다.

위와 같은 방법으로 Group에 추가하면 사각형이 생기고 그 사각형 안에 X자 모양의 두 개의 선이 대각선으로 연결된 모양이 된다. 이렇게 만들어지면 외부의 충격이나 중력에 의해서 다른 그룹에 있는 particle들과의 충돌에 의해서 각도와 좌표가 바뀌는 CustomRectangleParticle을 생성할 수 있다. 이런 방법으로 사각형뿐만 아니라 다각형들도 연결을 통해서 생성할 수가 있다.

그러데 하다 보니 문제가 좀 있다. 4개의 모서리에 있는 CircleParticle의 크기를 작게 할 경우 SpringConstraint도 함께 무게가 실리지 않아서 다른 오브젝트와 충돌했을 때 그 안쪽으로 collision된 오브젝트들이 뚫고 들어온다는 점이다. 엔진의 계산 값이 벗어 났을 때는 오류가 발생한다. 이는 좀더 고민해 봐야겠다.



    

설정

트랙백

댓글

Google의 애드센스를 달다...

Miscellaneous/Story 2007. 8. 16. 22:09
재미 삼아 Google의 애드센스를 달아보았다. 블로그에 외부의 광고를 단다는 것이 디자인 적으로나 컨텐츠의 가독성 면에서도 좋지 않을 것이라는 생각에서 그 동안 달지 않았었는데 텍스트 색과 배경색 크기 등을 비교적 다양하게 지정할 수 있어서 적용해 보았다.

https://www.google.com/adsense/ 이곳을 방문하면 한글로 등록 및 안내를 해주고 있어서 초기 애드센스 등록할 때보다는 손쉽게 계정을 만들어 적용할 수 있다. 등록 요청을 하게 되면 일정기간, 보통 2일 정도 소요된다고 하는데 나 같은 경우는 오전에 신청하고 오후에 메일을 통해서 승인이 떨어졌다.

메일이 도착하면 안내하는 웹사이트에 접속하여 등록 과정을 거치게 되는데 개인 정보입력에서 영문 집주소를 입력하는 부분이 있다. 이는 수익이 일정금액(100달러)에 도달 했을 때 기준으로 수표를 우편으로 받을 곳이기에 정확하게 표기할 필요가 있다.

영문 주소 번역은 웹사이트에서도 간혹 지원하고 있는 듯 한데 아래 올려놓는 파일을 다운 받아서 사용하면 유용할 듯싶다.



개인정보까지 모두 마무리하면 자신이 노출하고자 하는 광고 형태를 선택할 수 있다. 종류는 콘텐츠용 애드센스, 검색용 애드센스, 추천 이렇게 3 종류로 구분되며 현 블로그의 경우는 콘텐츠용 애드센스에 해당한다.

콘텐츠용 애드센스로 들어가면 광고 단위와 광고색상 및 추가옵션을 선택할 수 있다. 설정을 끝내고 다음을 클릭하면 채널 등록이 있는데 채널 별로 광고를 관리하는 기능 같은데 자세한 것은 아직 모르겠다. 나 같은 경우는 블로그 주소를 가지고 타겟팅 기능 채널 하나를 추가했다.

그러고 다음으로 넘어가면 애드센스 코드를 볼 수 있는데 이 코드를 복사해서 적용하고자 하는 블로그나 웹사이트의 해당 페이지 <body> </body> 안에 적당히 적용하면 페이지 내에서 볼 수 있게 된다. 애드센스 코드를 임의로 변경할 경우 수익 지불을 거부당할 수 있다고 하니 설정한대로 적용하는 것이 바람직할 것 같다.

초기에는 광고가 나타나지 않고 추가옵션에서 설정한 대체 광고 또는 색상이 자주 노출된다고 하니 등록 과정을 마치고 하루 정도 지나봐야 할 듯싶다. 일단 애드센스를 다는 과정은 생성된 코드를 html에 적용하는 것 까지만 하면 모든 설정은 끝난 것이니 지켜보면 될 듯싶다.

간혹 부정클릭으로 인해서 Google로부터 수익 지급을 거부당하는 사람들이 있는 듯 하다. 부정 클릭은 대부분 본의 아니게 외부의 부정클릭을 유도하는 공격을 받았을 경우에 많이 발생하는 듯 싶다. 이 또한 대책을 세워야 하지 않을까 싶다… 검색페이지에서 애드센스에 관련된 정보를 검색해 보면 많은 자료들을 얻을 수 있다.

    

설정

트랙백

댓글

APE(Actionscript Physics Engine) Class Diagram

Project/Programming 2007. 8. 16. 10:05

기존에 만들었던 APE의 UML에서 Association 표기가 없었던 것을 추가하고 기존에 잘못 되었던 부분을 수정했다. 클래스 소스를 기준으로 작성된 class diagram이므로 정확하지 않을 수 있지만 대체적으로 package를 분석하는데 도움이 될 것 같다.

아래 풀사이즈 jpg이미지와 플래시로 만들어 놓은 파일을 올려놓는다.  






사용자 삽입 이미지





    

설정

트랙백

댓글

[AS3] TextField 길이를 벗어나는 글자는 ...으로

Programming/ActionScript 3.0 2007. 8. 16. 03:13
이 클래스는 인수로 지정한 TextField의 width길이보다 text 내용이 길어질 경우에 뒤에 임의로 "..."을 append 하는 클래스다. static 메소드 형태로 만들려다가 동적으로 TextField의 width 값을 변경할 경우에도 편하게 사용할 수 있도록 만들었다. 실제적으로 동적으로 사이즈를 변경해야 하는 경우가 많지는 않겠지만 브라우저의 사이즈에 따라 유동적으로 TextField의 길이를 변경해야 할 경우에는 유용하게 사용할 수 있을 듯싶다.

아래는 위 클래스를 이용하여 동적으로 TextField의 사이즈를 변경하는 예이다.









아래는 클래스 소스 원본
package jasu.display{
        import flash.text.TextField;
        public class CutTextField {
                private var _tf:TextField;
                private var _t:String;
                public function CutTextField(tf:TextField):void {
                        _tf = tf;
                        _t = tf.text;
                        cutText();
                }
                public function cutText():void {
                        if (_tf.maxScrollH > 0) {
                                _tf.appendText("...");
                                while (_tf.maxScrollH > 0) {
                                        var str:Array=_tf.text.split("");
                                        var len:int = str.length;
                                        str.splice(len - 4,1);
                                        _tf.text=str.join("");
                                }
                        }
                }
                public function setTextField(tf:TextField):void {
                        _tf = tf;
                        _t = tf.text;
                }
                public function getTextField():TextField {
                        return _tf;
                }
                public function set width(w:int):void {
                        _tf.width = w;
                        _tf.text = _t;
                }
                public function get width():int {
                        return _tf.width;
                }
                public function set text(t:String):void {
                        _tf.text = _t = t;

                }
                public function get text():String {
                        return _t;
                }
        }
}
    

설정

트랙백

댓글