플래시 액션스크립트로 물리공간에서 공 튀기기.
공을 마우스로 잡아 던지는게 가능.

13/05/25 토


var g:Number = 0.1; //중력
var vx:Number = 3; //수평속도
var vy:Number = 0; //수직속도
var tx:Number = 0; //temp x 임시 마우스 좌표 저장용
var ty:Number = 0; //temp y
var ball:Ball = new Ball();

function init():void {
    ball.x = 10;
    ball.y = 75;
    addChild(ball);
    addEventListener(Event.ENTER_FRAME,onLoop);
    ball.addEventListener(MouseEvent.MOUSE_DOWN,drag);
    ball.addEventListener(MouseEvent.MOUSE_UP,drop);
}

function onLoop(evt:Event):void{
    vy += g
    ball.x += vx;
    ball.y += vy;
     if (ball.y > 350){ //바닥에 부딪칠 경우
        ball.y = 350;
        vy *= -0.8; //수직속도 방향 반대로 바꾸고 줄이기
        //수평속도 줄이기
        if(vx>0){vx -=0.1;}else if(vx<0){vx += 0.1;}
    }else if(ball.y < 0){ //천정
        ball.y = 0;
        vy *= -0.8;
        if(vx>0){vx -=0.1;}else if(vx<0){vx += 0.1;}
    }
    if(ball.x < 0){ //왼쪽 벽
        ball.x = 0;
        vx *= -1; //수평속도 반대로
        vx -= 0.3; //수평속도 줄이기
    }else if(ball.x > 550){ //오른쪽 벽
        ball.x = 550;
        vx *= -1;
        vx += 0.3;
    }
    //속도가 일정 이하일 경우 멈추기
    if(Math.abs(vx) < 0.01){vx=0;}
    if(Math.abs(vy) < 0.05){vy=0;}
}

function drag(e:MouseEvent):void{
    removeEventListener(Event.ENTER_FRAME,onLoop);
    tx = mouseX; //마우스 좌표 임시 저장
    ty = mouseY;
    ball.startDrag();
}
function drop(e:MouseEvent):void{
    vx = int((mouseX-tx)/10); //속도 재설정
    vy = int((mouseY-ty)/10);
    addEventListener(Event.ENTER_FRAME,onLoop);
    ball.stopDrag();
}

init();