PDA

View Full Version : حرکت دایره



green_pm
شنبه 07 فروردین 1389, 21:12 عصر
سلام
من میخوام توی برنامم به یک شی از نوع circle حر کت بدم.چطوری این کارو انجام بدم؟

teardrop
شنبه 07 فروردین 1389, 21:22 عصر
داخل يك تايمر كدها را بذار و مختصات رو مثلا با مقدار قبلي جمع كن و بايد هر بار هم فرم را پاك كن(قبل از رسم).


Graphics ph;
ph=PictureBox1.CreateGraphics();
ph.Clear(Color.Black);

sd.CSharpProgrammer
شنبه 07 فروردین 1389, 22:14 عصر
سلام
من میخوام توی برنامم به یک شی از نوع circle حر کت بدم.چطوری این کارو انجام بدم؟

سلام

دوست عزیز منظورت چه نوع حرکتیه؟ اگه میخوای با تایمر حرکتش بدی همین روشی که دوستمون عرض کرده خوبه. البته ناگفته نماند که این روش یه اشکال کوچیک داره و اون هم اینه که اگه بخوای پس زمینه دایره transparent باشه نمیتونی از این روش استفاده کنی. چون با فرستان Color.Trasparent به متد Clear پس زمینه رو مشکی پاک میکنه نه transparent!!!

بنظر بنده بهترین روش اینه که یه usercontrol به پروژه اضافه کنی و تو زمان اجرا دایره رو روی یک bitmap رسم کنی و اون بیتمپ رو بذاری به عنوان عکس پس زمینه usercontrol و اونوقت براحتی چه با ماوس یا چه با تایمر میتونی حرکتش بدی.

اگرم میخوای با ماوس حرکت کنه بنظر من بهترین و بی دردسر ترین روش استفاده از توابع api هست. برای اینکار هم به قسمت 1001 نکته در سی شارپ مراجعه کن اونجا توابع جابجایی اشیاء رو نوشته (البته برای فرم ولی میتونی روی usercontrol هم پیادش کنی).

موفق و پیروز باشی

green_pm
دوشنبه 09 فروردین 1389, 17:59 عصر
چرا باید از user Control استفاده کنم؟

sd.CSharpProgrammer
دوشنبه 09 فروردین 1389, 21:10 عصر
چرا باید از user Control استفاده کنم؟

چون دیگه مجبور نمیشی تو هر بار حرکت دایره رو دوباره رو فرم رسم کنی. اگه از usercontrol استفاده کنی کافیه فقط یکبار دایره رو رسم کنی و بعد هر کجا و به هر روشی که خواستی حرکتش بدی

green_pm
جمعه 03 اردیبهشت 1389, 11:05 صبح
سلام
من با استفاده از یک userControl دایره را براساس متد thick تایمر حرکت دادم.
الان مشکلم اینه که چطوری باید بافر را پاک کنم؟
چون هر بار که دایره حرکت میکنه ،و دایره جدید در نقطه ی جدید اجاد میشه ،قبلی از بین نمیره.


private void timer1_Tick(object sender, EventArgs e)
{

x += 10;
if (x > 605)
x = -90;
draw(x, y);

}

exlord
جمعه 03 اردیبهشت 1389, 11:42 صبح
Graphics g;
Pen p = new Pen(Color.Black);
int x = 10;
int y = 10;
int w = 20;
int h = 20;
bool draging = false;
private void Form3_Paint(object sender, PaintEventArgs e)
{
g = this.CreateGraphics();
g.DrawEllipse(p, x, y, 20, 20);
}

private void Form3_MouseDown(object sender, MouseEventArgs e)
{
if (e.X > x && e.Y > y && e.X < x + w && e.Y < y + h)
{
draging = true;
}
}

private void Form3_MouseMove(object sender, MouseEventArgs e)
{
if (draging)
{
x = e.X - (w/2);
y = e.Y - (h/2);
this.Invalidate();
}
}

private void Form3_MouseUp(object sender, MouseEventArgs e)
{
draging = false;
}

green_pm
جمعه 03 اردیبهشت 1389, 12:52 عصر
ممنون
ولی منظور من این نبود.یعنی راهی برای پاک کردن بافر نداریم؟

saman_itc
یک شنبه 07 آذر 1389, 06:43 صبح
دوستان سورس این برنامه رو دارن؟
حرکت دایره در فرم

saman_itc
یک شنبه 07 آذر 1389, 16:57 عصر
دوستان من تازه C# شروع کردم.اگه امکانش هست سورس upload کنید تا کمتر مشکل داشته باشم

chasbonakam
یک شنبه 07 آذر 1389, 17:04 عصر
سلام
این هم سورس حرکت دایره با کلاس

البته برخورد دایره با لبه ها رو هم تشخیص میده