قرار گیری رندوم مووی کلیپ ها در صفحه

سلام
فرض کنید در فریم اول پروژه، 3 تا مووی کلیپ داریم که با هر بار اجرای برنامه میخواهیم مکان مختصات آنها در صفحه بصورت تصادفی عوض بشه بطوری هیچ کدام روی هم قرار نگرفته و همچنین این مووی کلیپ ها مثلاً در نیمه ی شمالی صفحه به نمایش در بیایند.(در محدوده ای خاص در صفحه)
این قسمت رو تو یه فایل fla توضیح بدید ممنون میشم.
ورژن فلش من 5.5 و اکشن اسکریپت 3
 

aliamel

کاربر فعال
الگوریتم کلی که به نظرم میرسه رو می گم.تکمیلش با شما.

گام اول

اول از همه به تصویر 1 نگاه کنید.استیجی رو می بینید که نیمه بالایی اون به سه قسمت مساوی تقسیم شده که قراره داخل هر مربع یک مووی کلیپ قرار بگیره.
در این مرحله ابتدا باید مشخص کنیم که کدون مووی کلیپ باید در کدوم مربع قرار بگیره...
این فرض رو در نظر بگیرید که :
برای mc1 سه محل قرار گیری وجود داره.
برای mc2 دو محل قرار گیری وجود داره.
برای mc3 تنها یک محل قرار گیری وجود خواهد داشت.

بنابراین آرایه ای بدین صورت نیاز داریم که مقداری رو به صورت تصادفی از اون برداریم:
PHP:
var container:Array=[1,2,3];
var area:Number = Math.round(Math.random() * 3) + 1
این قطعه کد یک عدد تصادفی بین یک تا سه رو انتخاب می کنه.با فرض این که برای اولین بار عدد 2 انتخاب بشه به این نتیجه می رسیم که مکان قرار گیری mc1 باید در محل 2 باشه.
سپس مقدار 2 رو بایستی از داخل آرایه پاک کنیم.(عملیات حذف یک عنصر از آرایه به کمک متد های pop , indexOf قابل انجامه)
در نتیجه آرایه ای با 2 عضو خواهیم داشت.
این مرحله رو یک بار دیگه تکرار می کنیم تا عدد تصادفی بعدی بدست بیاد.با فرض این که عدد تصادفی بعدی 3 انتخاب بشه به این نتیجه می رسیم که مکان قرار گیری mc2 باید در محل 3 باشه.
در نهایت عنصر 3 هم بایستی از ارایه پاک بشه که در این صورت عنصر 1 در آرایه باقی می مونه و مشخص کننده مکان قرار گیری mc3 خواهد بود(یعنی محل1) که در تصویر شماره 2 نشان داده شده است.

گام دوم
چون قراره هر مووی کلیپ در محلی تصادفی واقع در هر یک از سه مربع قرار بگیره و هر بار موقعیتش عوض بشه می تونیم این کار رو با قطعه کدی مشابه زیر انجام بدیم.این کار تنها برای یک مووی کلیپ انجام شده که شما می تونید با استفاده از switch..case های مربوطه این کا رو برای سایر مووی کلیپ ها انجام بدید:

PHP:
import flash.events.MouseEvent;
btn.addEventListener(MouseEvent.CLICK,addPose1);

var p1:Number = 0;
var p2:Number = 0;
function addPose1(e:MouseEvent):void
{
    p1=(Math.round(Math.random()*100)+1);
    p2=(Math.round(Math.random()*160)+1);
    mc1.x = p1;
    mc1.y = p2;
    ta.text = p1 + " , " + p2;

}


مطمئنا تغییرات مختلفی رو بسته به نیاز باید انجام بدید تا به نتیجه مطلوب برسید.سایر موارد بر عهده خودتونه و اگه لازم دونستید از سایر دوستان کمک بگیرید.
موفق باشید!
 

پیوست ها

  • Test.rar
    484.8 کیلوبایت · بازدیدها: 31
بسیار متشکر خیلی عالی بود.
اما چیزی که من می خواستم کمی با این مورد تفاوت داشت با بسط و تعمیم کدهای شما تونستم پروژه ی مورد نظر خودم رو بسازم و در لابلای این کار هم کمی از کدنویسی یاد گرفتم. پروژه را پیوست کردم تا بقیه ی دوستان هم در صورت لزوم استفاده کنند.
فقط تنها مشکلی که در این پروژه وجود داره اینه که مووی کلیپ ها ممکنه روی هم قرار بگیرن که بایستی برای از بین بردن این مشکل همانطور که شما هم به آن اشاره کردید محدوده ی قرارگیری هر مووی کلیپ را محدود به منطقه ی خاص نماییم که با مکان دیگر وجه اشتراکی نداشته باشد که این کار هم آسونه.
به هر حال ممنون بابت راهنمایی و کمکی که کردید.
 

پیوست ها

  • Putting Random MovieClip.rar
    9.4 کیلوبایت · بازدیدها: 16

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

بالا