طراحی خطوط با موس در اکشن اسکریپت ۳ ۲۸
در این مطلب به یک برنامه ساده در فلش می پردازیم که به راحتی با موس بتوانید خطوط مورد نظرتان را طراحی نمایید ، این مطلب به انجام این کار با استفاده از فلش و اکشن اسکریپت ۳ می پردازیم.
دانلود سورس : 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





















سلام آقا بهتون میل زدم اما جواب ندادین در مورد یک سفارش اگه تمایل دارین میشه ادد یا میل بزنید تا توضیح بدم
لطفا ایمیل را مجدد ارسال نمایید ، شاید اسپم شده باشد
سلام خسته نباشید
یه سوال فوری ازتون داشتم
با اکشن اسکریپت ۲ چظور میشه مثلا روی چند دکمه فوکوس کرد ولی اون مربع زرد رنگ روی دکمه ها نیاد؟
سلام
و اکشن ۳
موفق و پیروز باشید
بازم سلام دستت درد نکنه
ببخشید حالا اگر بخواهیم ببینیم فوکوس روی چه دکمه ای هست چیکار باید کرد؟
آقا بهروز میل زدم اما بازم جوابی نیومد D:
جواب داده ام چک نمایید
سلام مرد شریف
خیلی ممنونم از تمامیه مطالب آموزشی شما و همینطور از حوصلتون که به همه پیامها به خوبی جواب میدید
سلام
انجام وظیفه است دوست گرامی
موفق و پیروز باشید
سلام داداش خسته نباشی
باید بگم کارت درسته و سایتتم دل چسبه
یه سئوال چه کاری انجام میدین وقتی رو فلش شما راست کلیک می شه منوی سفارشی براتون باز می شه درست مثله هدر سایت شما؟
اگه راهنماییم کنید ممنوننتون میشم
سلام
شما لطف دارید این عبارت را در جستجو کنید
contextMenu in flash
موفق و پیروز باشید
سلام رفیق
با اکشن ۳ چه جوری میشه قسمتی از یک عکس که با دستور FileReference وارد فلش کردیم را برش داده یا جدا کرده و در جای دیگر استفاده کنیم؟
سلام
بعد از وارد کردن عکس آن را به BitmapData تبدیل کنید سپس امکان انجام این کار و ایجاد افکتهایی دیگری نیز در اختیار شما خواهد بود
برای اطلاعات بیشتر در وب یا مطالب همین وبلاگ جستجو نمایید
سلام داش بهروز
امیدوارم حالت خوب باشه یه سوال کوچیک داشتم اگر امکان داره جواب بدی ، دمت گرم.
چطور میشه از فلش ۸ یا ۹ خروجی جیف بگیرم.
سلام
خود فلش این امکان را دارد
از منوی فایل گزینه Export می توانید این کار را انجام دهید ، البته حجم خروجی خیلی زیاد خواهد بود به همین دلیل بهتر هست از نرم افزار های کاربردی که برای این کار ساخته شده اند استفاده کنید مثل
swf to gif
اگر همین عبارت را در گوگل جستجو کنید نرم افزارهای مختلفی را خواهید یافت
موفق و پیروز باشید
دمت گرم پادشاه
خیلی ممنون واسه آموزش خوبتون
یک سوال فنی داشتم .. چه طوری میشه با اکشن اسکریپت ۲ نقاشی که میکشی رو به صورت jpg ذخیره کنیم؟
بازهم ممنون
سلام
می تونید این نمونه ها که شامل سورس هم می شوند را مشاهده کتید
http://www.flash-db.com/Tutorials/snapshot/
http://www.sephiroth.it/tutorials/flashPHP/print_screen/
موفق و پیروز باشید
خیلی ممنون واسه آموزش خوبتون
یک سوال فنی داشتم .. چه طوری میشه با اکشن اسکریپت ۲ نقاشی که میکشی رو به صورت jpg ذخیره کنیم؟
اگر امکان داره پاسخ روبه ایمیلم هم ارسال کنید
بازهم ممنون
سلام
این امکان در اکشن اسکریتپ ۲ تنها با واسته که مثلا می تواند کد برنامه نویسی پی اچ پی سمت سرور باشد امکان پذیر هست ولی در اکشن اسکریتپ ۳ توسط خود فلش امکان پذیر هست
موفق و پیروز باشید
ممنون از پاسختون
من این سایت رو پیدا کردم اما به نظر نمی آد با اکشن اسکریپت ۲ کار کنه
اگه امکان داره کد مربوط به اکشن اسکریپت ۲ رو برام بفرستید
http://www.actionscript.org/forums/showthread.php3?t=184972
سلام این دو موردی که گفتم هر دو با اکشن ۲ و فلش پلیر ۸ هستند
http://www.flash-db.com/Tutorials/snapshot/
http://www.sephiroth.it/tutorials/flashPHP/print_screen/
موفق و پیروز باشید
بهترین موردی که پیدا کردم این سایته دقیقا همون چیزی هست که دنبالشم
اما کدهای اصلی که کار می کنه مربوط به اکشن اسکریپت ۳ هست که فایل اکشن اسکریپت ۲ رو تبدیل به png می کنه
اگه بشه همین فیلم رو تو اکشن اسکریپت ۲ پیاده کرد خیلی خوب میشه
http://blog.crondesign.com/2009/10/save-large-image-jpg-png-from-as2.html
سلام
این مورد توسط اکشن اسکریپت ۳ هست ، و طبیعتا همه امکانات اکشن ۳ در اکشن ۲ پشتیبانی نمی شود
موفق و پیروز باشید
سلام پادشاه
به نظرت می شه همین کار رو بجای لاین با fill انجام داد
یعنی به جای خط کشیدن صفحه رو رنگ کنه و بشه بعدا بخشهایی از اون رو به دلخواه پاک کرد؟
سلام
برای رنگ کردن می توانید کدی بنویسید که یک مربع به اندازه تمام صفحه طراحی کند و رنگ مورد نظرتان را به عنوان Fill وارد نمایید
برای کد ها اگر با کمک گوگل موفق و نشدید ، بنده در خدمت هستم
موفق و پیروز باشید
با سلام
چطوری میتونم با اکشن اسکریپت ۲ چندین عکس یا متن را به صورت رندوم نمایش بدم و میخوام به صورت فایل خارجی باشه یعنی عکسها یا متن ها در یه جای دیگه ذخیره شده باشه یا آپلود شده باشه. میشه لطف کنید اگه جواب دادید به ایمیلم ارسال کنید.
سلام
مثلا عکس ها را به صورت عددی نام گزاری کنید ، مثلا ۱.jpg و….
حال به این صورت به صورت رندوم به آدرس یکی از آنها برای بارگزاری برسید
در ضمن برای دریافت جواب توسط ایمیل تیک زیر نظر را بزنید
موفق و پیروز باشید