أس 3 عقد الماوس لأسفل لزيادة السرعة / السلطة
-
29-10-2019 - |
سؤال
هذا ما أحاول تحقيقه;
مع النقر على موفيكليب (المدفع) يتم إطلاق رصاصة (الكرة)
الماوس أطول هو أسفل ، وسرعة اللي تبونه أطلقت الكرة مع يجب أن تزيد.سؤالي لك هو;
ما هي الطريقة الأكثر فعالية لتحقيق ذلك?مع جهاز توقيت أو شيء من هذا القبيل;
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;