آموزش حركت با كليدهاي مكان نما

mosi20

Active Member
و هو الرب الرحيم
براي ساخت يه چنين چيزي بايد بدونيد كه شكل كلي دستور ما به صورت زير است
کد:
   if (key.isDown(key.esme kelid)) {
        this._x or y =_x or y - or +   meghdare jabejaii;
    }

اولين كاري كه بايد انجام دهيم طراحي اون جزيي است كه ميخواهيم به وسيله ي كليد هاي up , down, left , right جابه جا شود

بعد از طراحي اون جزو مسير زير را با انجام كليك راست بر روي همون جزو دنبال كنيد
script> event> frame>oninterframe
سپس براي كليد up اسكريپت زير را وارد كنيد
کد:
  if (key.isDown(key.up)) {
        this._y=_y-مقدار جابه جايي مورد نظر ;
    }
توجه كنيد كه ما چون ميخواهيم به سمت بالا يا پايين حركت كنيم در واقع ميزان y را تغيير ميدهيم .
اگر علامت بعد از دومين y به صورت - باشد حركت ما به سمت بالا و اگر به صورت + باشد حركت ما به سمت پايين خواهد بود.
براي كليد Down نيز به همين ترتيب عمل كنيد فقط نام كليد را Down بگذاريد و - را به + تغيير دهيد .
سپس براي كليد left اسكريپت زير را وارد كنيد
کد:
  if (key.isDown(key.left)) {
        this._x=_x-مقدار جابه جايي مورد نظر ;
    }
توجه كنيد كه ما چون ميخواهيم به سمت چپ يا راست حركت كنيم در واقع ميزان x را تغيير ميدهيم .
اگر علامت بعد از دومين x به صورت - باشد حركت ما به سمت چپ و اگر به صورت + باشد حركت ما به سمت راست خواهد بود.
براي كليد right نيز به همين ترتيب عمل كنيد فقط نام كليد را right بگذاريد و - را به + تغيير دهيد .
اينم يه مثال آماده
کد:
onEnterFrame() {
    if (Key.isDown(Key.Up)) {
        this._y = _y-5;
    } else if (Key.isDown(Key.DOWN)) {
        this._y = _y+5;
    } else if (Key.isDown(Key.Left)) {
        this._x = _x-5;
    } else if (Key.isDown(Key.Right)) {
        this._x = _x+5;
    }
}

موفق باشيد و سربلند !!!
 

Masih

Well-Known Member
خسته نباشي محسن خان!
من دوباره اين ارسالت رو بصورت تاپيك جداگانه درآوردم تا عده بيشتري بتونن استفاده كنن.

مسيح.
 

mosi20

Active Member
مسيح جون با تشكر از لطفت اما من مي خواستم اونجا در جواب مصطفي جون اين آموزش را گذاشته باشم اما به هر حال
 

mosi20

Active Member
لطف داري
فقط خدا وكيلي از اين آموزشا استفاده كنين و روش كار كنين چون با يكم تغيير مي تونيد كار هاي قشنگي بسازيد
 

f_mostafa_f

Active Member
بزار اگه درسا بزاره چشم....




راستي مسيح جان شما قرار نبود براي من يه كاري بكني احيانا؟؟؟؟؟؟؟؟؟؟!!!!!!!!!!!!1
 

mosi20

Active Member
خوب گفته بودم اگه روي اين آموزش اگه يكم كار كنيد چيزاي باحال تري ميشه باهاش ساخت مثلا با اضافه كردن كد زير براي فايلي به اندازهي 600در 450 ميتونيد مشخص كنيد كه اگه جزيي كه حركت ميكنه از يه محدوده اي خارج بشه دوباره از كجا به همون محدوده وارد بشه .
کد:
onEnterFrame() {
    if (this._y <-0) {
        this._y = 600;
    }
    if (this._x <0) {
        this._x =700;
    }
    if (this._y> 600) {
        this._y = 0;
    }
    if (this._x> 700) {
        this._x = 0;
    }
}

و با كد زير ميتونيد مشخص كنيد كه اگه اون جزو متحرك از يه نقطه ي خاص با x و y مشخص بگذرد يه جزو ديگه در صفحه به نمايش در بياد . در مثال زير من يه اسپرايت ساختم و به اون در فريم 1 افكت remove و در فريم 3 افكت place را دادم و به Scene اصلي در فريم 2 افكت stop و در فريم 4 نيز افكت stop را دادم تا اسپراتي كه ساختم در حالت كلي به نمايش در نيايد و فقط در هنگام گذر اون جزو متحرك از x در حد فاصله ي 40 و 150 و y در حد فاصله ي 400تا 500 به نمايش در بيايد
کد:
onEnterFrame() {
    if (this._x > 40) {
        if (this._y > 400) {
            if (this._x < 150) {
                if (this._y < 500) {
                    gotoSceneAndPlay("<current scene>",3);
                }
            }
        }
    }
}

تا اينجا حركت هايي كه جزو متحرك ما انجام ميداد با زاويه ي 90 درجه بود اما اگه بخواهيم حركت ما با اين زاويه نباشد بايد چيكار كنيم ؟ ما ميتوانيم با ايجاد تغييراتي در كد اصلي اين حالت را ايجاد كنيم .
به دكمه ي down به جاي كد قبلي كد زير را ميدهيم
کد:
speed += ميزان سرعت مورد  نظر ;
به دكمه ي up به جاي كد قبلي كد زير را ميدهيم
کد:
speed -= ميزان سرعت مورد  نظر ;

به دكمه ي left به جاي كد قبلي كد زير را ميدهيم
کد:
_rotation -= ميزان چرخش مورد  نظر ;
به دكمه ي right به جاي كد قبلي كد زير را ميدهيم
کد:
_rotation += ميزان چرخش مورد  نظر ;
و كد زير را در ادامه ي تمام كد اضافه ميكنيم
کد:
    x = Math.sin(_rotation*(Math.PI/180))*speed;
    y = Math.cos(_rotation*(Math.PI/180))*speed*-1;
    if (!_root.boundary.hitTest(_x+x, _y+y, true)) {
        _x += x;
        _y += y;
    } else {
    }
}
 

جدیدترین ارسال ها

بالا