النتائج 1 إلى 7 من 7

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

  1. #1
    التسجيل
    28-10-2002
    الدولة
    (السعودية)
    المشاركات
    1,042

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

    بسم الله الرحمن الرحيم....

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

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

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

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

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




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




    نلاحظ وجود جدارين الاول 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
    هذا هو مبدأ التصادم ...
    تخيل ان تصمم تصادم لصخره غير منتظمة الشكل للعبة ثلاثية الابعاد ... ستواجهك مشااااااااكل كبيرة وانا اعني (كبيره) لتلك الحالات .....

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

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


    تحياتي
    الملفات المرفقة الملفات المرفقة
    كود:
    Arabian Xtreme Designs : http://axdteam.com

  2. #2
    ما شاء الله عليك موضوع مميز و درس أكثر من رائع و إن شاء الله لك مستقبل في مجال البرمجة
    التعديل الأخير تم بواسطة Mr. Black Man ; 07-12-2002 الساعة 09:34 AM

  3. #3
    التسجيل
    28-10-2002
    الدولة
    (السعودية)
    المشاركات
    1,042
    السلام عليكم....

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

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

    تحياتي
    كود:
    Arabian Xtreme Designs : http://axdteam.com

  4. #4
    التسجيل
    29-11-2001
    الدولة
    Beyond Dreams
    المشاركات
    1,001
    مشكور على الدرس و الحمدلله ما عندي اسئلة لان شرحك بسيط و يغطي كل شي و لا يترك مجال للاسئلة، كمل للدرس الثالث

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

  5. #5
    التسجيل
    28-10-2002
    الدولة
    (السعودية)
    المشاركات
    1,042
    السلام عليكم...

    لان شرحك بسيط و يغطي كل شي و لا يترك مجال للاسئلة
    هذا اللي انا احاول الوصول اليه ........ شكراً
    كود:
    Arabian Xtreme Designs : http://axdteam.com

  6. #6
    التسجيل
    01-01-2003
    المشاركات
    33
    تعلم لغه الفيجوال بيسك فى 3 ايام ....اليس فى الامر مبالغه بعض الشى:!




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


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




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


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
















    التعديل الأخير تم بواسطة soulsord ; 08-02-2003 الساعة 12:14 PM

  7. #7
    التسجيل
    28-10-2002
    الدولة
    (السعودية)
    المشاركات
    1,042
    السلام عليكم...

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

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

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

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

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

    _____

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

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

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

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

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

    السؤال / هل تستطيع قرائة صفحة في 3 دقائق ؟؟؟
    كود:
    Arabian Xtreme Designs : http://axdteam.com

ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •