포물선 운동과 공 step04 : 공의 회전 공의 회전은 오른쪽으로 진행할 때는 시계방향이므로 + , 왼쪽으로 진행할 때는 반시계방향이므로 - 이다. 다른 처리를 해줄 필요없이 ball의 x방향에 따라서 rotation을 적용해 주면 된다. rot 라는 변수를 하나 만들어서 x축의 변화가 있을때마다 부호를 바꿔준다. 소스) import flash.events.Event; var g:Number = 1; var vy:Number = 8; var vx:Number = 10; var rot:Number = vx; this.addEventListener(Event.ENTER_FRAME, function(e:Event):void{ vy += g; ball.y += vy; ball.x += vx; ball.rota..
포물선 운동과 공 step03 : 공에 수평운동 추가 앞서 수평운동은 vy와 마찬가지로 단순히 vx 변수를 만들어서 ball.x에 계속 더해주면 된다. step01과 마찬가지의 방식으로 vx의 오른쪽 끝은 stage.stageWidth - (ball.width / 2), 왼쪽 끝은 ball.width / 2로 구하여 조건문 처리 해준다. 소스) import flash.events.Event; var g:Number = 1; var vy:Number = 8; var vx:Number = 10; this.addEventListener(Event.ENTER_FRAME, function(e:Event):void{ vy += g; ball.y += vy; ball.x += vx; if( ball.x > stage..
포물선 운동과 공 step02 : 공에 중력 더하기 앞서 step01에서 살펴본 공의 움직임은 중력이 없기 때문에 약간 부자연스럽다. 중력을 포함하는 공식은 아래와 같다. g = 1 (중력가속도 값) 수직 방향의 속도 = 수직 방향의 속도 + g 움직이는 물체 = 움직이는 물체 + 수직 방향의 속도 공식을 그대로 적용하여 소스로 옮기면 var g:Number = 1; var vy:Number = 8; 매프레임(시간)이 증가할 때 마다 vy = vy + g; ball.y = ball.y + vy; 포물선 운동에서 x축과 y축 어떠한 물체를 던져 올릴 경우 사선운동에 있어서 수평 방향으로는 공기의 저항을 무시하므로 등속 운동. 수직방향은 중력운동을 하므로 등가속도 운동을 한다. 이러한 운동을 포물선 운동이라..
포물선 운동과 공 step01 : 공의 움직임 1. 움직임 변수 vy를 만들어 주고 엔터프레임 시킨뒤 ball.y에 계속 vy값을 더해준다. 2. ball.y의 값이 밑으로 증가하다가 세로 너비의 끝점인 stage.stageHeight - (ball.height/2)를 만나면 vy 부호를 바꿔서 다시 위로 튀어오르도록 한다. 공의 원점이 정 가운데에 있기 때문에 stage.stageHeight - (ball.height/2) 으로 처리해 주는 것이며 그림으로 보면 다음과 같다. 3. 마지막으로 ball의 y가 ball.height/2 보다 작을경우 다시 부호를 바꾸어준다. 소스) import flash.events.Event; var vy:Number = 20; this.addEventListener(E..
Camera 클래스에서는 threshold 라는 메서드를 사용하여 임계값을 통과한 픽셀을 새 색상 값으로 설정하고 설정된 색상을 보통 getColorBoundsRect 라는 메서드로 사각형을 그려내서 증강현실과 같은 멋진 기능을 구현할 수 있는데 이 getColorBoundsRect에서 그려낸 영역과 파티클(객체)과의 충돌이 있을경우 반대 방향으로 파티클이 이동해야 하는데 이때 Rect안에 파티클이 완전히 겹친다거나 하는 상황이 생기면 파티클은 계속 왔다 갔다 하는 오작동이 생길 수 있다. (계속 반대 부호가 반복되므로) 그래서 hitTestObject 메서드가 동작할 때 "최초의 _touchBool이 false일 경우에만 로직을 처리하고 true로 바꾸어 준다" 이렇게 되면 돌아오는 다음 인터벌에서 _..
주문서코드 만들기 나름이겠지만 제작했던 쇼핑몰의 invoice코드가 대략 이런식으로 만들어졌었기에 기록을 남겨둔다. 형식 = "[4자리 연도로 표기된 날짜] + [1] + [101] - [세션번호]" 예) 201404281101-750196931 만약 동일한 [4자리 연도로 표기된 날짜] + [1] 이 존재한다면 그 뒷 부분인 [101..102..103]을 +1로 증가 시킴 + [세션번호] 예) 201404281102-750196931 Code by Classic ASP
최대공약수, 최소공배수 재귀함수를 이용한 최대공약수와 최소공배수 공식을 알아보자. 최대공약수 : 두 값을 나누는 나머지 값이 0이 될때까지 계속 나누고 두번째 값과 두 수의 나머지를 다시 재귀적으로 호출한다. 최소공배수 : 최대공약수를 구한 다음 첫 번째 수를 최대공약수로 나누고 여기에 두 번째 수를 곱해서 구한다. function calGCD(value1:int, value2:int):int{ if(value2 == 0) return value1; else return calGCD(value2, value1 % value2); } trace("최대공약수: "+calGCD(24,36)); //12 function calLCM(value1:int, value2:int):int{ var temp:int = ..
재귀함수 재귀함수는 두 가지 종류가 있다. 첫번째는 직접순환 : 함수가 직접 자기 함수를 호출하면서 반복 실행됨. 두번째는 간접순환 : 두 함수가 서로를 번갈아 가면서 호출 함. 재귀함수의 가장 큰 주의점은 무한 반복이며 빠져나오는(return)로직이 반드시 있어야한다. import flash.display.Sprite; var degree:Number=0; var size:Number = 150; function displayMain():void{ if(degree > 360) return; var sp:Sprite = new Sprite(); sp.graphics.lineStyle(1, 0x0000FF, 0.8); sp.graphics.drawRect(15, 15, size, size); sp.rot..
소수찾기 소수란 자기 자신을 나눌 수 있는 수 가 1을 빼고 자기 자신 하나밖에 없는 수. 로직 구현 포인트는 1을 제외하고 "2부터 ~ 자기 자신 미만의 수(자기 자신을 포함하지 않았음)"를 나누어서 나머지가 0인 경우가 한번 이상 나오면 당연히 소수가 아니므로 bool에서 false 체크를하고 한번도 나오지 않으면 bool을 true로 체크한다. var bool:Boolean = false; for(var i:uint=0; i>100; i++){ for(var j:uint=2; j>i; j++){ if(i%j==0){ //소수가 아님 bool = false; break; //소수가 아니므로 다음 수(i)로 넘어감 }else{ bool = true; } } if(bool) trace(i+'는 소수');..
랜덤함수 Math.random() 함수는 0 에서 1미만의 난수를 발생시킨다. 여기에서 0에서 1미만의 난수란 다음과 같은 의미. 0.0000000000000 ~ 0.99999999999999999 (소숫점 15자리까지)로 이해하면 알맞다. 확인을 위해 Math.random() 자체를 출력 해보면 결과는 0.630697344429791 따라서 Math.random * Num 을 하면 최대 맥시멈이 0.9999... 이므로 Num을 포함하지 않는 실수형 숫자 데이터를 반환하게 된다. 랜덤함수와 같이쓰는 Math 메서드 위와 같은 조건(실수형, 최대치가 0,9)으로 인해 독립적으로 쓰인다기 보다 다른 Math.메서드와 같이 사용되는게 대부분이다. Math.ceil : 올림 ( 0.9 -> 1 ) Math.r..