نوشته شده

طراحی خطوط با موس در اکشن اسکریپت ۳ ۲۸

در این مطلب به یک برنامه ساده در فلش می پردازیم که به راحتی با موس بتوانید خطوط مورد نظرتان را طراحی نمایید ، این مطلب به انجام این کار با استفاده از فلش و اکشن اسکریپت ۳ می پردازیم.

دانلود سورس : draw_line_with_mouse_iflashlord.zip

در ابتدا کلاس های مورد نیاز را وارد می کنیم (البته توجه داشته باشید این کار به صورت خودکار توسط نسخه های جدید فلش انجام می شود و دلیل ذکر این موارد برای اشاره به کلاس های مورد استفاده در مطلب آموزشی می باشد)

import flash.display.Sprite;
import flash.display.Stage;
import flash.events.MouseEvent;
import flash.display.Graphics;

در مرحله بعد یک Sprite ایجاد می کنیم ، این DisplayObject مخزنی برای ذخیره محتوا طراحی شده توسط موس می باشد.

var _sprite:Sprite= new Sprite();

حال این Sprite را addChild می کنیم و در ابتدا محیطی که می خواهیم در آن طراحی انجام شود را ایجاد می کنیم برای این کار از drawRect برای طراحی یک مستطیل استفاده می کنیم.

_sprite.graphics.beginFill(0xF0F0F0);
_sprite.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
_sprite.graphics.endFill();

برای این که این بخش مشخص باشد ما رنگ F0F0F0 را قرار دادیم شما می توانید هر کد رنگی که مورد نظرتان باشد را وارد نمایید. و در این مثال برای به دست آوردن طول و عرض صفحه استیج از stage.stageHeight و  stage.stageWidth استفاده شده است و برای مختصات شروع ایجاد طرح از ۰ و ۰ که مختصات x و y نقطه شروع می باشد استفاده شده است.
در ضمن endFill برای پایان دادن به یک مقدار دهی مثلا رنگ به شی مستطیل تعریف شده ما می باشد.

حال می بایست رویدادهای مربوطه به فشردن کلیک چپ موس (MOUSE_DOWN) و رها کردن آن را (MOUSE_UP) تعریف می کنیم و به Sprite تعریف شده اعمال می کنیم.

_sprite.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown);
_sprite.addEventListener(MouseEvent.MOUSE_UP, MouseUp);

حال تابع مربوطه به فشرده شدن موس را تعریف می کنیم در این تابع ما توسط متد lineStyle از graphics مربوطه به شی نمایشی Sprite ابتدا قالب بندی خط را تعیین می کنیم ، و توسط متد moveTo مختصات اولیه را مختصات کنونی موس قرار می دهیم .
حال زمان آن رسیده که رویدادی جدید تعریف کنیم تا در زمان حرکت موس تابع MouseMove را فراخوانی کند ، این تابع وظیفه کشیدن خط را بر عهده دارد.

function MouseDown(e:MouseEvent):void
{
_sprite.graphics.lineStyle(1, 0, 1);
_sprite.graphics.moveTo(mouseX, mouseY);
_sprite.addEventListener(MouseEvent.MOUSE_MOVE, MouseMove);
}

تابع MouseMove با استفاده از متد lineTo در هر زمان که موس حرکت کند خطی به نقطه مختصات کنونی موس طراحی می کند. آرگمان اول lineTo مربوطه به مختصات x و آرگمان دوم مربوطه به مختصات y می باشد که در این مثال برای مقدار x از mouseX و y از mouseY که مقدارهای مربوطه به مختصات کنونی موس می باشند استفاده شده است .

function MouseMove(e:MouseEvent):void
{
_sprite.graphics.lineTo(mouseX, mouseY);
}

حال می بایست توسط رویدادی که برای رها کردن کلیک تعیین کردیم در زمان رها کردن کلیک رویداد مربوطه به طراحی در حال حرکت موس و در واقع فراخوانی MouseMove را حذف کنیم.

function MouseUp(e:MouseEvent):void
{
_sprite.removeEventListener(MouseEvent.MOUSE_MOVE, MouseMove);
}

سورس کد کامل برنامه به صورت یکجا :

import flash.display.Sprite;
import flash.display.Stage;
import flash.events.MouseEvent;
import flash.display.Graphics;

var _sprite:Sprite= new Sprite();
addChild(_sprite);
_sprite.graphics.beginFill(0xF0F0F0);
_sprite.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
_sprite.graphics.endFill();

_sprite.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown);
_sprite.addEventListener(MouseEvent.MOUSE_UP, MouseUp);

function MouseDown(e:MouseEvent):void
{
        _sprite.graphics.lineStyle(1, 0, 1);
        _sprite.graphics.moveTo(mouseX, mouseY);
        _sprite.addEventListener(MouseEvent.MOUSE_MOVE, MouseMove);
}

function MouseUp(e:MouseEvent):void
{
        _sprite.removeEventListener(MouseEvent.MOUSE_MOVE, MouseMove);
}
function MouseMove(e:MouseEvent):void
{
        _sprite.graphics.lineTo(mouseX, mouseY);
}

و بهتر است کمی کدمان را (از نظر رویدادها) بهینه تر نیز کنیم :

import flash.display.Sprite;
import flash.display.Stage;
import flash.events.MouseEvent;
import flash.display.Graphics;

var _sprite:Sprite= new Sprite();
addChild(_sprite);
_sprite.graphics.beginFill(0xF0F0F0);
_sprite.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
_sprite.graphics.endFill();

_sprite.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown , false , 0 , true);
_sprite.addEventListener(MouseEvent.MOUSE_UP, MouseUp , false , 0 , true);

function MouseDown(e:MouseEvent):void
{
        _sprite.graphics.lineStyle(1, 0, 1);
        _sprite.graphics.moveTo(mouseX, mouseY);
        _sprite.addEventListener(MouseEvent.MOUSE_MOVE, MouseMove , false , 0 , true);
}

function MouseUp(e:MouseEvent):void
{
        _sprite.removeEventListener(MouseEvent.MOUSE_MOVE, MouseMove);
}
function MouseMove(e:MouseEvent):void
{
        _sprite.graphics.lineTo(mouseX, mouseY);
}

حال می تونیم برنامه رو تست کنیم ، با فشردن کلیک چپ و حرکت موس می توانید خطوط مورد نظر خودتان را طراحی کنید.

دانلود سورس : draw_line_with_mouse_iflashlord.zip

Print Friendly

مطالب مرتبط

پخش صدا در اکشن اسکریپت ۳ – بخش دوم
در ادامه  بخش اول مبحث پخش صدا در اکشن اسکریپت...
آپلود فایل به کمک Air و PHP بر روی Server
در این مطلب نحوه برقراری ارتباط بین Air و PHP به...
ادوبی فلش نسخه خلاقانه CS6 و امکانات جدید!
امکان ایجاد Sprite Sheet به صورت حرفه ای در داخل برنامه...
Adobe Flash CS5 Feature
خروجی پک های IPhone - در این نسخه شما امکان دارید...

آدرس ایمیل شما :


اشتراک فید نظرات

تا به حال ۲۸ نظر به این مطلب داده شده است

  1. amir می‌گه:

    سلام آقا بهتون میل زدم اما جواب ندادین در مورد یک سفارش اگه تمایل دارین میشه ادد یا میل بزنید تا توضیح بدم

  2. عباس می‌گه:

    سلام خسته نباشید
    یه سوال فوری ازتون داشتم
    با اکشن اسکریپت ۲ چظور میشه مثلا روی چند دکمه فوکوس کرد ولی اون مربع زرد رنگ روی دکمه ها نیاد؟

  3. عباس می‌گه:

    بازم سلام دستت درد نکنه
    ببخشید حالا اگر بخواهیم ببینیم فوکوس روی چه دکمه ای هست چیکار باید کرد؟

  4. amir می‌گه:

    آقا بهروز میل زدم اما بازم جوابی نیومد D:

  5. ندرلو می‌گه:

    سلام مرد شریف
    خیلی ممنونم از تمامیه مطالب آموزشی شما و همینطور از حوصلتون که به همه پیامها به خوبی جواب میدید

  6. Hadi می‌گه:

    سلام داداش خسته نباشی
    باید بگم کارت درسته و سایتتم دل چسبه
    یه سئوال چه کاری انجام میدین وقتی رو فلش شما راست کلیک می شه منوی سفارشی براتون باز می شه درست مثله هدر سایت شما؟
    اگه راهنماییم کنید ممنوننتون میشم

  7. عباس می‌گه:

    سلام رفیق
    با اکشن ۳ چه جوری میشه قسمتی از یک عکس که با دستور FileReference وارد فلش کردیم را برش داده یا جدا کرده و در جای دیگر استفاده کنیم؟

    • سلام
      بعد از وارد کردن عکس آن را به BitmapData تبدیل کنید سپس امکان انجام این کار و ایجاد افکتهایی دیگری نیز در اختیار شما خواهد بود
      برای اطلاعات بیشتر در وب یا مطالب همین وبلاگ جستجو نمایید

  8. نیما می‌گه:

    سلام داش بهروز
    امیدوارم حالت خوب باشه یه سوال کوچیک داشتم اگر امکان داره جواب بدی ، دمت گرم.
    چطور میشه از فلش ۸ یا ۹ خروجی جیف بگیرم.

    • سلام
      خود فلش این امکان را دارد
      از منوی فایل گزینه Export می توانید این کار را انجام دهید ، البته حجم خروجی خیلی زیاد خواهد بود به همین دلیل بهتر هست از نرم افزار های کاربردی که برای این کار ساخته شده اند استفاده کنید مثل
      swf to gif
      اگر همین عبارت را در گوگل جستجو کنید نرم افزارهای مختلفی را خواهید یافت
      موفق و پیروز باشید

  9. danial می‌گه:

    خیلی ممنون واسه آموزش خوبتون
    یک سوال فنی داشتم .. چه طوری میشه با اکشن اسکریپت ۲ نقاشی که میکشی رو به صورت jpg ذخیره کنیم؟
    بازهم ممنون

  10. danial می‌گه:

    خیلی ممنون واسه آموزش خوبتون
    یک سوال فنی داشتم .. چه طوری میشه با اکشن اسکریپت ۲ نقاشی که میکشی رو به صورت jpg ذخیره کنیم؟
    اگر امکان داره پاسخ روبه ایمیلم هم ارسال کنید
    بازهم ممنون

  11. حامد می‌گه:

    سلام پادشاه
    به نظرت می شه همین کار رو بجای لاین با fill انجام داد
    یعنی به جای خط کشیدن صفحه رو رنگ کنه و بشه بعدا بخشهایی از اون رو به دلخواه پاک کرد؟

    • سلام
      برای رنگ کردن می توانید کدی بنویسید که یک مربع به اندازه تمام صفحه طراحی کند و رنگ مورد نظرتان را به عنوان Fill وارد نمایید
      برای کد ها اگر با کمک گوگل موفق و نشدید ، بنده در خدمت هستم
      موفق و پیروز باشید

  12. سعید می‌گه:

    با سلام
    چطوری میتونم با اکشن اسکریپت ۲ چندین عکس یا متن را به صورت رندوم نمایش بدم و میخوام به صورت فایل خارجی باشه یعنی عکسها یا متن ها در یه جای دیگه ذخیره شده باشه یا آپلود شده باشه. میشه لطف کنید اگه جواب دادید به ایمیلم ارسال کنید.

    • سلام
      مثلا عکس ها را به صورت عددی نام گزاری کنید ، مثلا ۱.jpg و….
      حال به این صورت به صورت رندوم به آدرس یکی از آنها برای بارگزاری برسید

      var randNum = 4;
      var getRand = Math.round((Math.random()*randNum)+1);
      var fileAddress=getRand + ".jpg";
      trace(fileAddress);
      
      loadMovieNum(fileAddress , 0);
      

      در ضمن برای دریافت جواب توسط ایمیل تیک زیر نظر را بزنید
      موفق و پیروز باشید

شما می توانید نظر خود را در اینجا وارد نمایید

* بخش های ستاره دار الزامی است

کاربر آنلاین