واضح آرشیو وب فارسی:سایت ریسک: جابه جايي خط Amit13 04 شهريور 1389, 12:11سلام دوستان يك مشكل الگريتمي پيدا كردم,هرچقدر فكر ميكنم,چيزي به ذهنم نميرسه. من ميخوام يك لاين عمود كه عرض يك پيكسل رو داره,روي محور ايكس ها جابه جا كنم.به طوري كه موقعيت هر لحظه ي ايكس لاين براي من مهمه. مصلما از دستور MoveTo نميتونم استفاده كنم,من كد رو اينجوري نوشتم: For xline=20 to 200 MoveObject("line","xline,2") Pause("1") Next xline اما مشكلي كه اين دستور داره,سرعت است كه خيلي سرعت اتمام حلقه پايينه;خوب به خاطر Pause كه گذاشتم هست.ولي اين دستور رو نذارم,سرعت بينهايت بالا ميره. لطفا يك روش پيشنهاد كنيد كه بتونم سرعت رو درست كنم. مرسي. evil_gates 04 شهريور 1389, 12:20اين مثال رو ببينيد دوست عزيز Amit13 05 شهريور 1389, 00:30اين مثال رو ببينيد دوست عزيز حيلي ممنون استاد جون.:oops::oops: ولي:cry: اين مثال شما هم سرعتش مثل مثال خودم كمه! خوب step هم كه كمتر از يك نميشه گذاشت.:cry: evil_gates 05 شهريور 1389, 11:53اين مثال شما هم سرعتش مثل مثال خودم كمه! خوب step هم كه كمتر از يك نميشه گذاشت برای بالا بردن سرعت مقدار متغیر xline رو +2 یا بیشتر کنید the_king 05 شهريور 1389, 15:04خیلی ساده است، با یه کم کد نویسی مشکل حل میشه. اول باید سرعت سیستم کاربر رو عملا اندازه بگیریم تا مشخص بشه که فرضا یک حلقه For که از اعداد 1 الی 1000 رو طی می کنه در عرض چند ثانیه اجراش تموم میشه. بعد با کمک نتیجه این محاسبه، بازه حلقه For رو طوری مشخص می کنیم که بین هر بار حرکت دادن خط اونقدر مکث ایجاد بشه که مورد نظر ما است. طبیعتا نمی توانیم مقدار بازه را با اعداد ثابت مثل 1000 یا 5000 مشخص کنیم، چون روی هر کامپیوتری سرعت متفاوتی خواهد داشت، پس باید در ابتدای برنامه سرعت کامپیوتر رو اندازه بگیریم و سپس به عنوان یک فاکتور در بازه حلقه ازش استفاده کنیم. به مثال پیوستی مراجعه شود. در زمان اجرای برنامه سرعت حرکت رو به دلخواه از 1000 به هر مقدار دیگه ای تغییر بدید و مقایسه کنید Amit13 06 شهريور 1389, 00:13مرسي the_king جان. خيلي مثاله باحالي بود.:rose: ولي ميشه يكم راجع به اين دستورات كه داخل اسكريپ GetSystemSpeedFactorبيشتر توضيح بديد؟؟؟ stop = 0 Refresh("") ScriptTimer("SetStopValue","200") speedfactor = 0 For wait = 1 To Infinity If (stop <> 0) Then Break() End Refresh("") speedfactor = speedfactor + 1 Next wait speedfactor = speedfactor * 5 the_king 06 شهريور 1389, 14:46مرسي the_king جان. خيلي مثاله باحالي بود.:rose: ولي ميشه يكم راجع به اين دستورات كه داخل اسكريپ GetSystemSpeedFactorبيشتر توضيح بديد؟؟؟ خواهش می کنم، ما بایستی برای ایجاد کردن یک وقفه زمانی کوتاه، یک حلقه For بسازیم که تا یک عدد مشخصی رو بشماره تا وقت تلف بشه، اما اول باید با سنجیدن سرعت کامپیوتر، مقدار اون عدد مشخص رو تعیین کنیم. چون از ابتدا از سرعت کامپیوتر اطلاعی نداریم، مقدار نهایی حلقه رو Infinity در نظر می گیریم یعنی حلقه بی انتها. بعد زمانی که از اجرای این حلقه 200 میلی ثانیه (1/5 ثانیه) گذشت، متوقف اش می کنیم. از روی مقداری که حلقه در عرض اون 200ms طی کرده میشه تشخیص داد که کامپیوتر در هر ثانیه (یا هر واحد زمانی دیگه) چند عدد رو پیمایش می کنه. اینطوری می توانیم با دقت نسبتا خوبی مشخص کنیم که فرضا اگه بخواهیم 50 میلی ثانیه وقفه ایجاد کنیم، چه مقداری رو برای انتهای حلقه در نظر بگیریم. اگه ما مزاحم اجرا شدن این حلقه Infinity نشیم، حلقه متوقف نمیشه، پس یک متغیر به اسم stop را در نظر گرفتم که اگه مقدارش مخالف 0 بود، حلقه اجراش متوقف بشه : stop = 0 . . . If (stop <> 0) Then Break() End ما باید حلقه رو بعد از 200 میلی ثانیه متوقف کنیم، اما چون بصورت مستقیم به تایمر دقیق کامپیوتر دسترسی نداریم، از دستور ScriptTimer استفاده می کنیم که برای اجرا کردن یک Script تایمر داره. کافیه که در داخل اون Script مقدار stop رو به یک عدد غیر از صفر تغییر بدیم تا حلقه ما متوقف بشه. قبل از همه یک دستور Refresh رو هم می نویسیم که اگه عملیات نیمه تمومی از قبل مونده باشه، MMB پیش از راه انداختن اون تایمر انجام بده. Refresh("") ScriptTimer("SetStopValue","200") speedfactor متغیری است که توی حلقه مقدارش زیاد میشه، هر زمانی که حلقه متوقف شد، speedfactor مشخص می کنه که کامپیوتر در عرض 200 میلی ثانیه چند عدد رو توی حلقه می شماره : speedfactor = 0 For wait = 1 To Infinity Refresh("") speedfactor = speedfactor + 1 Next wait واحد count per 200ms واحد بدی نیست، اما ما مقدار speedfactor رو در 5 ضرب می کنیم تا به count per 1s (شمارش در ثانیه) تبدیل بشه : speedfactor = speedfactor * 5 پس الان حدودا مشخص شده که در یک حلقه که داخلش یک دستور Refresh باشه و تا speedfactor رو بشماره، حدود 1 ثانیه وقت تلف می کنه. سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 306]