PDA

View Full Version : گرافیک سی شارپ!!



persianlove
پنج شنبه 26 آذر 1388, 18:54 عصر
سلام دوستان من در گرافیک سی شارپ برنامه ای نوشتم که نیاز به تایمر دارد ولی کار نمیکنه!
یک 4 راه هست که یک چراغ راهنما هست که که باید هر چند ثانیه خاموش بشه حالا من اینو توی فرم لود و رویداد تیک تایمر نوشتم بعد از گذشت 2 ثانیه هیچ اتفاقی نمیفته و اخر کار چراغها خاموش میشه.
من پرس و جو که کردم گفتن باید این تایمر تو رویداد onpaint نوشته بشه
یعنی تمام کدها اجرا میشه و آخر کار یکی از چراغها خاموش میشه.....در صورتیکه باید در onpaint نوشته بشه که همزمان تایمر هم اجرا بشه...
ولی نمیدونم چون زیاد وارد نیستم میشه کمک کنین؟
میشه تایمر رو توی onpaint صدا زد؟
در کل راه دیگه ای به جز تایمر واسه این برنامه وجود داره یا نه؟
من این درخواستو توی تاپیک کار با تایمر هم زدم:لبخند:

Rejnev
پنج شنبه 26 آذر 1388, 20:53 عصر
سلام
تایمر برای کار شما مناسبه.
با یک تایمر میتونید تمامی کارهای مورد نیازتون رو انجام بدید.و نیازی به thread.sleep نیست.
برای رسم قسمت های مختلف
اولا سعی کنید برنامه شیئ گرا باشه.
مثلا چراغ خطر یک شیئ با سه وضعیت قرمز و زرد و سبز به عنوان خصوصیت و یک متد برای رسم اون روی تصویر
و یا ماشین یک شیئ با یک مختصات به عنوان خصوصیت و یک متد رسم.و خیابان و ...
تایمر میتونه مثلا سر ساعت وضعیت چراغ قرمز رو تغییر بده. یا ماشین رو حرکت بده.و همینطور میتونه متد رسم اشیا رو فراخوانی کنه.
سعی کنید اشیائی که ثابت هستند و به کرّات استفاده میشن رو به صورت سراسری تعریف کنید.
توصیه میکنم برنامه رو از ابتدا و با طراحی حساب شده پیاده سازی کنید.

persianlove
پنج شنبه 26 آذر 1388, 21:03 عصر
سلام
تایمر برای کار شما مناسبه.
با یک تایمر میتونید تمامی کارهای مورد نیازتون رو انجام بدید.و نیازی به thread.sleep نیست.
برای رسم قسمت های مختلف
اولا سعی کنید برنامه شیئ گرا باشه.
مثلا چراغ خطر یک شیئ با سه وضعیت قرمز و زرد و سبز به عنوان خصوصیت و یک متد برای رسم اون روی تصویر
و یا ماشین یک شیئ با یک مختصات به عنوان خصوصیت و یک متد رسم.و خیابان و ...
تایمر میتونه مثلا سر ساعت وضعیت چراغ قرمز رو تغییر بده. یا ماشین رو حرکت بده.و همینطور میتونه متد رسم اشیا رو فراخوانی کنه.
سعی کنید اشیائی که ثابت هستند و به کرّات استفاده میشن رو به صورت سراسری تعریف کنید.
توصیه میکنم برنامه رو از ابتدا و با طراحی حساب شده پیاده سازی کنید.
ممنون بابت راهنمایی...اول اینکه من با سی شارپ تا حالا کار نکردم و تسلط کافی ندارم.
دوم اینکه من میخوام بدونم چرا تایمر کار نمیکنه ؟مثلا بعد از 2 ثانیه هیچ اتفاقی نمیفته و من نمیدونم چطوری باید تایمر رو توی تابع on paint تعریف کنم.

persianlove
جمعه 27 آذر 1388, 17:52 عصر
واقعا کسی نیست کمک کنه ؟
فکر نمیکنم اینقدر مشکل باشه در برابر سوالای دیگر دوستان........

Rejnev
جمعه 27 آذر 1388, 21:59 عصر
علت کار نکردن تایمر Thread.sleep هست
وقتی شما توی حلقه for دستور (100)sleep رو میزنید یعنی سیستم به مدت 100 میلی ثانیه کاری با برنامه انجام نده و از اونجایی که وقتی برنامه در حلقه میفته هیچ دستور دیگه ای اجرا نمیشه وقفه تایمر به تعویق میفته.
لطفا برنامه رو مجددا بنویسید. چون اون کار شمارو راه نمیندازه

persianlove
جمعه 27 آذر 1388, 22:59 عصر
علت کار نکردن تایمر Thread.sleep هست
وقتی شما توی حلقه for دستور (100)sleep رو میزنید یعنی سیستم به مدت 100 میلی ثانیه کاری با برنامه انجام نده و از اونجایی که وقتی برنامه در حلقه میفته هیچ دستور دیگه ای اجرا نمیشه وقفه تایمر به تعویق میفته.
لطفا برنامه رو مجددا بنویسید. چون اون کار شمارو راه نمیندازه

ممنون...کاملا درسته اونا رو از کار انداختم و تایمر کار کرد بعد از 2 ثانیه.
پس من چطوری باید اون مستطیلها که حکم ماشین رو دارن حرکت بدم بدون thread.sleep
لطفا در این زمینه هم راهنمایی کنید دیگه حله بازم مرسی.

Rejnev
شنبه 28 آذر 1388, 00:18 صبح
کلاک تایمر رو روی مثلا 50 تنظیم کنید
با هر بار کلاک مستطیل رو حرکت بدین. و از اونجایی که میخواین چراغ دوثانیه یکبار عوض بشه باید یا یک متغیر سراسری تعریف و با هر پالس متغیر رو یکی اضافه کنید و با یک شرط بررسی کنید که اگر مثلا متغیر سراسری به 400 رسید اولا چراغ تغییر رنگ بده و ثانیا متغیر صفر بشه.




int a=0;
timer1_clock(...)
{
a++;
if(a>=400)
{
a=0;
change red light...
}
}

persianlove
شنبه 28 آذر 1388, 17:13 عصر
خیلی ممنون...timer_clock چیه؟ رویداد که نیست چون فقط رویداد tick تایمر وجود داره!

Rejnev
شنبه 28 آذر 1388, 20:46 عصر
منظورم خصوصیت Interval مربوط به تایمر هست.

persianlove
شنبه 28 آذر 1388, 21:38 عصر
خب این تکه کدی که گذاشتی توی فرم لود بنویسم یا تو رویداد تایمر؟:خجالت:

Rejnev
شنبه 28 آذر 1388, 22:25 عصر
int a=0 سراسریه و در هیچ رویدادی نیست و منظور از timer_clock() هم همون رویداد تایمره