چطوري ميشه واسه motion كد نوشت؟؟

sahar_ss13

New Member
با سلام
من يه كد نوشتم كه يه دايره رو با يه For از يه مختصات منتقل ميكنه به يه مختصات ديگه فقط ميخواستم توي هر بار اجرا شدن داخل For يه فقطه بندازم
يعني يه چيزي مثل Delay توي C يا Pascal كه دايره يواش منتقل بشه نه يكباره
و در ضمن ميخواستم ببينم Ease رو چطوري ميشه كنترل كرد يعني توي For از يك تا صد برو با اين سرعت و با ease مثلا 100 ؟؟؟؟؟؟؟؟؟؟؟////
ممنون ميشم اگه كسي راهنماييم كنه
 

Security9776

Active Member
سلام ،
شما می تونید از یک فانکشن استفاده کنید که این عملیات رو انجام بده و بعد یک اینتروال برای اون با فاصله زمانی مورد نظرتون ایجاد کنید .

اگه مشکلی بود بگید تا کمکتون کنم .

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

phoenix

Member
ActionScript یک زبان MultiThreded تحت کنترل برنامه نویس نیست که مانند C یا Java از وقفه های درون برنامه پشتیبانی کنه، این بدین معنی است که کلیه خطوط برنامه در یک فرم، متد یا کلاس پشت سر هم و بدون وقفه اجرا خواهند شد و حلقه for نمی تواند کمکی به ایجاد انیمیشن نماید، زیرا انیمیشن ها در واقع برنامه هایی هستند که با delay متناسب با frame rate مورد نظر اجرا می شوند ولی از طرف دیگر ActionScript یک زبان کاملا شیئ گراست با قابلیت پشتیبانی از Event ها بنابراین می توان کنترل برنامه هایی که نیاز به وقفه دارند را با استفاده از Event ها در دست گرفت.

ایجاد برنامه هایی برای motion کار ساده ای نیست یعنی اصلا کار ساده ای نیست بخصوص وقتی که معادلات easing هم همراه انیمیشن باشه. این کار تقریبا در AS1 غیر ممکنه. من قبلا کلاسهایی برای ایجاد motion برای کلیه property های اشیا در فلش مانند x_ یا alpha_ یا xScale_ و ... با قابلیت پشتیبانی از انواع معادلات easing در AS2 نوشتم. البته core برنامه از package mx برداشت شده با تغییراتی در event model و timing

در حال حاضر فرصت ندارم، اما در صورتی که مایل یاشید میتونم طی روزهای آینده برنامه ها رو با خلاصه ای از API در اینجا قرار بدم
 

sahar_ss13

New Member
Security9776 جان من اصلا اين چيزايي كه گفتين بلد نيستم اگه ميشه يه مثالي يه توضيحي بدين ممنون ميشم
 

overcrash

Active Member
میتونی خیلی راحت از دو قابلیت زیر درکنار هم استفاده کنی:
1. فاصله زمانی بین فریمها
2. gotoFrame
(فکر کنم توضیحات کامل باشه فقط خلاقیت میخواد )
 

amir_s

Active Member
phoenix گفت:
ActionScript یک زبان MultiThreded تحت کنترل برنامه نویس نیست که مانند C یا Java از وقفه های درون برنامه پشتیبانی کنه، این بدین معنی است که کلیه خطوط برنامه در یک فرم، متد یا کلاس پشت سر هم و بدون وقفه اجرا خواهند شد و حلقه for نمی تواند کمکی به ایجاد انیمیشن نماید، زیرا انیمیشن ها در واقع برنامه هایی هستند که با delay متناسب با frame rate مورد نظر اجرا می شوند ولی از طرف دیگر ActionScript یک زبان کاملا شیئ گراست با قابلیت پشتیبانی از Event ها بنابراین می توان کنترل برنامه هایی که نیاز به وقفه دارند را با استفاده از Event ها در دست گرفت.

ایجاد برنامه هایی برای motion کار ساده ای نیست یعنی اصلا کار ساده ای نیست بخصوص وقتی که معادلات easing هم همراه انیمیشن باشه. این کار تقریبا در AS1 غیر ممکنه. من قبلا کلاسهایی برای ایجاد motion برای کلیه property های اشیا در فلش مانند x_ یا alpha_ یا xScale_ و ... با قابلیت پشتیبانی از انواع معادلات easing در AS2 نوشتم. البته core برنامه از package mx برداشت شده با تغییراتی در event model و timing

در حال حاضر فرصت ندارم، اما در صورتی که مایل یاشید میتونم طی روزهای آینده برنامه ها رو با خلاصه ای از API در اینجا قرار بدم

ممنون کامیار جان !
ممنون میشم کلاسهایی رو که نوشتی به ما هم بدی !
 

Security9776

Active Member
سلام ،
ببخشید که چند روزی نبودم .
در مورد جواب شما ، شما باید از یک فانکشن استفاده کنی مانند زیر :
function Motion() {
YourMovie._x = YourMovie._x+1;
YourMovie._y = YourMovie._y+1;
}

بعد وقتی خواستی که فانکشن شما عمل کنه دستور زیر رو باید اجرا کنی :
Motion_I = setInterval(Motion,500);

که در این جا 500 یعنی 500 میلی ثانیه یا نیم ثانیه . یعنی فانکشن شما که x و y مووی شما رو تغییر می دهد هر نیم ثانیه یک بار اجرا می شود .
هر جا هم که خواستید این عملیات متوفق بشود از دستور زیر استفاده کنید :
clearInterval(Motion_I);


موفق و سربلند باشید ، محسن
 

phoenix

Member
در ضمیمه یک فایل zip قرار دارد که شامل یک مثال و کلاسهای tween می باشد. پس از extract کردن این فایل لازم است که فولدر classes به عنوان یکی از مراجع کلاسها برای فلش تعریف شود برای این کار ابتدا شاخه classes را در جایی بر هارد ذخیره کنید (مثلا c:\flash\classes) سپس از منوی edit گزینه preferences را انتخاب کرده و در قسمت ActionScript روی دکمه ActionScript 2.0 Settings… کلیک کنید. احتمالا دو گزینه . و LocalData)/Classes)$ وجود خواهند داشت که نماینگر جستجو برای کلاسها در در خود شاخه ای که FLA وجود دارد و سپس در شاخه classes در جایی که نرم افزار فلش نصب شده است است. باید گزینه سومی را برای Classpath اضافه کنید که مثلا c:\flash\classes خواهد بود، در این صورت فلش کلاسهای جدید را نیز در موقع compile خواهد شناخت.

شاخه classes شامل یک package به نام es است که package اصلی برنامه های من می باشد (درجه open source بودن خونم زیاد شده!) در es که من اینجا قرار دادم شما تنها package ها و class هایی را می بینید که برای Tween لازم هستند. مثلا UI شامل کلاسهایی برای UserInterface مانند Timer به جای setInterval و package اصلی Tween به نام transitions که کلاس Tween در همین جا قرار دارد. یا مثلا events که شامل کلاسهای پایه برای هسته اصلی event model و برگرفته از DOM Event Model و متناسب با Event Delegation Pattern می باشد و تقریبا بنیان بسیاری از برنامه های دیگر است که در اینجا اصلا مجالی برای صحبت در مورد اون با توجه به گستردگی مبحث Event Delegation نیست. در هر حال چیزی که برای استفاده از کلاس Tween لازم است بسیار ساده تر از اینهاست:

در برنامه های AS2 و یا حتی AS1 و در پروژه های بزرگ همواره بهتر است که از انیمیشن های visual و بر روی timeline در محیط فلش با توجه به عدم دسترسی برنامه نویس به آن و همچنین غیر قابل کنترل بودن آن اجتناب کرد. می توان به راحتی و با ایجاد یک object از نوع Tween کلیه انیمیشن های ساده را با قابلیت کنترل کامل برنامه نویس ایجاد نمود بدون اینکه نیاز به نوشتن کد اضافی برای برنامه نویس و یا نگرانی از انجام چگونگی Tween وجود داشته باشد.

برای استفاده از Tween ابتدا باید کلاسها را در کلاسهای دیگر یا در فریمها یا کلا هر جایی که می خواهیم از آنها استفاده کنیم import کنیم:

کد:
import es.UI.transitions.Tween;

سپس یک object از نوع Tween ایجاد می کنیم و کلیه مشخصات یک Tween را در constructor قرار می دهیم:

کد:
var XTween:Tween = new Tween(mc, "_x", 0, 200, 2, true, 60);

اگر نگاهی به داخل برنامه es.UI.transitions.Tween بیندازید میبینید که Constructor کلاس Tween چندین پارامتر را برای ورودی قبول می کند:

کد:
function Tween (obj:Object, prop:String, begin:Number, finish:Number, duration:Number, useSeconds:Boolean, fps:Number)

obj: آدرس به MovieClip، Button و یا TextField در صفحه
prop: مشخصه ای که می خواهیم Tween بر روی آن انجام شود مثل x_ یا xScale_ یا alpha_ و ...
begin: نقطه ابتدایی مشخصه برای Tween
finish: نقطه انتهایی مشخصه برای Tween
duration: مدت زمانی که Tween به طول خواهد انجامید به ثانیه و یا تعداد فریم
useSeconds: مشخصه Boolean برای مشخص کردن اینکه duration بر حسب ثانیه محاسبه شود یا تعداد فریم. در صورتی که true باشد بر حسب ثالیه محاسبه خواهد شد.
fps: فریم ریت در Tween. لازم به ذکر است که فریم ریت Tween کاملا مستقل از frame rate در timeline می باشد و به صورت مجزا set می شود. در صورتی که این پارامتر وارد نشود frame rate از timeline اقتباس خواهد شد.

بنابراین در مثال قبل XTween متولی ایجاد Tween برای مشخصه x_ از mc که یک MovieClip است و از مقدار 0 تا 200 در طول 2 ثانیه و با انیمیشن 60 فریم در ثانیه می باشد. ایجاد این Object به تنهایی موجب ایجاد Tween نمی شود تا اینکه برنامه نویس متد start از این object را اجرا کند:

کد:
XTween.start();

در این هنگام Tween از ابتدا (0) تا انتها (200) در مدت 2 ثانیه Tween خواهد شد بدون اینکه نیازی به timeline و یا دستورات احمقانه gotoAndPlay یا gotoAndStop باشد
لازم به ذکر است که در هنگام اجرای انیمیشن به دلخواه می توان متد stop را صدا زد که باعث توقف اجرای انیمیشن می شود:

کد:
XTween.stop();

همونطور که قبلا قول دادم کلاس tween از معادلات ease هم پشتیبانی می کند برای این کار می توان قبل از start کردن Tween باید معادله ease را برای object وارد کرد. در es تعداد 5 عدد style کلی برای ease و در کل 18 عدد ease وجود دارد که می توان از آنها استفاده کرد. لازم است که کلاس easing قبلا import شده باشد:

کد:
import es.UI.transitions.Tween;
import es.UI.transitions.Easing;

var XTween:Tween = new Tween(mc, "_x", 0, 200, 2, true, 60);
XTween.ease = Easing.REGULAR_EASE_OUT;

XTween.start();

باعث Tween با معادله Regular یا چیزی شبیه به easing خود فلش در timeline می شود. معادلات easing قابل استفاده عبارتند از:

کد:
Easing.NONE_EASE_IN
Easing.NONE_EASE_OUT
Easing.NONE_EASE_INOUT

Easing.BACK_EASE_IN
Easing.BACK_EASE_OUT
Easing.BACK_EASE_INOUT

Easing.BOUNCE_EASE_IN
Easing.BOUNCE_EASE_OUT
Easing.BOUNCE_EASE_INOUT

Easing.ELASTIC_EASE_IN
Easing.ELASTIC_EASE_OUT
Easing.ELASTIC_EASE_INOUT

Easing.STRONG_EASE_IN
Easing.STRONG_EASE_OUT
Easing.STRONG_EASE_INOUT

Easing.REGULAR_EASE_IN
Easing.REGULAR_EASE_OUT
Easing.REGULAR_EASE_INOUT

لازم به ذکر است که هر کس در صورتی که مایل باشد می تواند معادله ease برای Tween جداگانه بنویسد. برای این کار باید کلاس نوشته شده از interface Ease مشتق شود و از کلاس EaseManager ارث ببرد
در صورتی که به es\UI\transitions\easing مراجعه شود نمونه های عملی مشخص است. در این صورت باید ease را به صورت دستی برای object ایجاد کرد:

کد:
import es.UI.transitions.Tween;
import es.UI.transitions.easing.Strong;

var XTween:Tween = new Tween(mc, "_x", 0, 200, 2, true, 60);
XTween.ease = new Strong(Tween.EASE_IN);
XTween.start();

(در صورتی که کسی مایل بود اینجا را بیشتر توضیح میدم)


چیزی که هنوز نگفتم Event Model برای Tween هست. کلاس Tween از Event Model تعریف شده در es.events.EventBroadcaster ارث بری دارد و شامل event های زیر می شود:

کد:
onMotionLooped
onMotionFinished
onMotionChanged
onMotionStarted
onMotionStopped
onMotionResumed

سیستم تعریف کردن event برای Tween همان سیستم listener ها است که با آن آشنا هستید بنابراین در یک مثال استفاده از آنرا نشان میدهم:

کد:
import es.UI.transitions.Tween;
import es.UI.transitions.Easing;

var _listener:Object = new Object();
var XTween:Tween = new Tween(mc, "_x", 0, 200, 2, true, 60);
XTween.ease = Easing.REGULAR_EASE_OUT;

XTween.addListener(_listener);

_listener.onMotionStarted = function()
{
	trace("Tween started!");
};

_listener.onMotionFinished = function()
{
	trace("Tween finished!");
};


XTween.start();

نکته قابل توجه اینکه هر event در هنگام broadcast شدن یک information object از event اجرا شده را ارسال می کند که می توان در handler آن event به آن دسترسی داشت. در کلاس Tween این info object شامل property های زیر می شود:

clip: نمایانگر MovieClip یا کلا شیئ که Tween بر روی آن انجام شده است.
count: شمارنده ای برای نشان دادن شمارش ارسال شدن این event
target: یک reference به Tween object یا object که Tween را اجرا می کند.
type: نمایانگر نوع event ارسال شده
info: اطلاعاتی در مورد event ارسال شده

در مثال قبل:

کد:
_listener.onMotionFinished = function(info)
{
	trace("clip: " + info.clip);
	trace("target object: " + info.target);
	trace("event count: " + info.count);
	trace("event type: " + info.type);
	trace("info: " + info.info.level + ", " + info.info.code);
};

دیگه واقعا خسته شدم، در مورد خلاصه API کلاس es.UI.transitions.Tween را ببنید اگر چیز خاصی بود جواب میدم فقط 3 مورد زیر:

متد start همانطور که قبلا گفتم برای start کردن یک Tween بکار می رود
متد stop برای stop کردن یک Tween در حال اجرا بکار می رود
متد resume برای resume کردن یک Tween قبلا اجرا شده بکار می رود

و بقیه API...

در فایل ضمیمه یک مثال هم گذاشتم که فکر می کنم جالب باشه
 

پیوست ها

  • Tween.zip
    40.8 کیلوبایت · بازدیدها: 36
آخرین ویرایش:

amir_s

Active Member
حیفم اومد که فقط دکمه تشکر رو بزنم !

واقعا ممنون کامیار جان !
کامل تر از این نمیشد !
 
بالا