Source: display/MovableObject.js

/**
 * 속도, 가속도, 마찰력, 질량을 포함한 표시 객체
 * - rotate는 마찰력이 없다
 * @class
 * @deprecated DisplayObject에 기능 추가
 * @extends collie.DisplayObject
 * @param {Object} [htOption] 설정
 * @param {Number} [htOption.velocityX=0] x축 속도(초당 px)
 * @param {Number} [htOption.velocityY=0] y축 속도(초당 px)
 * @param {Number} [htOption.velocityRotate=0] 회전 속도(초당 1도)
 * @param {Number} [htOption.forceX=0] x축 힘(초당 px)
 * @param {Number} [htOption.forceY=0] y축 힘(초당 px)
 * @param {Number} [htOption.forceRotate=0] 회전 힘(초당 1도)
 * @param {Number} [htOption.mass=1] 질량
 * @param {Number} [htOption.friction=0] 마찰력
 * @param {Boolean} [htOption.useRealTime=true] SkippedFrame을 적용해서 싸이클을 현재 시간과 일치
 */
collie.MovableObject = collie.Class(/** @lends collie.MovableObject.prototype */{
    $init : function (htOption) {
        // this.option({
            // velocityX : 0,
            // velocityY : 0,
            // velocityRotate : 0,
            // forceX : 0,
            // forceY : 0,
            // forceRotate : 0,
            // mass : 1, // 질량
            // friction : 0, // 마찰
            // useRealTime : true
        // }, null, true);
    }
    
    /**
     * 화면을 업데이트
     * 
     * @private
     */
    // update : function (nFrameDuration, nX, nY, nLayerWidth, nLayerHeight) {
        // var nFrame = Math.max(17, nFrameDuration) / 1000;
//      
        // // skippedFrame 적용을 하지 않는다면 1frame 씩만 그림
        // if (!this._htOption.useRealTime) {
            // nFrame = 1;
        // }
//      
        // this._applyForce(nFrame);
        // this._applyRotation(nFrame);
        // this.constructor.$super.update.call(this, nFrameDuration, nX, nY, nLayerWidth, nLayerHeight);
//      
        // // 움직임이 있으면 다시 바뀐 상태로 둠
        // if (
                // this._htOption.velocityX !== 0 ||
                // this._htOption.velocityY !== 0 ||
                // this._htOption.velocityRotate !== 0 ||
                // this._htOption.forceX !== 0 ||
                // this._htOption.forceY !== 0 ||
                // this._htOption.forceRotate !== 0
                // ) {
            // this.setChanged(true);
        // }
    // },
    
    /**
     * @private
     */
    // _getValueDirection : function (nValue) {
        // return Math.abs(nValue) / nValue;
    // },
    
    /**
     * 회전 힘, 속도를 반영
     * @private
     */
    // _applyRotation : function (nFrame) {
        // if (this._htOption.forceRotate !== 0) {
            // this.set("velocityRotate", this._htOption.velocityRotate + this._htOption.forceRotate);
        // }
//      
        // if (this._htOption.velocityRotate !== 0) {
            // var nAngleRad = collie.util.fixAngle(collie.util.toRad(this._htOption.angle + this._htOption.velocityRotate * nFrame));
            // this.set("angle", Math.round(collie.util.toDeg(nAngleRad) * 1000) / 1000);
        // }
    // },
    
    /**
     * 힘을 속도에 반영
     *  
     * @private
     */
    // _applyForce : function (nFrame) {
        // var htInfo = this.get();
        // var nVelocityX = htInfo.velocityX;
        // var nVelocityY = htInfo.velocityY;
        // var nX = htInfo.x;
        // var nY = htInfo.y;
//      
        // // 힘 적용 a = F / m
        // nVelocityX += (htInfo.forceX / htInfo.mass) * nFrame;
        // nVelocityY += (htInfo.forceY / htInfo.mass) * nFrame;
//      
        // // 마찰력 적용
        // var nForceFrictionX = htInfo.friction * nVelocityX * htInfo.mass * nFrame;
        // var nForceFrictionY = htInfo.friction * nVelocityY * htInfo.mass * nFrame;
//      
        // if (nVelocityX !== 0) {
            // nVelocityX = (this._getValueDirection(nVelocityX) !== this._getValueDirection(nVelocityX - nForceFrictionX)) ? 0 : nVelocityX - nForceFrictionX;
        // }
//      
        // if (nVelocityY !== 0) {
            // nVelocityY = (this._getValueDirection(nVelocityY) !== this._getValueDirection(nVelocityY - nForceFrictionY)) ? 0 : nVelocityY - nForceFrictionY;
        // }
//      
        // nX += nVelocityX * nFrame;
        // nY += nVelocityY * nFrame;
        // nVelocityX = Math.floor(nVelocityX * 1000) / 1000;
        // nVelocityY = Math.floor(nVelocityY * 1000) / 1000;
//      
        // if (htInfo.friction && Math.abs(nVelocityX) < 0.05) {
            // nVelocityX = 0;
        // }
//      
        // if (htInfo.friction && Math.abs(nVelocityY) < 0.05) {
            // nVelocityY = 0;
        // }
//  
        // // 변경이 있을 때만 설정
        // if (
            // nX != htInfo.x ||
            // nY != htInfo.y ||
            // nVelocityX != htInfo.velocityX ||
            // nVelocityY != htInfo.velocityY
        // ) {
            // this.set({
                // x : nX,
                // y : nY,
                // velocityX : nVelocityX,
                // velocityY : nVelocityY
            // });
        // }
    // },
    
    /**
     * 문자열로 클래스 정보 반환
     * 
     * @deprecated
     * @return {String}
     */
    // toString : function () {
        // return "MovableObject" + (this._htOption.name ? " " + this._htOption.name : "")+ " #" + this.getId() + (this.getImage() ? "(image:" + this.getImage().src + ")" : "");
    // }
}, collie.DisplayObject);
comments powered by Disqus