انجمن‌های فارس وب

نسخه کامل: شناسايي كليدها (شي Key)
شما در حال بازدید از بایگانی ارسال های انجمن هستید این نسخه کامل نیست : برای مشاهده نسخه کامل اینجا کلیک کنید
سلام

اميدوارم خوب باشيد

حتما تا بحال بازي هاي ساده ولي زيباي فلش را ديده ايد كه با كمك دكمه هاي كيبورد كا رمي كنند ؛‌ در اين آموزش مروري بر اين ويژگي اشيا در Flash داريم؛
اميدوارم برايتان مفيد باشد.


براي شروع يك فيلم جديد بسازيد كه در آن تنها يك Movie Clip وجود داشته باشد،
سپس كد زير را براي Movie clip تان بنويسيد.

onClipEvent(enterFrame)
{
    if (Key.isDown(Key.LEFT))this._x -=5;
    if (Key.isDown(Key.RIGHT ))this._x +=5;
    if (Key.isDown(Key.UP ))this._y -=5;
    if (Key.isDown(Key.DOWN ))this._y +=5;
    }



حال اگر فيلمتان را اجرا كنيد مي بينيد كه مي توانيد ب كمك كليد هاي پيكان دار آن را به اطراف حركت دهيد.

حال اين كد را كمي دقيق تر مي كنيم :
كد زير را به جاي كد بالا جايگزين كنيد :

onClipEvent (load) {
    x = this._x;
    y = this._y;
    speed = 5;
}
onClipEvent (enterFrame) {
    if (Key.isDown(Key.LEFT)) {
        x -= speed;
    }
    if (Key.isDown(Key.RIGHT)) {
        x += speed;
    }
    if (Key.isDown(Key.UP)) {
        y -= speed;
    }
    if (Key.isDown(Key.DOWN)) {
        y += speed;
    }
    this._x = x;
    this._y = y;
}


حال تفاوت اين كد با كد قبل چيست؟
اين كد 2 مزيت نسبت به كد قبلي دارد :
اولا چون به جاي مكان واقعي با xو y (متغييرها)‌ را تنظيم مي كنيم، مي توانيم قبل از حرت دادن محل آن را تست كنيم. اين كيفيت بسيار به درد بازي ها مي خور. (به عنوان مثال شما ماشيني داريد كه تنها بايد درجاده حركت كند با كد اول شما نمي توانيد آن را محدود نماييد يا در صورت خروج از جاده از امتيازش كم كنيد ولي با اين كد به راحتي مي توانيد اين كار را انجام دهيد.)
در ضمن ما در اين كد به جاي استفاده از عدد مستقيم (5) از متغيير Speed استفاده كرده ايم و به راحتي قابل تغيير است (به عنوان مثال مي توانيد در مراحل بالاتر مقدار speed را از 5 به 10 تغيير دهيد تا بازي سرعت بگيرد.)

اما يك بخش مهم تر از آموزش بالا : هوم
حتما توجه كرده ايد كه از شي Key در بالا استفاده كرده ايم ، خوب براي بالا بردن تواناييتان بهتر است كمي در مورد اين شي بدانيم :

چه موقع از اين شي استفاده مي كنيم :
خوب شايد بپرسيد كه وقتي ما مي توانيم خود دكمه ها را با كدي مثل كد زير

on (keyPress "<Up>") {
    trace("Up Pressed");
}


مي توانيم كليد هاي فشرده شده ي كيبورد را تشخيص دهيم پس چرابايد از اين شي بهره بگيريم؟؟

خوب اين سئوال زماني مطرح مي شود كه ما به اين نكته توجه نداشته باشيم كه كدهاي keyPress تنها در صورتي كه يكبار كليد فشرده شوند كارايي دارند،‌ ولي ما در بازي ها يا خيلي موارد ديگر كليد را فشرده و پايين نگه مي داريم ،‌كه كد keyPress يكبار و در اولين لحظه فقط كار مي كند نه براي تمام مدت نگه داشتن كليد.
براي اين عملكرد نياز به شي key است ،‌شي key مجموعه اي از توابع و مقادير ثابت ساخته شده است كه در فلش براي اينكه تعيين كنيم كه كليدي پايين نگه داشته شده است يا نه از اين شي استفاده مي كنيم.
(مانند كد بالا ) تابع Key.isDown بسته به اينكه آيا كليد پايين نگه داشته شده است يا نه مقدار true يا false مي دهد.
شي Key دكمه هاي ثابت يرا مي شناسد مثل BACKSPACE , ENTER , TAB , …. كه مي توانيد با كمك خود فلش ليست آن ها را مشاهده نماييد.

ديگر كليدها :
خوب اين كليدهاي مشخص ولي كليدي مثل a چي ؟؟ اگر ما بخواهيم از آن ها استفاده كنيم چه ؟؟؟

خوب براي پيدا كردن آن كليد ها باز هم بايد از توابع Key استفاده كنيم .
كد زير دكمه ي a را بررسي مي كند :

if (Key.isDown(Key.getCode("a")))
    trace ("The a Key is down")


اگر دقت شما زياد باشد يا سرعت كامپيوترتان پايين حتما مشكل شيKey را فهميده ايد !!!! شیطون

خوب مشكل اين شي اين است كه اولين ضربه را شناسايي نمي كند ،‌بلكه فقط به طور پشت سر هم چكمي كند كليد پايين است يا نه. فرض كنيد با يك سيستم كند وقتي شخصي به سرعت كليد a را مي زند onClipEvent (enterFrame) چك مي كند كه كليد پايين است يا نه ،‌خوب پايين نيست. بعد كاربر به سرعت كليد را زده قبل از اينكه onClipEvent (enterFrame) مجددا اجرا شود كليد را رها كرده پس اصلا متوجه نمي شود كه كليد فشرده شده است.
يا يه مشكل ديگر اين است كه اگر كاربر چندين بار به سرعت و پشت سر هم كليد را بزند نتواند تشخيص دهد يك بار است كه پايين نگه داشته شده است يا چند بار است (فرض كنيد با كليد Space تير شليك مي شود با هر بار فشردن يك تير،‌ پس اگر تشخيص ندهد يكبار فشرده شده و نگه داشته شده يا چندين بار فشرده شده كاربر به مشكل بر مي خورد و ممكن است از خير بازي ما بگذرد.نه)

فلش براي رفع اين مشكل از listener استفاده مي كند.
Listener دو قسمت دارد : يكي زماني ايجاد آن است كه به فيلم مي گوييد مي خواهد رويدادي را شنود كند كه كد زير را استفاده مي كند :

Key.addListener(_root);


فرمان بالا شي را مانند root به عنوان پارامتر اختيار مي كند اين شي وقتي رويداد اتفاق بيفتد پيغام را دريافت مي كند.

حال توابع تشخيص : listener دو نوع تابع دارد يكي onKeyUp و ديگري onKeyDown كه به صورت زير آن را استفاده مي كنيم :‌

_root.onKeyUp = function() {
trace (Key.getAscii());
}


اينم از مشكلاتش آره

فقط يه نكته ديگه ممكن است در كدهاي قديمي ببينيد كه براي Movie Clip از كد هاي KeyUp يا KeyDown استفاده كرده اند. البته اين روش به دليل اينكه Listener آمده است روش منسوخي است . پس بهتر است در فيلم هايتان از آن استفاده نكنيد.


اميدوارم مفيد بوده باشه
منبع : Teach Yourself Flash Action Script انتشارات SAMS
البته با تلخيص خودم

اگه مشكلي بود در خدمتتم
موفق باشيد.

ممنون .

همونطور كه مي دونيد اين انجمن بر پايه ي وب و پيشرفت فارسي زبانان بنا شده و همه ي مباحث و مباحث مي بايستي مستقيم و چه غير مستقيم به اين تخصص مرتبط باشه ؛ حالا براي اين آموزش مي تونيد يك مثالي در مورد وب بزنيد ؟

با تشكر .
سلام

اول از همه مگه اشكالي داره آموزش هاي غير وبي كه مفيد هستش در انجمن قرار بگيره فكر كنم بهتره به جاي يك وجهي كردن ديدمون به برنامه ها از امكانات آن ها با توجه به نيازمون بهره ببريم.

دوم : سرگرمي بخشي از وب سايت هاست كه جدا نشدني است. و مطمئننا نمي شه تاثير اونو در تعداد بازديدكننده ناديده گرفت و بازي هاي فلش همواره طرفداران خودشون رو در محيط هاي مجازي دارن.

سوم : براي استفاده از Shourt key ها د روب سايتتان (به عنوان مثال : با زدن دكمه ي F از انگليسي به فارسي سوييچ كنيد.)

چهارم :‌Page Up و Page Down در سايت هاي Full Flash كه متن در داخل برنامه فلش است و IE فاقد Scroll است. و Scrooll در خود فايل swf است.

پنجم : زماني كه بخواهيم Focus فيلدهاي اطلاعاتي را با زدن tab در برنامه فلش به صورت دستي تنظيم كنيم.

ششم : كار كردن فرم ها با Enter يا ديگر دكمه ها

و . . . .

در ضمن فكر مي كنم كه شما فارسي زبانان را از اين جهت استفاده كرده ايد كه دكمه هاي مثال هاي من انگليسي است ، خوب يك راهكار كه باز هم آموزش آن در بالا اومده كدهاي اسكي است.

اميدوارم توضيحات كامل باشه
موفق باشيد.
هر مقاله اي كه اينجا نوشته مي شه براي فارسي زبانان مفيده ؛ اما مهم موضوع بحث ؛ مقاله يا پرسشه .

در مورد كاربرد اين آموزش هم توضيحاتتون خوب بود .

ممنونم .
مرجع آدرس ها