الشبكة العربية لمطوري الألعاب

خبير مدير وسام البهنسي مشاركة 21

هذا الكود قديم على كل حال فقد تمت إزالته مؤخراً. يجب أن تقوم بسحب آخر التعديلات وإنجاز الدمج قبل أن تستطيع رفع التعديلات بشكل سليم.
 
هناك أسباب عدة تمنع ظهور الإكساء على المجسم. أحد تلك الإجراءات تقوم بتعديل حالة جهاز الرسم دون إعادتها لوضعها الأصلي بعض الانتهاء من الرسم. الحالات التي تؤثر على الإكساء هي حالات المعاينة Sampler States.

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

خبير مدير وسام البهنسي مشاركة 22

أنس، عمل جيد بتحميل الأنبوب الجديد. لكن لا أدري لما أضفت نسخة من المرحلة في صنف اللعبة الأساسي في الملف Sudum.cs 😲
 
النتيجة أننا نرى الأنبوب الآن يتم رسمه حتى فوق مقطع فيديو البداية. المفروض أن يظهر فقط في حالة اللعبة، كما هو الوضع سابقاً.

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

محترف  انس مشاركة 23

قمت برسم الكود عن طريق الصنف GameState_Play لكن بما انه غير ممكن بالنسبة لي رؤية الفيديو فلم اكن اعرف انه توجد مشكلة.
حسنا اذا فهمت قصدك، يجب على المرحلة ان ترسم اذا و فقط اذا كنا عند بداية اللعب.اظن انه يجب علي التعامل مع الصنف StateFlow هل انا في الطريق الصحيح ؟

خبير مدير وسام البهنسي مشاركة 24

الصنف GameState_Play يقوم بالفعل برسم الأنبوب، فلا حاجة لك لإضافة أي كود في الحقيقة. هل اطلعت على محتوى هذا الصنف؟

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

محترف  انس مشاركة 25

أما في 21 يوليو 2010 02:44 م، فقد تنهد وسام البهنسي بارتياح وهو يرد:

الصنف GameState_Play يقوم بالفعل برسم الأنبوب، فلا حاجة لك لإضافة أي كود في الحقيقة. هل اطلعت على محتوى هذا الصنف؟

نعم، و قد تمكنت من رسم الانبوب من خلال هذا الصنف، لكنني فمت باضافته في ملف : Sudum.cs
هل هذا مقبول ؟
ملاحظة : اطلعت على كامل الكود الخاص بالمشروع، المشكلة التي اعاني منها هي انني مبتدئ في البرمجو الغرضية، لن كل اعمال كانت بلغة السي لذا اجد صعوبة في فهم سبل الاتصال بين الاصناف المختلفة.

ها هو الكود الذي عدلته :


namespace Sudum
{
    public class Sudum : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        public SpriteBatch spriteBatch;
        StateFlow stateFlow;
        GameState_Play level;

        static Sudum m_CurrentGame = null;

        public Sudum()
        {
            AGDN.Polyline.Init();
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";

            stateFlow = new StateFlow();
            stateFlow.StartGame();

            level = new GameState_Play();

            m_CurrentGame = this;
        }


        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);
            level.SetLevel();
        }



        protected override void Update(GameTime gameTime)
        {
            base.Update(gameTime);
            InputManager.Me.Update(); // Update input manager first, so further reads in the various states are correct
            stateFlow.Update(); // Update the currently active state
            level.Update();
        }



        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);
            base.Draw(gameTime);
            stateFlow.Render();
            level.Render();
        }
    }
}

خبير مدير وسام البهنسي مشاركة 26

في 10/شعبان/1431 11:23 ص، غمغم انس باستغراب قائلاً:

نعم، و قد تمكنت من رسم الانبوب من خلال هذا الصنف، لكنني فمت باضافته في ملف : Sudum.cs
هل هذا مقبول ؟

كلا. فالصنف Sudum يمثل اللعبة ككل، وليس فقط جزء لعب المرحلة. الصنف الخاص بتمثيل لعب المرحلة اسمه GameLevel وهو الصنف الصحيح لاحتواء مجسم الأنبوب. لأن الأنبوب جزء من المرحلة فقط، وليس سائر أجزاء اللعبة كفلم المقدمة والقائمة الرئيسية.
 



بتاريخ 10/شعبان/1431 11:23 ص، قطب انس حاجبيه بشدة وهو يقول:

ملاحظة : اطلعت على كامل الكود الخاص بالمشروع، المشكلة التي اعاني منها هي انني مبتدئ في البرمجو الغرضية، لن كل اعمال كانت بلغة السي لذا اجد صعوبة في فهم سبل الاتصال بين الاصناف المختلفة.

أعتقد أن هذه فرصة ممتازة لتمرين نفسك على البرمجة غرضية التوجه. يمكنك قراءة بعض الكتب والمصادر عن لغة #C لزيادة خبرتك في الموضوع، وقارن ما تقرؤه مع كود اللعبة الحالي كي تصبح دراستك تطبيقية مباشرة. 
 
بالمناسبة، لقد قمتُ بإجراء تنظيفات على الكود الأخير لإصلاح بعض العيوب والتخلص من المتغيرات غير الضرورية. النتيجة أن الأنبوب الآن يظهر بشكل صحيح بالإكساء الخاص به. أرجو تنزيل التعديلات ودراستها جيداً لتكون منهجاً لنا في التعديلات القادمة.

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

خبير مدير وسام البهنسي مشاركة 27

حسناً يا شباب. أعتقد أننا بذلنا ما يكفي من الوقت في دراسة حركة المركبات، وأنا سعيد بالنتيجة التي توصلتهم إليها. لتوفير الوقت، تقدم الشبكة هدية صغيرة لأعضاء هذا المشروع على شكل صنف يدعى AGDNPolyline تجدونه في اللعبة. ☺
 
مهمة هذا الصنف هي استقبال مجسم الأنبوب، واستخراج خط سير المركبة على حافته وإعطاء المبرمج إمكانية حساب موقع المركبة على أية نقطة على الحافة المعبر عنها برقم عشري يتراوح بين 0 والـ 1.
 
الوحدة موجودة بالفعل في اللعبة، وأرجو منكم دراسة وظائفها عن طريق فتحها في الـ Class Browser في فيجوال ستوديو ومطالعة الإجراءات والخصائص التي تقدمها.  بعد أن نفعل ذلك سننتقل لإضافة مركبة اللاعب كخطوة أولى في استخدام هذه الوحدة...
 
يمكنكم طرح أية أسئلة عن الوحدة في هذا الموضوع.

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

مبتدئ  بلال بوزيــــــــاني مشاركة 28

السلام عليكم
 
بارك الله في هذه الشبكة وعلى القائمين عليها على هذه الهدية الطيبة .
 
لقد إطلعت على هذا الصنـــــف و مكوناته و اريد ان استفسر على بعض الامور فيه.
 
1- المنهج  Evaluate  : ما المقصود ب phase  و لماذا هو محصور بين 1 و 0 , هل يمثل ضلع من أضلاع خط السير أو موقع عليه ؟  ليتك تشرح بشكل سريع هذا المنهج ان أمكن 😳  و لو بشكل مختصر .
 
2-  المنهج GetSurroundingVertices : طبعا لم أفهم هذا المنهج بسبب ال phase و كذلك القيمة التي يرجعها و المحصورة بين 1 و 0
 
كثيرة الاسئلة ها ؟ 😏  يبقى سؤال واحد  خارج عن هذه الوحدة مما لاحظته من تعديلات و تحسينات اخونا  وسام  بارك الله فيه , عند منادات المنهج begin لل SpriteBatch  عن SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.SaveState ,  افهم معنا AlphaBlend نوعا ما لتفعيل عمليات الشفافية  ان صح هذا التعبير .
 
عذرا عن الإطالة اخوتي و شكرا لكم مسبقا.
 
اخوكم بلال.

خبير  أحمد عبد الغني مشاركة 29

السلام عليكم. أستطيع الرد على سؤال واحد:


وفي 13/شعبان/1431 04:12 ص، ظهر شبح ابتسامة على وجه بلال بوزيــــــــاني وهو يقول:

يبقى سؤال واحد  خارج عن هذه الوحدة مما لاحظته من تعديلات و تحسينات اخونا  وسام  بارك الله فيه , عند منادات المنهج begin لل SpriteBatch  عن SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.SaveState ,  افهم معنا AlphaBlend نوعا ما لتفعيل عمليات الشفافية  ان صح هذا التعبير

نعم. فعندما تبدأ الرسم باستخدام ال sprite batch فإنه يقوم بتعديل حالة جهاز الرسم ليفعل دمج ألفا (إن أردت ذلك) كما أنه يقوم داخلياً بتعديل حالات أخرى. المشكلة أن هذه الحالات المعدلة ستؤثر على رسم بقية الأجسام في اللعبة. لذلك يعطيك الـ sprite batch خيار إعادة الحالات هذه إلى ما كانت عليه قبل استخدام ال sprite batch .  وهذا هو المطلوب. ☺  
أعتقد أن هذا هو الحل لإصلاح مشكلة إكساء الأنبوب التي واجهها أنس. انظر ما قال وسام عنها:


أما في 05/شعبان/1431 08:50 ص، فقد تنهد وسام البهنسي بارتياح وهو يرد:

هناك أسباب عدة تمنع ظهور الإكساء على المجسم. أحد تلك الإجراءات تقوم بتعديل حالة جهاز الرسم دون إعادتها لوضعها الأصلي بعض الانتهاء من الرسم. الحالات التي تؤثر على الإكساء هي حالات المعاينة Sampler States.

يبدو أن حالات المعاينة يتم تغييرها في ال sprite batch. 😒

اللهم انصر أهلنا في فلسطين وآجرنا أن نكون عوناً لهم

خبير مدير وسام البهنسي مشاركة 30

فلنفعـّل هذه المهمة ثانيةً. نريد تصدير مجسم بسيط (مكعب مثلاً) ونستخدمه مبدئياً كمركبة اللاعب. ونتحكم بموقع اللاعب عن طريق الأزرار لتحريكه على محيط الأنبوب. نستخدم في ذلك الصنف AGDNPolyline الذي تكلمنا عنه... فمن لها؟  ☺

وسام البهنسي
مبرمج في إنفيديا وإنفريمز