المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : الدرس الثاني : كشف التصادم



PRG of RPG
03-12-2002, 08:22 AM
بسم الله الرحمن الرحيم....

نبدأ الموضوع الثاني من برمجة الالعاب : التصادم(Collision) بالبرمجة وليست crash :) ....

ملاحظة / لن تستفيد شي من الدروس اذا لم تتعلم لغة البيسك ....خذها مني...اذا تبي تتعلم اللغة فيه كتاب في السوق اسمه "فيجوال بيسك 6 للمبتدأيين" اصدار مكتبة جرير ... انا قرأت الكتاب في 3 ايام وسويت برامج ماكنت اتوقعها :)

قبل ذلك .... يجب دراسة الدرس السابق(التحريك) للأننا سوف نكمل من اخر درس فيه....

ماهو التصادم :
بإختصار عند مرور الشخصية أمام الجدار هل تريدها ان تخترق هذا الجدار ام تقف ؟
كيف يعرف الكمبيوتر أن هنالك جدار ولا يجب أن تخترقه ؟

المثال الاخير في التحريك كان يتحدث عن تحريك شخصية ماريو كما في الشكل التالي :


http://www.arab3.com/upload/images/Dec02/game_maker_1.jpg

وعند التصادم سنضع جدارين لذلك وسيكون الشكل كالتالي :


http://www.arab3.com/upload/images/Dec02/game_maker_2.jpg

نلاحظ وجود جدارين الاول wall1 على اليسار والاخر wall2 على اليمين .

اولا : الجدار wall1

الان كيف اعرف أن الشخصية تصادمت مع هذا الجدار ...

اولا الجدار ثابت والشخصية متحركة . واذا كان اخر نقطة في الجدار احداثيها السيني اكبر من اول نقطة في الشخصية اذن حدث تصادم.
بصيغة اخرى : اذا كان يمين الجدار احداثيه السيني اكبر من يسار الصورة ...هنالك تصادم.
ولاكن كيف اعرف يمين الصورة ففجوال بيسك لا يقدم سوى اليسار(left) ...وذلك بإستخدام :


picture2.left + picture2.width

اليس عرض الصورة + left = اليمين :)

اذن


If (Picture2.Left + Picture2.Width) >= Picture1.Left Then .....there is Collision

---------
وبنفس الطريقه wall2 ... ولكن wall2 يقع يميناً ... فنقول :


If (Picture1.Left + Picture1.Width) >= Picture3.Left Then .....there is Collision


__________________________________
والان نكمل مثال التحريك لكي يشمل التصادم :
افتح مثال تحريك 1-7 :
الكود الذي لديك شكله كالتالي :


Private Sub Form_Load()
Call Init
Picture1.Picture = LoadPicture(c)
End Sub

Private Sub Picture1_KeyDown(KeyCode As Integer, Shift As Integer)
Static step As Integer

Select Case KeyCode
Case 39
Picture1.Left = Picture1.Left + 50
If step = 0 Then
step = 1
Picture1.Picture = LoadPicture(c)
ElseIf step = 1 Then
step = 0
Picture1.Picture = LoadPicture(d)
End If
Case 37
Picture1.Left = Picture1.Left - 50
If step = 0 Then
step = 1
Picture1.Picture = LoadPicture(a)
ElseIf step = 1 Then
step = 0
Picture1.Picture = LoadPicture(b)
End If
End Select
Text1.Text = step
End Sub


سنعرف الان متغيرين من نوع Boolean في مكان المتغيرات العامة General ...وذلك لاننا سنستخدمهما في فروع البرنامج المختلفة....الاول اسمه wall1 والاخر wall2 كالتالي :


Dim wall1 As Boolean
Dim wall2 As Boolean


نضيف دالة اسمها Collision ونضع فيها :


Private Sub Collision()
If (Picture2.Left + Picture2.Width) >= Picture1.Left Then wall1 = True Else wall1 = False
If (Picture1.Left + Picture1.Width) >= Picture3.Left Then wall2 = True Else wall2 = False
End Sub

فإذا كان هنالك تصادم في الجدار الاول فليس هنالك تصادم في الجدار الاخر والعكس صحيح ... ايعقل ان ماريو يتصادم مع الجدارين معاً .... لماذا نفعل ذلك ؟ ... لان ماريو عندما يصطدم مع الجدار الايسر (wall1) سيكون wall1 = true ... وعندما يذهب يميناً سيستمر wall1 =true ولن تستطيع التحرك يساراً... اذا لمم تتضح الفكره حاول انشاء تصادم بنفسك وهنا الفائدة الحقيقية من الدرس .

نحن لم نضع حتى الان شرط يوقف تحرك الشخصية :
فنضع اذا كان wall1 = false ... تتحرك الشخصية يساراً واذا كان wall1 =true فلا تتحرك الشخصية ... نف الشي مع wall2



Private Sub Picture1_KeyDown(KeyCode As Integer, Shift As Integer)
Static step As Integer
Call Collision
Select Case KeyCode
Case 39
If wall2 = False Then
Picture1.Left = Picture1.Left + 50
If step = 0 Then
step = 1
Picture1.Picture = LoadPicture(c)
ElseIf step = 1 Then
step = 0
Picture1.Picture = LoadPicture(d)
End If
End If
Case 37
If wall1 = False Then
Picture1.Left = Picture1.Left - 50
If step = 0 Then
step = 1
Picture1.Picture = LoadPicture(a)
ElseIf step = 1 Then
step = 0
Picture1.Picture = LoadPicture(b)
End If
End If
End Select

Text1.Text = step
End Sub


هذا هو مبدأ التصادم ...
تخيل ان تصمم تصادم لصخره غير منتظمة الشكل للعبة ثلاثية الابعاد ... ستواجهك مشااااااااكل كبيرة وانا اعني (كبيره) لتلك الحالات .....

سأرفق ملف به جميع الدروس حتى هذه اللحظة .

من يريد أن يسأل عن التصادم فلقد انتهينا منه تقريباً ... يضعه هنا ... والموضوع القادم سيتحدث عن "اشكال جميلة" .......


تحياتي :)

Mr. Black Man
03-12-2002, 11:01 AM
ما شاء الله عليك موضوع مميز و درس أكثر من رائع و إن شاء الله لك مستقبل في مجال البرمجة ;)

PRG of RPG
04-12-2002, 08:29 AM
السلام عليكم....

شكراً لك :) ... واتمني ان يكون مفيداً

هذه مجرد امثله وهي في البرمجة وليست في التصميم...لذلك لا تدقق واجد :)

تحياتي:)

RPG
06-12-2002, 10:19 PM
مشكور على الدرس و الحمدلله ما عندي اسئلة لان شرحك بسيط و يغطي كل شي و لا يترك مجال للاسئلة، كمل للدرس الثالث :)

و كل عام و انت بخير

PRG of RPG
07-12-2002, 10:42 AM
السلام عليكم...


لان شرحك بسيط و يغطي كل شي و لا يترك مجال للاسئلة

هذا اللي انا احاول الوصول اليه :) ........ شكراً

soulsord
08-02-2003, 11:43 AM
تعلم لغه الفيجوال بيسك فى 3 ايام ....اليس فى الامر مبالغه بعض الشى:!




والا ترى ان استخدام برنامج 3d game studio لتصميم الاالعاب


هو الحل لمن يريد الابتعاد عن لغه الحسابات المزعجه......




حيث يعمل البرنامج على تحويل الحركات المرئيه لاحداث اللعبه


االى لغه جافا اتوماتيكيا.

PRG of RPG
08-02-2003, 09:53 PM
السلام عليكم...

والا ترى ان استخدام هذه البرامج ليس له مستقبل الا في الاخراج والاخراج فقط .

والا ترى ان اسخدام هذه البرامج يفرض عليك قيود انت في غنى عنها

والا ترى انك في النهاية لست تصنع لعبة وانما تجمع لعبة

............ نعم البرمجة تحتاج تفكيراً ولكنها ممتعة بالنسبة لي :

اخوي تعلمك لغة برمجة يعطيك قوة لا تتخيلها فتستطيع عمل ما تريده

_____

اما بالنسبة لـ


تعلم لغه الفيجوال بيسك فى 3 ايام ....اليس فى الامر مبالغه بعض الشى

كنت اعتقد ان هذه المقولة ستشجعك على التعلم ولكن ...

اخي الكتاب الذي تعلمت منه اسمه "فيجوال بيسك 6 للمبتدأين" اصدار مكتبة جرير ، يحتوي على 600 صفحة في ثلاثة أيام أي 200 صفحة في اليوم .

فلنفرض أنني أقرأ 12 ساعة في اليوم (وهذا الذي حصل) فالنتيجة ستكون 3.6 دقيقة / صفحة

فلنجعلها 3 دقائق فقط فال(0.6) والذي يساوي 0.6 * 200 = ساعتين (وقت ضائع)

السؤال / هل تستطيع قرائة صفحة في 3 دقائق ؟؟؟