PDA

View Full Version : سوال: برخورد دو PictureBox با بکدیگر



ha88an
پنج شنبه 14 دی 1391, 16:03 عصر
سلام دوستان
من روی فرم خودم دو تا عکس با PictureBox گذاشتم که اندازهاشون با هم متفاوته، اون ها رو به صورت Random به حرکت درآوردم یعنی این دو تا عکس بعضی وقت ها چپ ، راست ، پایین یا بالا میرن.
میخوام یه کدی بنویسم که هروقت این دو تا عکس با هم برخورد کردند(چه از سمت چپ یا سمت بالا یا سمت پایین یا سمت راست) بیاد یه پیغام با msgbox بده
ممنون

shahryari
پنج شنبه 14 دی 1391, 16:20 عصر
سلام
افقي:
Dim i As Integer = PictureBox1.Location.X + PictureBox1.Width
If PictureBox2.Location.X = i Then
MsgBox("تصوير برخورد كرد")
End If

عمودي:
Dim j As Integer = PictureBox1.Location.Y + PictureBox1.Height
If PictureBox2.Location.Y = j Then
MsgBox("تصوير برخورد كرد")
End If
End Sub

ha88an
پنج شنبه 14 دی 1391, 16:40 عصر
سلام
افقي:
Dim i As Integer = PictureBox1.Location.X + PictureBox1.Width
If PictureBox2.Location.X = i Then
MsgBox("تصوير برخورد كرد")
End If

عمودي:
Dim j As Integer = PictureBox1.Location.Y + PictureBox1.Height
If PictureBox2.Location.Y = j Then
MsgBox("تصوير برخورد كرد")
End If
End Sub
خیلی ممنون دوست عزیز، ولی متاسفانه کار نمیکنه

h_a_m_i_d
پنج شنبه 14 دی 1391, 16:56 عصر
با سلام دوست عزیز یک نمونه خیلی خیلی ساده نوشتم با کلید s تکون میخوره خودت ارتقاش بده امیدوارم کمکت کنه
موفق باشید

ha88an
پنج شنبه 14 دی 1391, 17:00 عصر
با سلام دوست عزیز یک نمونه خیلی خیلی ساده نوشتم با کلید s تکون میخوره خودت ارتقاش بده امیدوارم کمکت کنه
موفق باشید
خیلی ممنون، میشه کدش رو بزارید چون روی سیستم من Microsoft Visual Basic 2008 Express Edition نصبه.

shahryari
پنج شنبه 14 دی 1391, 17:01 عصر
اگر بخواي در همه جهات كاركنه بايد اين شرط را براي همه جهات بكار ببري‌!!!!
من باب مثال اين نمونه را عرض كردم
زماني در كدهاي حالت افقي كار ميكند كه PictureBox1 سمت چپ فرم باشد و PictureBox2 سمت راست
و زماني در كدهاي حالت عمودي كار ميكند كه PictureBox1 سمت بالاي فرم باشد و PictureBox2 سمت پايين
حال شما اگر اين شرايط را رعايت كنيد مطمعنا كار ميكند

h_a_m_i_d
پنج شنبه 14 دی 1391, 17:04 عصر
سلام بفرمایید
Public Class Form1

Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
Label1.Visible = False
End Sub


Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If e.KeyCode = Keys.S Then
PictureBox1.Left -= 20
End If
End Sub

Private Sub PictureBox1_Move(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureBox1.Move
If (PictureBox2.Location.X + PictureBox2.Width) >= PictureBox1.Location.X Then
Label1.Visible = True
End If
End Sub

End Class

h_a_m_i_d
پنج شنبه 14 دی 1391, 17:05 عصر
یک لیبل بذارید و 2 تا پیچر باکس

ha88an
پنج شنبه 14 دی 1391, 17:08 عصر
اگر بخواي در همه جهات كاركنه بايد اين شرط را براي همه جهات بكار ببري‌!!!!
من باب مثال اين نمونه را عرض كردم
زماني در كدهاي حالت افقي كار ميكند كه PictureBox1 سمت چپ فرم باشد و PictureBox2 سمت راست
و زماني در كدهاي حالت عمودي كار ميكند كه PictureBox1 سمت بالاي فرم باشد و PictureBox2 سمت پايين
حال شما اگر اين شرايط را رعايت كنيد مطمعنا كار ميكند

دقیقا مشکل همین جاست که نمیتونم از چهار جهتش رو بنویسم. :گریه:
اگه زحمتی نیست شما از چهار جهتش رو بنویسید :خجالت:

tstsst
پنج شنبه 14 دی 1391, 17:54 عصر
سلام
از باند می تونی استفاده کنی

If PictureBox2.Bounds.IntersectsWith(PictureBox1.Boun ds) Then
Me.Text = "kkk"
Else
Me.Text = "kkkcfgh"
End If

ha88an
پنج شنبه 14 دی 1391, 17:59 عصر
سلام
از باند می تونی استفاده کنی

If PictureBox2.Bounds.IntersectsWith(PictureBox1.Boun ds) Then
Me.Text = "kkk"
Else
Me.Text = "kkkcfgh"
End If

این عالیه فقط موقعی که فرم رو بزرگ می کنی به مشکل بر می خوره، میشه رفعش کرد ؟

tstsst
پنج شنبه 14 دی 1391, 18:08 عصر
به چه مشکلی ؟
هر کنترولی یک مستطیل داره که باندشه این میاد مگه هر موقه این دو باهم برخورد کنن (قسمتی از هردو) مقدار درست بهت میده . حالا این چه تداخلی با فرم داره اصلا به فرم چه ربطی داره ؟
{
مثلا وقتی فرم بزرگ می شه عکس ها هم بزرگ میشن و با هم تداخل ایجادمشه ؟ و پیقام میاد که نباید بیاد؟
اینو با یک شرط میتونی درست کنی
}

ha88an
پنج شنبه 14 دی 1391, 18:17 عصر
به چه مشکلی ؟
هر کنترولی یک مستطیل داره که باندشه این میاد مگه هر موقه این دو باهم برخورد کنن (قسمتی از هردو) مقدار درست بهت میده . حالا این چه تداخلی با فرم داره اصلا به فرم چه ربطی داره ؟
{
مثلا وقتی فرم بزرگ می شه عکس ها هم بزرگ میشن و با هم تداخل ایجادمشه ؟ و پیقام میاد که نباید بیاد؟
اینو با یک شرط میتونی درست کنی
}
من یه پروژه درست کردم، بازی تانک، این کدی که شما گفتی نوشتم خیلی عالی کار میکنه ولی موقعی که در هنگام بازی فرم رو بزرگ میکنم پیغام میاد که شما برنده شدید (یعنی عکس g1 با عکس t2 برخورد کرده) در صورتی که من شلیک انجام ندادم

ha88an
پنج شنبه 14 دی 1391, 18:40 عصر
وقتی یکی از عکس ها به موقعیت 0 و 0 میره و اندازه فرم Max باشه به مشکل بر میخوره

h_a_m_i_d
پنج شنبه 14 دی 1391, 18:45 عصر
خوب دوست عزیز یک متغییر تعریف کن تو جنرال برنامه
بعد هنگام بررسی شرط متغیر هم برسی کن مثلا اگه true بود شرط بررسی شه
بعد هنگام resize فرم اونو برابر false قرار بده و بعد باز بلافاصله وقتی اولین کلید فشرده شد متغیر رو true کن

tstsst
پنج شنبه 14 دی 1391, 18:50 عصر
پروزه شما اجرا نشد ولی دقیقا همه اونا رو تو یک پرژه دیگه شبیه سازی کردم و مشکلی پیش نیومد.
می تونی سایز پروژه رو ثابت کنی که کاربر نتونه بزرگش کنه
-- . --
یا همون طور که آقای h_a_m_i_d (http://barnamenevis.org/member.php?220176-h_a_m_i_d) گفتند با یک شرط مشکل رو حذو کن
یا اگه فقط مشکل اون نقطس بازم با یک شرط اون نقطه رو محاسبه نکن.