PDA

View Full Version : برخورد 2 تا عکس گرد به هم؟



dada_shi
پنج شنبه 28 مرداد 1389, 17:09 عصر
سلام
دوستان من 2 تا عکس دایره دارم و میخوام وقتی این دو با هم برخورد کردن یک پیغامی داده شه.
مشکلم اینجاست که برای برخورد خود دایره رو در نظر نمیگیره ، بلکه picture.box رو در نظر میگیره.یعنی زودتر پیغام میده.حالا چطور میشه تعریف کرد که خود عکس رو در نظر بگیره؟

مهدی فرزاد
پنج شنبه 28 مرداد 1389, 17:25 عصر
سلام
دوستان من 2 تا عکس دایره دارم و میخوام وقتی این دو با هم برخورد کردن یک پیغامی داده شه.
مشکلم اینجاست که برای برخورد خود دایره رو در نظر نمیگیره ، بلکه picture.box رو در نظر میگیره.یعنی زودتر پیغام میده.حالا چطور میشه تعریف کرد که خود عکس رو در نظر بگیره؟

راهی که به ذهن من میرسه اینه که ببین دایره ها چقدر داخل تر هستند بعد بگو مثلا وقتی Picturebox ها به همون اندازه از هم رد شدن پیغام بده

راه ساده تر اینکه توی فتوشاب فضای خالی اطراف دایره هار و پاک کن انوقت دایره ها به کنار Picturebox میچسبه
البته اینها فقط پیشنهاده

حجتی نیا
پنج شنبه 28 مرداد 1389, 18:27 عصر
سلام
دوستان من 2 تا عکس دایره دارم و میخوام وقتی این دو با هم برخورد کردن یک پیغامی داده شه.
مشکلم اینجاست که برای برخورد خود دایره رو در نظر نمیگیره ، بلکه picture.box رو در نظر میگیره.یعنی زودتر پیغام میده.حالا چطور میشه تعریف کرد که خود عکس رو در نظر بگیره؟
عکس رو داخلش stretch کن.. به کناره ها میچسبه

dada_shi
پنج شنبه 28 مرداد 1389, 18:42 عصر
راهی که به ذهن من میرسه اینه که ببین دایره ها چقدر داخل تر هستند بعد بگو مثلا وقتی Picturebox ها به همون اندازه از هم رد شدن پیغام بده

راه ساده تر اینکه توی فتوشاب فضای خالی اطراف دایره هار و پاک کن انوقت دایره ها به کنار Picturebox میچسبه
البته اینها فقط پیشنهاده

اطراف دایره ها رو پاک کردم ولی بازم خود پیکچرباکس رو در نظر میگیره.

مهدی فرزاد
پنج شنبه 28 مرداد 1389, 21:53 عصر
اطراف دایره ها رو پاک کردم ولی بازم خود پیکچرباکس رو در نظر میگیره.

همونطور که دوستمون گفتن حالا باید pictureBox روی حالت stretch بگذاری که عکس کاملا به لبها بچسبه درشمن دقت کن وقتی توی فتوشاپ عکس روپاک میکنی باید لبه داره با لبه کادر عکس دقبقا موماس باشه و فضای خالی بین دایره و کادر عکس نباشه(از ابزار Crop Tool در فتوشاپ استفاده کن که کاملا فضای خالی اطراف داره از بین بره بعد pictureBox روی حالت stretch بگذار)

sinashahab
جمعه 29 مرداد 1389, 00:05 صبح
نه به نظرم دوست عزیزمون راست میگه .

راستی این stretch برای همه ی اشکال به کار میره ؟ یعنی اگه شکلم کج و حوله بود و picturebox هم در حالت stretch کنم باید لبه ها رو بر داره ؟؟ یعنی دیگه پیکچر باکس محیط دورش رو شامل نمیشه ؟؟

اگه اینطوره پس چرا برای من نمیشه ؟؟ شاید توی wpf فقط این خاصیت هست ؟

Nice Ro$e
جمعه 29 مرداد 1389, 03:15 صبح
ببخشيد ميشه كلاس ِ برخورد ِ دو تا PicturBox رو هم بنويسيد و درباره چك كردن وضعيت هاي مختلف ِ برخوردشون هم توضيح بديد؟
مرسي

dada_shi
جمعه 29 مرداد 1389, 05:33 صبح
قربونت برم اگر عکس رو stretch کنم که شکلم از حالت اصلی خارج میشه.شما در نظر بگیر شکل اول یک توپ فوتبال باشه و شکل دوم دروازه.حالا تعریف کنیم که اگر فقط مقداری از توپ از خط رد شد پیغام بده.مشکل همینه که توپ رو در نظر نمیگیره، کل پیکچرباکس رو در نظر میگیره.یا مثالهای دیگه مثل بازیه هواپیما.میخوایم تعریف کنیم که اگر خود هواپیما به مانع برخورد کرد پیغام بده.حالا فضای خالی بین بال و نوک هواپیما رو هم پیغام میده.چه باید کرد؟

مهدی فرزاد
شنبه 30 مرداد 1389, 08:14 صبح
قربونت برم اگر عکس رو stretch کنم که شکلم از حالت اصلی خارج میشه.

درمورد تغيير حالت عكس خوب بايد سايز PictureBox رو جوري تنظيم كني كه عكست دفوره نشه


حالا فضای خالی بین بال و نوک هواپیما رو هم پیغام میده.چه باید کرد؟

براي اين مسئله قضيه فرق ميكنه.به نظر من شما بايد با كد نويسي تصوير مورد نظر رو ايجاد كنيد تا بتونيد روي پيكسل پيكسل اون كنترل داشته باشيد

در تكنولوژي WPF اين مسئله ساده تر امكان پذيره براي خلق چنين برنامه هايي من WPF رو توصيه ميكنم

مهدی فرزاد
شنبه 30 مرداد 1389, 08:18 صبح
نه به نظرم دوست عزیزمون راست میگه .

راستی این stretch برای همه ی اشکال به کار میره ؟ یعنی اگه شکلم کج و حوله بود و picturebox هم در حالت stretch کنم باید لبه ها رو بر داره ؟؟ یعنی دیگه پیکچر باکس محیط دورش رو شامل نمیشه ؟؟

اگه اینطوره پس چرا برای من نمیشه ؟؟ شاید توی wpf فقط این خاصیت هست ؟

سلام
من نگقتم همه لبه ها رو در بر ميگره لبه هايي كه بيرون تر هستم به كنار PictureBox ميچسبن.

مهدی فرزاد
شنبه 30 مرداد 1389, 08:19 صبح
نه به نظرم دوست عزیزمون راست میگه .

راستی این stretch برای همه ی اشکال به کار میره ؟ یعنی اگه شکلم کج و حوله بود و picturebox هم در حالت stretch کنم باید لبه ها رو بر داره ؟؟ یعنی دیگه پیکچر باکس محیط دورش رو شامل نمیشه ؟؟

اگه اینطوره پس چرا برای من نمیشه ؟؟ شاید توی wpf فقط این خاصیت هست ؟

سلام
نه من نگفتم همه لبه ها رو در بر ميگره ، فقط لبه هايي كه بيرون تر هستن به PictureBox ميچسبن.

rezamansori
شنبه 30 مرداد 1389, 08:53 صبح
دوست عزیز شما وقتی اطراف دایره ها رو پاک کردی باید با فرمت png ذخیرش کنی تا حالت ترنس پرنسیش رو از دست نده.
راستی من یه بازی ساختم که یه توپه بعد میره اجر ها رو میزنه و از پیکچر باکی برای آجر ها استفاده کردم اما توب با توابع گرافیکی روی فرم رسم میشه.
می تونی بجای دوتا پیکچر باکس از توابع گرافیکی استفاده کنی.

Nice Ro$e
یک شنبه 31 مرداد 1389, 06:48 صبح
سلام ، من براي برخورد دو تا عكس ِ حباب كه توي دو تا PictureBox گذاشتمشون يه چنين كدي رو دارم :
تابع crash كه همون تابع ِ برخورد دو تا PictureBox هست به صورت زير هست :


bool crash(PictureBox p1,PictureBox p2)
{
int p1x = p1.Location.X,p2x = p2.Location.X;
int p1y = p1.Location.Y, p2y = p2.Location.Y;
if (((p1x>=p2x)&&(p1x<=p2x+p2.Width))&&((p1y>=p2y)&&(p2y<=p2y+p2.Height)))
{
returntrue;
}
else
{
returnfalse;
}

}


و كل برنامه هم اينطوريه :


publicpartialclassForm5 : Form
{
enumDirection
{
right,left
}
Direction d1 = Direction.right;
Direction d2 = Direction.left;
bool crash(PictureBox p1,PictureBox p2)
{
int p1x = p1.Location.X,p2x = p2.Location.X;
int p1y = p1.Location.Y, p2y = p2.Location.Y;
if (((p1x>=p2x)&&(p1x<=p2x+p2.Width))&&((p1y>=p2y)&&(p2y<=p2y+p2.Height)))
{
returntrue;
}
else
{
returnfalse;
}

}
public Form5()
{
InitializeComponent();
}
privatevoid timer1_Tick(object sender, EventArgs e)
{
PictureBox p1=pictureBox1;
PictureBox p2=pictureBox2;
switch (d1)
{
caseDirection.right:
if (crash(p1,p2)==false && crash(p2,p1)==false)
{
p1.Location = newPoint(p1.Location.X+1,p1.Location.Y);
}
else
{
d1 = Direction.left;
}
break;
caseDirection.left:
if (p1.Location.X >= 0)
{
p1.Location = newPoint(p1.Location.X - 1, p1.Location.Y);
}
else
{
d1 = Direction.right;
}
break;
}
}
privatevoid timer2_Tick(object sender, EventArgs e)
{
PictureBox p1 = pictureBox1;
PictureBox p2 = pictureBox2;
switch (d2)
{
caseDirection.left:
if (crash(p1, p2) == false && crash(p2, p1) == false)
{
p2.Location = newPoint(p2.Location.X - 1, p2.Location.Y);
}
else
{
d2 = Direction.right;
}
break;
caseDirection.right:
if (p2.Location.X+p2.Width<this.Width-6)
{
p2.Location = newPoint(p2.Location.X+1,p2.Location.Y);
}
else
{
d2 = Direction.left;
}
break;
}
}
privatevoid button1_Click(object sender, EventArgs e)
{
timer1.Start();
timer2.Start();
}
privatevoid button2_Click(object sender, EventArgs e)
{
timer1.Stop();
timer2.Stop();
}
}

فرم هم كه اينه :
http://up.iranblog.com/Files2/c37ed1fbdaec4f45941b.jpg
برنامه جواب ميده ولي من نميدونم اين تابع crash كه يه سري شرط براي برخورد دو تا PictureBox گذاشته ، اين شرط ها بر چه اساسي هست؟
و در ضمن اين تابع فقط براي يك ضلع (يا يك راس) از PictureBox نوشته شده ، و نياز هست كه براي سه راس ديگه ي PictureBox هم كد نوشته بشه
ميشه بگيد بر چه اساسي هست اين كدها؟