موضوع: مساعده برمجيه في محرك xna

ردود: 5 | زيارات: 462
  1. #1
    عضو نشيط
    صور رمزية kimoz
    تاريخ التسجيل
    Jan 2010
    المنطقة
    syria
    ردود
    604

    مساعده برمجيه في محرك xna

    السلام عليكم
    واجهتني مشكله في محرك XNA ومحتاج مساعده سريعه
    انظرو هذا الكود
    (CODE] if (ballControl == true)

    KeyboardState key = Keyboard.GetState();
    if (key.IsKeyDown(Keys.Up))
    {
    positionball.Y -= 40;
    }
    else if (key.IsKeyDown(Keys.Left))
    {
    positionball.X -= 40;
    }
    if (key.IsKeyDown(Keys.Down))
    {
    positionball.Y += 40;
    }
    if (key.IsKeyDown(Keys.Right))
    {
    positionball.X += 40;
    }
    if (key.IsKeyDown(Keys.Space))
    {
    ballControl = false;
    }

    }

    [/CODE]
    طبعاً الحركه لا تعمل إلا إذا كانت قيمة ballControl تساوي true
    وإذا تم الضغط على زر Space تصبح القيمه false وتتعطل الحركه
    المشكله انني اريد عند الضغط على زر Space أن يتم وضع ballControl على false
    لمدة 10 ثواني مثلاً ثم يرجع true وترجع الحركه فكيف يمكنني فعل ذلك؟
    ارجو الرد بأسرع وقت وشكراً


  2. #2
    ممكن تعمل timer يعد 10 ثواني ثم يرجع القيمة true مرة اخري
    أو (و هذة طريقة أسهل)
    بما ان اللعبة تعمل علي 60fps (مالم تكن قمت بتغييره) إذن يمكنك عمل نفس عمل الTimer عن طريق عد الframes من وقت الضغط علي space تبلغ 60*10=600 و من ثم تقوم بترجيعها مرة أخري true

    الكود
    ستقوم بتعريف متغير من نوع int و لنسمه counter خارج أي method (قم بتعريفه في أول الكود للعبة )

    بداخل الif الخاصة بزر space قم بإضافة الكود التالي :
    كود:
    if(Key.IsKeyDown(Keys.Space)) { ballControl=false; if(counter>600) ballControl=true; else counter++;s {

  3. #3
    عضو فعال
    تاريخ التسجيل
    Sep 2004
    ردود
    201
    السلام عليكم

    أعتقد ان الدالة ()time ستكون مفيدة لك , تستطيع استخدامها لكتابة روتين لتعديل قيمة ballControl كل 10 ثواني

    مثال:
    كود:
    #include<stdio.h> #include<time.h> unsigned int Delay; int main() { Delay = time(NULL); /* take the current time */ printf("\nMy next message will come after 10 sec!"); while( ( time(NULL) - Delay ) != 10 ) { } printf("\nProcess done!"); return 0; }
    هذا مجرد مثال , ولكن انصحك بان تراجع وثائق مكتبة XNA فربما يوجد روتين ينجز هذه المهمة بشكل
    افضل.
    شكوت إلى وكيع سوء حظي فأرشدوني الى ترك المعاصي
    وقال : أعلم انّ العلم نور ونور الله لا يؤتى لعاصي

  4. #4
    مشرف منبر Games Design
    صور رمزية general1
    تاريخ التسجيل
    Jun 2007
    ردود
    1,066
    خذ هذا الكود الكامل:
    كود:
    float timer;
    
    
    timer += (float)gameTime.ElapsedGameTime.TotalSeconds;
    
    
    
    if (ballControl == true)
    
    KeyboardState key = Keyboard.GetState();
    if (key.IsKeyDown(Keys.Up))
    {
    positionball.Y -= 40;
    }
    else if (key.IsKeyDown(Keys.Left))
    {
    positionball.X -= 40;
    }
    if (key.IsKeyDown(Keys.Down))
    {
    positionball.Y += 40;
    }
    if (key.IsKeyDown(Keys.Right))
    {
    positionball.X += 40; 
    }
    
    if (key.IsKeyDown(Keys.Space))
    {
    ballControl = false;
    }
    
    
    if (ballControl == false)
    }
    if (timer >= 10)
    }
    timer = 0;
    ballControl = true;
    {
    {
    و لاحظ ان تعريف المتغير timer خارج كل الدوال و بهذه الطريقة يحسب هذا المتغير مقدار الوقت الذي يمر
    Egypt


    I Love Direct-X

    سبحان الله و بحمده سبحان الله العظيم
    اللهم صلي وسلم و بارك علي سيدنا محمد

  5. #5
    عضو نشيط
    صور رمزية kimoz
    تاريخ التسجيل
    Jan 2010
    المنطقة
    syria
    ردود
    604
    شكراً لكم جميعاً على الردود
    وشكراً لك جداً اخ جينرال فطريقتك عملت بنجاح

Bookmarks

قوانين الموضوعات

  • لا يمكنك اضافة موضوع جديد
  • لا يمكنك اضافة ردود
  • لا يمكنك اضافة مرفقات
  • لا يمكنك تعديل مشاركاتك
  •  
  • كود BB مفعّل
  • رموز الحالة مفعّل
  • كود [IMG] مفعّل
  • [VIDEO] code is مفعّل
  • كود HTML معطل