Unconfigured Ad Widget

تقليص

إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

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

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • مساعده برمجيه في محرك 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 وترجع الحركه فكيف يمكنني فعل ذلك؟
    ارجو الرد بأسرع وقت وشكراً
    متى اراك يوماُ حراُ يا وطني....

    My First 2D Xna Game
    http://www.maxforums.net/showthread.php?t=186226
    First Part Of My 3d Game In Xna
    http://www.maxforums.net/showthread.php?t=188705

    Programming New 3d Car Game in Xna Game Engine
    My Project
    http://www.maxforums.net/showthread.php?t=202529



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

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

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

    تعليق


    • #3
      السلام عليكم

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

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

      تعليق


      • #4
        خذ هذا الكود الكامل:
        كود:
        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
          شكراً لكم جميعاً على الردود
          وشكراً لك جداً اخ جينرال فطريقتك عملت بنجاح
          متى اراك يوماُ حراُ يا وطني....

          My First 2D Xna Game
          http://www.maxforums.net/showthread.php?t=186226
          First Part Of My 3d Game In Xna
          http://www.maxforums.net/showthread.php?t=188705

          Programming New 3d Car Game in Xna Game Engine
          My Project
          http://www.maxforums.net/showthread.php?t=202529


          تعليق

          يعمل...
          X