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

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

Fanous

Well-Known Member
سلام
من قبلا از آقا هادی یک کار از انجمن گرفتم و خوب بود یعنی با کلیک و جابجا کردن یک دکمه اسکرول به نرمی و با شتاب متفاوت انجام میشد. چون نه آنقدر مسلطم که اون کدها را برای منظور مورد نظر تغییر دهم و نه فرصتش را دارم که زیاد با کدها ور برم آیا دوستان کد آماده ای دارند که این کار را انجام دهد یعنی یک کاری شبیه اسکرول برنامه اندروید که به نرمی انجام میشود را برام انجام دهد من خودم یک کدی براش نوشتم ولی روان عمل نمیکنه.

سلام
من واستون یه پیشنهاد دارم
روی لایه ای که میخواین اسکرول بشه ، یه مستطیل به ابعاد مورد نظرتون ایجاد کنین و اوپاسیتیش رو 0 کنین و براش کدهای درگ رو بنویسین
مختصات x,y شی مورد نظر رو لینک کنین به x,y مستطیل
با جابجایی مستطیل ، شی مورد نظرتون براحتی جابجا میشه
 
سلام
ایده جالبی به نظر میاد. ولی بهتره محض محکم کاری اشاره هایی به کدهای درگ بذارید. آیا با رویداد های موس فرق داره؟ اگر کارش اینه که شیئ به همراه موقعیت x و y موس یا رویداد جابجا بشه. کار زیادی از پیش نمی بره چون با رویدادها مربوط به موس این کارها را انجام میدم. من یه چیزایی بیشتر از این میخوام. حرفه ای تر و روانتر مثل حرکت با شتاب بیشتر اولیه و به تدریج شتاب حرکت کم میشه. اگر با درگ این کار انجام میشه لطفا راهنمایی کنید چه جوری میشه کدهاش را نوشت .
 

Fanous

Well-Known Member
سلام
ایده جالبی به نظر میاد. ولی بهتره محض محکم کاری اشاره هایی به کدهای درگ بذارید. آیا با رویداد های موس فرق داره؟ اگر کارش اینه که شیئ به همراه موقعیت x و y موس یا رویداد جابجا بشه. کار زیادی از پیش نمی بره چون با رویدادها مربوط به موس این کارها را انجام میدم. من یه چیزایی بیشتر از این میخوام. حرفه ای تر و روانتر مثل حرکت با شتاب بیشتر اولیه و به تدریج شتاب حرکت کم میشه. اگر با درگ این کار انجام میشه لطفا راهنمایی کنید چه جوری میشه کدهاش را نوشت .

کدهای درگ همون کدهای درگ موس هست و توی تاچ هم جواب میده
شما واسه شتاب دادن باید با کدنویسی این کار رو انجام بدین ، کافیه موقع شروع تاچ یک تایمر رو فعال کنین ، جهت حرک رو تشخیص بدین ، در لحظه جدا شدن انگشت از صفحه تایمر رو متوقف کنین و با توجه به مدت زمان تاچ و مقدار جابجایی انجام شده ، با یک tween مستطیل رو حرکت بدین و با حرکت مستطیل شی شما هم جابجا میشه . مهم اینه که فرمول جابجایی x,y رو به شکلی بنویسین که به هدف دلخواه تون برسین ، می تونین از فرمولهای حرکت در فیزیک استفاده کنین
 
سلام
از فانوس عزیز ممنونم بعد از گذاشتن این پست کدهام را اصلاح کردم و الان از عملکرد اون راضیم ولی قسمت اصلی هدفم از گذاشتن این پست اینه که میخوام بعد از رها شدن موس تایمر شی ام را =+ یک متغیری که خودش هم به تدریج کم میشه تا به صفر میرسه بکنه تا شی ام بعد از رها شدن موس یکدفعه وای نایسته بلکه به تدریج سرعتش کم شه تا بایسته. یک چیزهایی به ذهنم اومده ولی هنوز تست نکردم اگر از دوستان فرمولش را دارند لطف کنند ممنون میشم.
 

Fanous

Well-Known Member
سلام
از فانوس عزیز ممنونم بعد از گذاشتن این پست کدهام را اصلاح کردم و الان از عملکرد اون راضیم ولی قسمت اصلی هدفم از گذاشتن این پست اینه که میخوام بعد از رها شدن موس تایمر شی ام را =+ یک متغیری که خودش هم به تدریج کم میشه تا به صفر میرسه بکنه تا شی ام بعد از رها شدن موس یکدفعه وای نایسته بلکه به تدریج سرعتش کم شه تا بایسته. یک چیزهایی به ذهنم اومده ولی هنوز تست نکردم اگر از دوستان فرمولش را دارند لطف کنند ممنون میشم.

سلام
اگر متغیر شما به اندازه i تغییر می کند می توانید پس از تغییر متغیر ، مقدار i رو مثلا در 0.9 ضرب کنین یا هر فرمول دیگه ای که شما رو به هدفتون برسونه
و با یک دستور if کنترل کنین که اگر مقدار i از 0.1 کمتر شد ، حلقه به اتمام برسه و دیگه حرکتی نداشته باشین
 
سلام
اینجوری اگه متغیرم از 1 شروع کنه مثا 2 و 3 و 4 و ... در 0.9 ضرب بشه که به تدریج بیشتر میشه مثلا در 1 میشه 0.9 ولی اگر در دو ضرب بشه میشه 1.8
بیشتر که دقت می کنم میبینم باید اینطوری باشه یعنی باید یک را به متغیرم تقسیم کنم اینطوری جابجایی شی ام از 1 به 0.5 و سپس 0.33 و ... میرسه تا صفر بشه.
شاید منظورتون اینطوری بوده و در حال از ایده شما به این نتیجه رسیدم و فکر می کنم بدون استفاده از توابع سینوسی و راحتتر به مقصودم برسم. ممنونم
 

Fanous

Well-Known Member
سلام
اینجوری اگه متغیرم از 1 شروع کنه مثا 2 و 3 و 4 و ... در 0.9 ضرب بشه که به تدریج بیشتر میشه مثلا در 1 میشه 0.9 ولی اگر در دو ضرب بشه میشه 1.8
بیشتر که دقت می کنم میبینم باید اینطوری باشه یعنی باید یک را به متغیرم تقسیم کنم اینطوری جابجایی شی ام از 1 به 0.5 و سپس 0.33 و ... میرسه تا صفر بشه.
شاید منظورتون اینطوری بوده و در حال از ایده شما به این نتیجه رسیدم و فکر می کنم بدون استفاده از توابع سینوسی و راحتتر به مقصودم برسم. ممنونم

فرض کنیم شما یه مستطیل دارین
اگر مختصات y این مستطیل هر بار به اندازه i=1 تغییر کنه سرعتش ثابته
حالا اگر بخواهیم سرعتش به مرور کم بشه متغیر i رو در هر تکرار حلقه در عددی کمتر از 1 ضرب می کنیم ، مثلا 0.9
اینجوری در سیکل اول، مختصات y به اندازه i=1 زیاد میشه
در سیکل دوم i=1*0.9=0.9
سیکل سوم i=0.9*0.9=0.81
i=0.81*0.9=0.729
.
.
.
می بینین که با هر تکرار حلقه ، متغیر i داره کم میشه و چون مختصات y مستطیل با i زیاد میشه ، پس به مرور مستطیل سرعتش کم میشه تا جاییکه حلقه با یک شرط تموم بشه
این روشی بود که من گفته بودم
حالا با توجه به نحوه کدنویسی شما میشه روش دیگه ای هم استفاده کرد که دیگه به تشخیص خود شماست
 

flash.developer

Active Member
شما می‌تونید در تابع استاپ از کلاس‌های TweenMax استفاده کنید
منتها چند کار باید انجام بدید
اول اینکه مختصات y اگر اسکرول عمودی و x را اگر اسکرول افقی بود در مرحله استارت درگ ثبت کنید و با مختصات در زمان استاپ مقایسه کنید. و بدین ترتیب جهت حرکت رو مشخص کنید
 
سلام دوست عزیز
یک عیب من اینه که به جای اینکه برم یه کلاس جدید که کدهاش زیاد باشه را زیر و رو کنم ترجیح میدم ساده ترش را درست کنم کارم راه بیفته. برای همین من یک مووی درست کردم که با رویدادهای مربوط به mouse_down و mouse_up و mouse_move روی اون یک شیئ را مجبور به حرکت کردم و به تبع اون باقی اشیائی که بخوام نیز حرکت می کنند. ولی یه مشکل تو کار هست و اون اینه وقتی در بالاترین فرزند قرارش بدم که رویدادهای مربوط به اون اجرا بشه جلوی رویدادهای مربوط به دکمه های زیر خودش را میگیره برای همین مجبورم زیر دکمه ها بگذارم و مشکل اون هم اینه که اگر فضای خالی بین دکمه ها کم بشه اسکرول کردن به مشکل بر میخوره.
حالا سؤال: رویداد درگ کردن را چه طور میشه نوشت. شاید به این مشکل برنخورم.!!!!
 

flash.developer

Active Member
PHP:
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;

user_mc.addEventListener(TouchEvent.TOUCH_BEGIN, f_startDrag);
user_mc.addEventListener(TouchEvent.TOUCH_END, f_stopDrag);

var dragBounds:Rectangle = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);

function f_startDrag(e:TouchEvent):void
{
    e.target.startTouchDrag(e.touchPointID, false, dragBounds);
}

function f_stopDrag(e:TouchEvent):void
{
    e.target.stopTouchDrag(e.touchPointID);
}
 

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

بالا