سؤال

هذا ما أحاول تحقيقه;

مع النقر على موفيكليب (المدفع) يتم إطلاق رصاصة (الكرة)

الماوس أطول هو أسفل ، وسرعة اللي تبونه أطلقت الكرة مع يجب أن تزيد.سؤالي لك هو;

ما هي الطريقة الأكثر فعالية لتحقيق ذلك?مع جهاز توقيت أو شيء من هذا القبيل;

    var isMouseDown:Boolean = false;
    var speed= 10;    

    myCannon.addEventListener(MouseEvent.MOUSE_DOWN,buttonPressed);

        function buttonPressed(event:MouseEvent){
            //trace("down");
            isMouseDown == true;

            if(isMouseDown == false)
            {
                speed == +1
            }

        }
هل كانت مفيدة؟

المحلول

يتم تشغيل حدث الماوس مرة واحدة فقط.للحصول على التأثير الذي تريده ، تحتاج إلى مجموعة من معالجات أحداث الماوس لأسفل والماوس.

يمكنك تعيين متغير إلى صحيح في حدث الماوس إلى جانب الطابع الزمني الحالي من flash.utils.getTimer()

ثم عند تشغيل الماوس ، إذا كان المتغير الذي قمت بتعيينه في الماوس صحيحا ، فأنت تحسب الوقت المنقضي وتضبط الطاقة وفقا لذلك.

مثال:

var isMouseDown:Boolean = false;
var mouseDownBegin:int;
var speed = 10; 
var speed_inc = 2; // give it in per second
var speed_max = 100; // max speed possible

// add event handlers
myCannon.addEventListener(MouseEvent.MOUSE_DOWN, buttonPressed);
myCannon.addEventListener(MouseEvent.MOUSE_UP, buttonReleased);

function buttonPressed(event:MouseEvent){
    isMouseDown = true;
    mouseDownBegin = flash.utils.getTimer();
}

function buttonReleased(event:MouseEvent){
    if(isMouseDown == true){
        // get time between press and release
        var timeElapsed = flash.utils.getTimer() - mouseDownBegin;

        // reset isMouseDown
        isMouseDown = false;

        // compute speed
        speed += int(Math.floor(speed_inc * (timeElapsed / 1000.0)));
        speed = Math.min(speed, speed_max);

        // code to fire ball with new speed
        // .......
    }
}

يمكنك أيضا إضافة حدث إدخال الإطار وتحريك مقياس طاقة أو شيء من هذا القبيل للتأثير المرئي

تحديث
كما أشار ال_سمان, MOUSE_UP لن يتم إطلاق الحدث إذا تم سحب الماوس وإطلاقه خارج المسرح.للتعامل مع هذه الحالة إضافة ومستمع الحدث ل MOUSE_LEAVE حدث مع رد الاتصال كنسخة من وظيفة بوتونريليسد ولكن الذي يأخذ كائن الحدث:

function buttonReleasedOutsideStage(event:Event){
    if(isMouseDown == true){
        // get time between press and release
        var timeElapsed = flash.utils.getTimer() - mouseDownBegin;

        // reset isMouseDown
        isMouseDown = false;

        // compute speed
        speed += int(Math.floor(speed_inc * (timeElapsed / 1000.0)));
        speed = Math.min(speed, speed_max);

        // code to fire ball with new speed
        // .......
    }
}
stage.addEventListener(Event.MOUSE_LEAVE, buttonReleasedOutsideStage);

نصائح أخرى

(في الكود الكاذب القصير جدا)
اكتب بعض معالجات الأحداث:

  • أونموسيدون:مجموعات العلم _mouseDown, ، مجموعة power إلى الصفر
  • أونفريم: if (_mouseDown) power++;
  • أونموسيوب:مسح العلم _mouseDown وحرائق الكرة مع المتراكمة power

فراميراتي نسخة مستقلة:

  • أونموسيدون: _loadStart = getTimer(); _mouseDown = true; _power = 0;
  • أونفريم: if (_mouseDown) delta = getTimer() - _loadStart; _power += delta;
  • أونموسيوب:أطلق النار على الكرة مع _power, _mouseDown = false;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top