خانه » برنامه نویسی » اکشن اسکریپت » hitTestObject و یک مثال ساده

hitTestObject و یک مثال ساده

hitTestObject و یک مثال ساده

در این مطلب کوتاه می خواهیم hitTestObject در اکشن اسکریپت ۳ توضیح کوتاهی بدهیم ، یکی از راه های ساده برای تشخیص برخورد دو شی در اکشن اسکریپت این فرمان می باشد ، توجه داشته باشید این فرمان یک دایره را نیز به صورت یک مربع در نظر می گیرد و وقتی که در محدوده مستطیل یا مربع شکلی که شی شما در آن قرار دارد وارد شوید ، این تابع مقدار true را بازگشت می دهد.

نحوه استفاده از آن هم بسیار ساده است ، شی اول مثلا شی قابل برخورد و بعد . و بعد hitTestObject  و حالا به عنوان آرگمان تابع شی دوم که مثلا می تواند شی متحرک باشد.

برای توضیح بیشتر یک مثال را قرار می دهم در این مثال هر چند شی MovieClip که در استیج ایجاد کنید به صورت خودکار با شی که به عنوان متحرک و درگ شوند ، چک می شوند و در صورتی که شی ها با هم بر خود داشته باشند، شی مربوطه خصوصیت alpha اش ۰.۵ می شود.

در این مثال نام شی درگ شونده که در بخش instance name وارد کرده اید را به عنوان مقدار متغیر HitMovieClip قرار دهید.


import flash.display.MovieClip;
import flash.events.MouseEvent;

//شی مربوطه به درگ شدن و چک کردن برخورد
var HitMovieClip:MovieClip = testHit;
HitMovieClip.buttonMode=true;

function Testting()
{

	var num = this.numChildren;
	for (var i=0; i<num; i++)
	{

		if (getChildAt(i).name == HitMovieClip.name)
		{
			continue;
		}

		//در صورتی که شی قابل چک کردن نباشد در نظر گرفته نمی شود
		//در اینجا فقط مووی کلیپ ها
		if (getChildAt(i) is MovieClip)
		{
			//مووی کلیپ است
		}
		else
		{
			//مووی کلیپ نیست
			continue;
		}

		//نام اشیا موجود در خروجی نمایش داده می شود
		trace(getChildAt(i).name);

		//شی جاری گرفته می شود
		var item:MovieClip = MovieClip(getChildAt(i));

		//از نظر برخود چک می شود
		if (item.hitTestObject(HitMovieClip))
		{

			trace('هم اکنون شی روی این شی است :' + item.name);

			//خصوصیت شفافیت به نصف تغییر پیدا کند
			item.alpha = 0.5;
		}

	}

}

//ایجاد رویداد درگ کردن
HitMovieClip.addEventListener(MouseEvent.MOUSE_DOWN , dragStart , false , 0 , true);
HitMovieClip.addEventListener(MouseEvent.MOUSE_UP , dragStop , false , 0 , true);

function dragStart(e:MouseEvent)
{
	//افزودن رویداد برای زمانی که در حال درگ هست و چک کردن در آن زمان
	e.target.addEventListener(MouseEvent.MOUSE_MOVE , dragMove , false , 0 , true);

	e.target.startDrag();
}

function dragStop(e:MouseEvent)
{
	e.target.removeEventListener(MouseEvent.MOUSE_MOVE ,dragMove);

	e.target.stopDrag();
}

function dragMove(e:MouseEvent)
{
	Testting();
}

 

دانلود سورس نمونه

Print Friendly
تگ ها :
پیوند مطلب قبلی
پیوند مطلب بعدی

درباره بهروز پولادرگ

متولد : ۵ مرداد سال ۱۳۶۷ ، حرفه : ادوبی فلش ، برنامه نویسی و طراحی وب ، طراحی گرافیک ، مالتی مدیا ، نرم افزار های تحت وب

48 نظر

  1. سلام آقا بهروز
    یه سوالی ازتون دارم:
    اگه بخوایم یک متغیر در تمام قسمت های فایل فلش شناخته بشه (و در عین حال نخوایم که از فایل اکشن اسکریپت و کلاس و اینا استفاده کنیم)، چیکار باید بکنیم؟

    با تشکر

    • بله ، مثلا می توانید یک متغیر داخل یک شی Movieclip در استیج ایجاد کنید که در همه فریم ها وجود داشته باشد
      و بعد توسط درسترسی root مقدار آن را تغییر دهید
      و در مواقع نیاز مقدار آن متغیر آن شی را دریافت کنید
      موفق و پیروز باشید

  2. بازم سلام
    اگر فلش cs3 باشد چیکار میشه کرد که تو تکست از نوع ورودی بشه فارسی تایپ کرد؟

    • سلام راه خیلی کامل و مناسبی وجود ندارد
      یکی را های آن استفاده از فیلد متنی با حالت device font هست که برای حروف ی و… مشکلاتی دارد که با کمی کد نویسی قابل حل هست
      و استفاده از فارسی استایل و کلاس های مشابه در لحظه برای تغییر متن تایپ شده

      بهترین راه حل استفاده از اکشن اسکریپت ۳ هست به همراه TLF که کار را بسیار راحت می کند

      موفق و پیروز باشید

  3. سلام آقا بهروز، طاعات و عباداتتون قبول؛ وبسایت جدید راه انداختی؟ تصویر فلشت را توی سایت زیر دیدم تعجب کردم!!
    http://www.flashgraphic.ir/

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

      موفق و پیروز باشید

  4. با سلام

    من می خوام بازی فلش رو فارسی سازی کنم . به نظر شما کدام نرم افزار مناسب است.

    با تشکر

  5. سلام

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

  6. سلام اقا بهروز بهروز جان خیلی تو سایتت گشتم ولی یک پروژه تقریبا ۷۰ صفحه ای برای اکشن اسکریپت۳ میخواستم نتونستم پیدا کنم اگه بشه کمکم کنی اخه مطالباتو که خوندم خداییش پادشاهی .من پروژه م باید تو تابستون تحویل میدادم اما هنوز موفق نشدم ممنونم

  7. سلام برادر
    می خواستم بدونم یه فایل فلش رو با AS 3.0 میشه بست یا مینی مایز کرد؟

    • سلام بستن امکان پذیر هست ولی فقط برای پروژکت شده فایل فلش ولی اگر توسط برنامه های کاربردی MDM zinc و یا mprojector یا swfkit فایل فلش را به exe کامپایل کنید با توجه به راهنمای برنامه کدهایی در اختیار شما قرار داده می شود که می توانید این کارها و خیلی کارهای دیگر که برای یک مالتی مدیا نیاز هست را انجام دهید
      موفق و پیروز باشید

      • باز سلام
        مقادیری با این mprojector سر و کله زدم چیزی نفهمیدم. همون بستن عادی چه طور میشه؟
        یه سوال دیگه: مدتیه هر جا htmlloader استفاده می کنم و درست تست میشه فایل .swf ش ران نمی شه. فول اسکرینام هم همه سیاه میشن. حدس می زنم به هم ربط داشته باشن. شما فکر می کنید مشکل از کجاست؟

  8. سلام نرم افزاری هست بشه فریم فایل های swf تغییر بدیم

  9. ببخشید میخواستم بدونم چه جوری یک برنامه بنویسم که وقتی روی دکمه ای کلیک شد یه فولدر باز شود

    • سلام
      می بایست برای کامپایل به exe از برنامه هایی مثل mdmZinc , mProjector و… استفاده کنید که امکاناتی برای این کار به شما می دهند
      یا از Adobe Air استفاده کنید که این امکان را به صورت مستقیم داراست
      موفق و پیروز باشید

  10. سلام پیمان جان من دفعه قبل ازت راهنمایی گرفتم خیلی بهم کمک کرد.حالا دوباره مزاحمت شدم تا حالا کسی درست و حسابی جوابمو نداد
    من وقتی از نرم افزار فلش و افترافکت استفاده می کنم بعداز جند روز این پیغام برام می اد و دوباره مجبور میشم نصبشون کنم نمی دونم تا حالا ۱۰۰بار نصب کردم من خودم فک کنم مشکل سریال نامبره

    # اینترنتم اکثرا روشنه
    # فایروالم روشنه

    این ارور فلشه سی اسه ۵
    http://upload.tehran98.com/img1/knt8sjg124n934qdhgum.jpg

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

      • من این کارارو انجام دادم ولی باز اون اروره می اید لطفا اون سریال نامبره خودت بهم بده من تست کنم اگه از کرک استفاده میکنی برام ارسال کن من سی اس۵و۵.۵و۴
        دارم ممنون میشم جوابمو بدی

  11. میشه اون patchبرام ارسال کنی ممنون میشم

  12. سلام اقا بهروز
    اقا بهروز ببخشید من یه سوال دارم فکر میکنم شما بتونید کمکم کنید. من برای وبم کدنوحه طراحی میکنم اما برنامه ای که باهاش فایل های فلشمو میسازم سرعت خوبی نداره و مدت زیادی برای لود کردن نیاز داره.
    اول از همه چیز یه برنامه فلش سازی برای ساختن مدیاپلیر فلش میخوام معرفی کنید و بعدش اینکه لطفا یه سری به این وبلاگ بزنید و ببنید اهنگی که داره پخش میشه با چه برنامه فلشی ساخته شده: ‌http://postale.blogfa.com/

    این سوال دوممو خیلی نیاز دارم قربان.
    خواهش میکنم جواب بدید. چند ماهی میشه که تو اینترنت دارم سرچ میکنم و جوابمو هنوز پیدا نکردم
    منتظرم

  13. سلام ببخشید اگر بخوایم به شی برخورد کننده یک اکشن مثلا حرکت به سمت شی که قراره باهاش برخورد کنه بدیم و نخوایم با درگ این کار انجام بشه چیکار باید کرد چه تغییراتی در کد باید داد ؟

  14. سلام و ممنون از سایت بسیار خوبتون

    من دو تا سوال دارم: تعدادی شی روی استیج دارم و میخوام وقتی روی یکیشون کلیک میکنیم این کلیک روی بقیه تاثیر نذاره، مثلا وقتی داره شی انتخابی من از روی یه شی دیگه رد میشه اون هم همزمان حرکت نکنه!! یا مثلا اگر با هم همپوشانی داشته باشند و در این محل، کلیک میکنم هردو انتخاب نشن

    و اسم اون شی که انتخاب میکنم رو هم بدست بیارم، الان بهم root1 رو میده

    • سلام
      مورد اول شی خود را از نوع button در نظر بگیرید و سطح های قرار گیری در لایه ها یا مرحله قرار گیری روی هم را خودتان تنظیم نمایید توجه کنید شی ی که آخرین بار addChild می شود در بالاترین سطح از شی های قبلی قرار می گیرد
      در مورد حرکت شی اگر شی ها به صورت مجزا توسط کد و یا.. متحرکت شوند در حرکت هم تاثیری نمی گزارند در زمان همپوشانی نیز اگر هر دو شی دکمه باشند مشکلی وجود نخواهد داشت اگر شی مورد نظر شما در سطح پایین هست با addChild کردن دوباره همان شی به راحتی می تواند آن را به بالاترین سطح بیاورید.

      برای مورد دوم می بایست اسم مورد نظر خودتان در بخش instance name وارد نمایید ، با این کار می تواند توسط تابعی مثل getChildByName به شی مربوطه دسترسی داشته باشید ، در ضمن اکشن ۳ به همه اشیای درون صفحه بدون نام گذاری نیز مانند یک آرایه درسترسی می دهد.
      بعد از انتخاب هم اگر می خواهید نام شی را برسی کنید خصوصیت .name نام شی انتخابی را بر می گرداند

      به بخش مقالات مربوطه به اکشن ۳ مراجعه نمایید و مقالات بیشتری در مورد عملکرد اکشن ۳ مطالعه نمایید

      موفق و پیروز باشید

  15. سلام
    خیلی سایت پر محتوایی دارید. فقط این سورس hit test دانلود نمیشه. به نظر میاد لینک دانلودش کار نمیکنه.
    با تشکر

  16. آقا دستت درد نکنه خیلی کاربردیه

  17. سلام
    یه مدتیه بعضی از کدها و دستورات فلش با اجرای برنامه ساخته شده در محیط فلشم کار نمیکنن مثلا همین دکمه فول اسکرین یا دکمه خروج. فایلی که اجرایی هستش با پسوند swf درست کار میکنه اما خود پروژه تو محیط فلش نه ارور هم نمیده. رو یه سیستم دیگه نصب کردم همین بودش. چندبار هم برنامه رو پاک کردم و نصب کردم حل نشد که نشد. به نظرتون چیکار کنم استاد؟
    با تشکر فراوان

    • سلام این مورد طبیعی است
      دکمه خروج فقط برای اجرا در حالت standalone فعال هست و تمام صفحه نیز در این حالت و در حالتی که در صفحه وب استفاده شود و در تگ مربوطه allowfullscreen فعال شده باشد کار می کند.
      این دو مورد در حال تست فلش کار نمی کنند و این موضوع مشکلی ندارد و طبیعی می باشد.

      موفق و پیروز باشید.

  18. سلام آقای پولادرگ

    من در حال ساخت یک بازی فلش هستم. با adobe flash cs6 کار می کنم. در حال حاضر به یک مشکل برخورد کرده ام. دو تا object دارم که به سمبل movie clip تبدیل شده اند و تعدادی object دیگر که سمبل گرافیکی هستند و به عنوان مانع استفاده می شوند و در یک تایمر هر ثانیه مکان آن ها عوض می شود و دو تا object سمبل movie clip باید با این موانع برخورد کنند اما این اتفاق نمی افتد بلکه از روی موانع رد می شوند. از کد شما استفاده کردم ولی error می دهد. خواهشمندم به من کمک کنید.
    بی صبرانه منتظر راهنمایی شما هستم.

    با سپاس و احترام
    صدرا ابوترابی
    دانش آموز هشتم (سوم راهنمایی)، مدرسه علامه حلی ۱۰

  19. سلام وضمن تشکر از مطالب شما.
    من داشتم یک بازی maze طراحی میکردم و اون تونل تو در تو رو در فتوشاپ کشیدم و مسیری که موش باید از توش رد بشه رو تو فتوشاپ transparent کردم و با فرمت png ذخیره کردم و آوردم تو اکشن اسکریپت ۳. از تابع hitTestPoint یا hitTestObject برای برخورد موش با مسیر استفاده کردم.میخوام اگه در حین حرکت موش به دیوار برخورد میکنه مثلا ارور بده یا هرچیز دیگه.
    حالا اشکالم اینه که همه عکس png رو باهم در میگیره و اون قسمت های transparent رو هم جز عکس و اون شی میدونه ! در حالیکه اون قسمتا خالیه.برای رفع این اشکال چه کار باید بکنم یا قسمت transparent عکس های png رو خالی در بگیره؟!
    پیشاپیش از راهنماییتون خیلی ممنونم.

    • سلام

      فلش در کل بخش های transparent را به همراه کل فایل png شما یک مربع می شناسد و درکی از این بخش ها برای محاسبات ندارد
      شما باید طرح را در لایه ای در زیر قرار دهید
      روی بخش هایی که مسیر هست با ابزارهای طراحی فلش شی مستطیل طراحی کنید
      حال باید تعدادی از این مستیل را در محلهایی قرار دهید تا مسیر شما را تشکیل دهد

      بهتر هست برای هر کدام از آنها که به صورت MovieClip هست یک hitTestObject جدا تعریف کنید

      موفق و پیروز باشید

  20. با سلام.من چهار موی کلیپ دارم میخوام دو به دو با موس به هم وصل بشه و اگر درست وصل شد مثلا یک پیام بده لطفا راهنمایی بفرمایید (مثل سوالات وصل کردنی در آزمونها)

    • سلام و عرض ادب. این مطلب به شما برای انجام این کار کمک می کند
      برای این کار باید یک آرایه ایجاد کنید که مواردی که برای اتصال به هم درست هستند را مشخص کنید تا بتوانید در زمان برخورد دو شی بررسی کنید
      به بخش های مربوطه امکان درگ کرد کردن را بدهید و در زمان درگ کردن می توانید توسط امکانات graphic در اکشن اسکریپت خطی هم از مرکز مورد نظر رسم کنید و آن را با حرکت نیز به روز کنید.
      در مرحله بعد هر مورد را بعد از برخورد به شی مربوطه بررسی می کنید که طبق آن آرایه در محل درست هست یا خیر اگر در محل درست باشد خط را از نقطه اول به نقطه مربوطه رسم می کنیم.
      و این مورد را برای دیگر موارد تکرار می کنیم.

      این مورد راهنما بدون خط هست
      https://www.youtube.com/watch?v=Lo3nCoy1d04

      و این هم الگوی افزودن خط در فلش

      https://www.google.com/search?newwindow=1&client=safari&rls=en&q=draw+line+as3&

      این آموزش هم می تواند به شما کمک نماید
      https://code.tutsplus.com/tutorials/create-a-drag-and-drop-puzzle-in-actionscript-30–active-2920

ارسال جواب

آدرس رایانامه شما منتشر نخواهد شد.فیلد های اجباری علامت گزاری شده اند *

*

رفتن به بالای صفحه