actionscript 3 - एक्शन स्क्रिप्ट 3, लंबे समय तक कूदने के लिए चरित्र कैसे प्राप्त करें



actionscript-3 flash (1)

मैं फ्लैश (एएस 3) में एक प्लेटफार्म गेम बना रहा हूं और मेरे द्वारा नीचे दिए गए कोड काम करता है मैं चाहता हूं कि मेरे चरित्र को ऊंचे कूदने के लिए पर्याप्त समय लगे ताकि वह एक मंच तक पहुंच सकें। नीचे दिए गए कोड के साथ एकमात्र समस्या यह है जिस पर यह कूदता है और नीचे और कूद की ऊंचाई। Tthe अंतरिक्ष बार है जो चलने के लिए फ़ंक्शन चालू करता है

कृपया मुझे इसकी सराहना करते हुए सहायता करें! :)

Player.addEventListener(Event.ENTER_FRAME, fl_MoveInDirectionOfKey);
stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_SetKeyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, fl_UnsetKeyPressed);

function fl_MoveInDirectionOfKey(event:Event)
{
    if (spacePressed){
        var gravity:Number = 9.8;
        var jumping:Boolean = false;
        var jumpVar:Number = 0;

        if(jumping != true)
        {
            jumpVar = -70;
            jumping = true;
        }

        if(jumping)
        {
            spacePressed = false;
            Player.y += jumpVar;
            jumpVar += gravity;
        }
        Player.addEventListener(Event.ENTER_FRAME, drop);
        function drop(event:Event)
        {
            Player.y -= jumpVar;
            jumpVar -= gravity;
            if(Player.y > 350){
                Player.y = 350;
            }
        }
        Player.removeEventListener(Event.ENTER_FRAME, fl_MoveInDirectionOfKey);
        Player.addEventListener(Event.ENTER_FRAME, fl_MoveInDirectionOfKey);

        /*var frameNumb:Number = 0;

        Player.addEventListener(Event.ENTER_FRAME, jumpup);
        spacePressed = false;
        function jumpup(event:Event)
        {
            while(frameNumb < 30){
                spacePressed = false;
                Player.y -= 1;
                frameNumb += 0.5;
            }
            Player.removeEventListener(Event.ENTER_FRAME, jumpup);
            Player.addEventListener(Event.ENTER_FRAME, jumpdown);
            function jumpdown(){
                while(frameNumb > 0){
                    spacePressed = false;
                    Player.y += 1;
                    frameNumb -= 0.5;
                }
            }
        }*/
    }
    if (leftPressed)
    {
        Player.x -= speed;
        Player.gotoAndStop("left");
    }
    if (rightPressed)
    {
        Player.x += speed;
        Player.gotoAndStop("right");
    }
}

धन्यवाद


गुरुत्वाकर्षण के लिए 9.8 का आपका उपयोग मीटर-प्रति-सेकंड-प्रति-सेकंड है चूंकि ड्रॉप () को हर फ्रेम में निष्पादित किया जाता है, आप कुछ गंभीर फास्ट-फॉरवर्ड ग्रेविटी प्राप्त करने जा रहे हैं, जब तक कि कार्यक्रम केवल 1 एफपीएस कर रहा हो। इसलिए, मान लें कि आपको 1 एफपीएस की तुलना में अधिक तरलता चाहिए, ऐसा करने पर विचार करें

    jumpVar += gravity/fps;


हालांकि, आपको ऊंचाई पर चढ़ने के लिए सटीक गति प्राप्त करने के लिए, मुझे लगता है कि गणना है ...

    initialVelocityInMetersPerSecond = Math.sqrt( 2 * gravity * metersToJump )

तो jumpVar = -70 की बजाय, आप ऐसा कुछ करेंगे ...

    // get posititive distance since we'll use to get a square root
    var metersToJump:Number = Player.y - platform.y;
    jumpVar = -Math.sqrt( 2 * gravity * metersToJump );

... और फिर ENTER_FRAME हैंडलर में ...

    Player.y += jumpVar / fps;
    jumpVar += gravity / fps;

आपके उदाहरण से यह मामला नहीं है, लेकिन यदि आप प्लेयर के नीचे प्लेटफॉर्म को जगह देते हैं, तो यह काम नहीं करेगा क्योंकि आप एक नकारात्मक संख्या की जड़ नहीं पा सकते हैं!

मेरे उदाहरण कोड में मैं मंच की ऊंचाई तय नहीं कर रहा हूं, इसलिए आप लक्ष्य प्लेटफॉर्म पर कैसे तय करते हैं, यह पूरी तरह अलग मामला है।