PDA

View Full Version : حرکت شی دایره فقط داخل فرم



morteza76
پنج شنبه 15 اسفند 1392, 18:52 عصر
سلام من با تایمر یک دایره رو به حرکت در آوردم میخوام یک راه حلی پیشنهاد کنید بتونم کاری کنم که شی نتونه از فرم بزنه بیرون و هر بار که به لبه های فرم برخورد میکنه با یک زاویه تصادفی تغییر لوکیشن بده چیکار کنم؟ و به یک طرفه دیگه حرکت کنه

erfan_urchin
پنج شنبه 15 اسفند 1392, 20:58 عصر
به نظر من مختصات دایره رو روی فرم به دست بیار و کدی بنویس که هر دفه دایره به مختصاتی از فرم رسید که X یا Y اون صفر شد دایره دوباره برگرده

forodo
پنج شنبه 15 اسفند 1392, 21:51 عصر
سلام
ببینید این می تونه کمک کنه. البته این برای متن هستش. (http://barnamenevis.org/showthread.php?64210-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%AF%D8%B1-%D8%B3%D9%8A-%D8%B4%D8%A7%D8%B1%D9%BE&p=1964979&viewfull=1#post1964979)

rahnema1
پنج شنبه 15 اسفند 1392, 23:48 عصر
سلام، شاید این به درد بخوره اگه اشکال داشت بگید

float dx1;
float dy1;
float dxy;
System.Drawing.PointF pp;
Graphics gg;
Brush br;
RectangleF rect;
Random rr;
public void MainFormLoad(object sender, EventArgs e)
{
rr= new Random();
gg = this.CreateGraphics();
br= new SolidBrush(Color.Red);
rect=new RectangleF(rr.Next(0,this.DisplayRectangle.Width-50),rr.Next(0,this.DisplayRectangle.Height-50),50,50);
pp = rect.Location;
dxy=2;
dx1 = (float)Math.Cos(Math.PI/2*rr.NextDouble())*dxy*Math.Sign(rr.NextDouble()-.5);
dy1 = (float)Math.Sqrt(dxy*dxy-dx1*dx1)*Math.Sign(rr.NextDouble()-.5);
timer1.Start();
}

public void Timer1Tick(object sender, EventArgs e)
{
pp.X += dx1;
pp.Y += dy1;
if (pp.X < 0 | pp.X > (this.DisplayRectangle.Width - rect.Width)) {
dx1 = Math.Sign(dx1)*Math.Abs((float)Math.Cos(Math.PI/2*rr.NextDouble())*dxy);
dy1 = (float)Math.Sqrt(dxy*dxy-dx1*dx1)*Math.Sign(rr.NextDouble()-.5);
pp.X -= dx1;
pp.Y += dy1;
dx1 = -dx1;
}
if (pp.Y < 0 | pp.Y > (this.DisplayRectangle.Height - rect.Height)) {
dy1 = Math.Sign(dy1)*Math.Abs((float)Math.Cos(Math.PI/2*rr.NextDouble())*dxy);
dx1 = (float)Math.Sqrt(dxy*dxy-dy1*dy1)*Math.Sign(rr.NextDouble()-.5);
pp.Y -= dy1;
pp.X += dx1;
dy1 = -dy1;
}
rect.Location=pp;
gg.Clear(Color.FromKnownColor(KnownColor.Control)) ;
gg.FillEllipse(br,rect);
this.Text = pp.X.ToString();
}

morteza76
جمعه 16 اسفند 1392, 10:32 صبح
سلام آقای rahnema1 (http://barnamenevis.org/member.php?305905-rahnema1) من از کداتون استفاده کردم اگه زحمت نمیشه توضیح این کداتون رو برام بفرستید خیلی ممنون میشم .

rahnema1
جمعه 16 اسفند 1392, 18:48 عصر
این توضیحات به صورت اسلاید
http://mihanbit.com/download/5319ea5a3182a/toop_21.png