الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

استفسار عن Xna Multi Scenes

بدأه mobilatsssss في 12 أغسطس 2009 · 2 رد · 644 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاتة

انا كان عندى استفسار لمبتدء XNA

انا عملت اللعبة تمام بس عايز ازود واجهة او help screen الخخخ.......

حد يقدر يفهمنى اعمل كدا ازاى

يا ريت Source code كمان

وله كل الشكر

#2

وعليكــم السـلام ورحمة الله وبركاتـه..

سألخص الفكره بكلمات بسيطة.

الفكرة هي وجود متغير يحتوي على حالة اللعبة الحالية ال Game State للعبة، مثلا إذا كانت اللعبة تظهر الشاشة الرئيسية تكون قيمة المتغير =0، و عندما تكون اللعبة في وضع اللعب يكون قيمة المتغير =1 ، و عندما تكون في وضع إنهاء اللعبة مثلا، تكون قيمة المتغير =2. وهكذا

الآن في داخل الدالة Draw تقوم بعمل switch لتفحص قيمة المتغير فإذا كانت 0 يتم رسم الأشياء الخاصة بالشاشة الرئيسية، و إذا كانت كانت القيمة 1 يتم رسم مشهد اللعبة، و هكذا

بعد ذلك في داخل الدالة Update يتم عمل نفس ال switch بحيث أنه إذا كانت القيمة 1 يتم معالجة اللعبة نفسها، و إذا كانت القيمة 0 يتم معالجة القائمة الرئيسيه....

بإمكانك الإستفادة من ال Enumerator لتطبيق هذه الفكره!

بعض الكود بإستخدام ال enum

 

using System;

using System.[color= #202020;]Collections.[color= #202020;]Generic;

using Microsoft.[color= #202020;]Xna.[color= #202020;]Framework;

using Microsoft.[color= #202020;]Xna.[color= #202020;]Framework.[color= #202020;]Audio;

using Microsoft.[color= #202020;]Xna.[color= #202020;]Framework.[color= #202020;]Content;

using Microsoft.[color= #202020;]Xna.[color= #202020;]Framework.[color= #202020;]GamerServices;

using Microsoft.[color= #202020;]Xna.[color= #202020;]Framework.[color= #202020;]Graphics;

using Microsoft.[color= #202020;]Xna.[color= #202020;]Framework.[color= #202020;]Input;

using Microsoft.[color= #202020;]Xna.[color= #202020;]Framework.[color= #202020;]Net;

using Microsoft.[color= #202020;]Xna.[color= #202020;]Framework.[color= #202020;]Storage;

 

namespace Smile

[color= #009900;]{

 

    public class Game1 [color= #339933;]: Microsoft.[color= #202020;]Xna.[color= #202020;]Framework.[color= #202020;]Game

    [color= #009900;]{

        public [color= #000000; font-weight: bold;]enum GameState

        [color= #009900;]{

            MainMenu,

            Loading,

            Playing,

            Paused

        [color= #009900;]};

 

        GraphicsDeviceManager graphics;

        SpriteBatch spriteBatch;

        GameState gmSt;

 

 

        public Game1[color= #009900;]([color= #009900;])

        [color= #009900;]{

            graphics [color= #339933;]= new GraphicsDeviceManager[color= #009900;](this[color= #009900;]);

            Content.[color= #202020;]RootDirectory [color= #339933;]= [color= #ff0000;]"Content";

        [color= #009900;]}

        protected override [color= #993333;]void Initialize[color= #009900;]([color= #009900;])

        [color= #009900;]{

            base.[color= #202020;]Initialize[color= #009900;]([color= #009900;]);

        [color= #009900;]}

 

        protected override [color= #993333;]void LoadContent[color= #009900;]([color= #009900;])

        [color= #009900;]{

            spriteBatch [color= #339933;]= new SpriteBatch[color= #009900;](GraphicsDevice[color= #009900;]);

            gmSt [color= #339933;]= GameState.[color= #202020;]MainMenu;

 

        [color= #009900;]}

 

        protected override [color= #993333;]void UnloadContent[color= #009900;]([color= #009900;])

        [color= #009900;]{

        [color= #009900;]}

 

        protected override [color= #993333;]void Update[color= #009900;](GameTime gameTime[color= #009900;])

        [color= #009900;]{

            [color= #b1b100;]if [color= #009900;](GamePad.[color= #202020;]GetState[color= #009900;](PlayerIndex.[color= #202020;]One[color= #009900;]).[color= #202020;]Buttons.[color= #202020;]Back [color= #339933;]== ButtonState.[color= #202020;]Pressed[color= #009900;])

                this.[color= #202020;]Exit[color= #009900;]([color= #009900;]);

 

            [color= #b1b100;]switch [color= #009900;](gmSt[color= #009900;])

            [color= #009900;]{

                [color= #b1b100;]case GameState.[color= #202020;]Loading[color= #339933;]:

                    [color= #009900;]{

                        [color= #666666; font-style: italic;]// the Game Loading Code

                        [color= #000000; font-weight: bold;]break;

                    [color= #009900;]}

                [color= #b1b100;]case GameState.[color= #202020;]MainMenu[color= #339933;]:

                    [color= #009900;]{

                        [color= #666666; font-style: italic;]// the Main Menu Code

                        [color= #000000; font-weight: bold;]break;

                    [color= #009900;]}

 

                [color= #b1b100;]case GameState.[color= #202020;]Paused[color= #339933;]:

                    [color= #009900;]{

                        [color= #666666; font-style: italic;]// the Game Paused Code

                        [color= #000000; font-weight: bold;]break;

                    [color= #009900;]}

 

                [color= #b1b100;]case GameState.[color= #202020;]Playing[color= #339933;]:

                    [color= #009900;]{

                        [color= #666666; font-style: italic;]// the Main Game Playing code and logic Code

                        [color= #000000; font-weight: bold;]break;

                    [color= #009900;]}

            [color= #009900;]}

 

            base.[color= #202020;]Update[color= #009900;](gameTime[color= #009900;]);

        [color= #009900;]}

        protected override [color= #993333;]void Draw[color= #009900;](GameTime gameTime[color= #009900;])

        [color= #009900;]{

            graphics.[color= #202020;]GraphicsDevice.[color= #202020;]Clear[color= #009900;](Color.[color= #202020;]CornflowerBlue[color= #009900;]);

 

            [color= #b1b100;]switch [color= #009900;](gmSt[color= #009900;])

            [color= #009900;]{

                [color= #b1b100;]case GameState.[color= #202020;]Loading[color= #339933;]:

                    [color= #009900;]{

                        [color= #666666; font-style: italic;]// Draw the Game Loading Bar

                        [color= #000000; font-weight: bold;]break;

                    [color= #009900;]}

                [color= #b1b100;]case GameState.[color= #202020;]MainMenu[color= #339933;]:

                    [color= #009900;]{

                        [color= #666666; font-style: italic;]// Draw Main Menu

                        [color= #000000; font-weight: bold;]break;

                    [color= #009900;]}

 

                [color= #b1b100;]case GameState.[color= #202020;]Paused[color= #339933;]:

                    [color= #009900;]{

                        [color= #666666; font-style: italic;]// Draw Game Paused Screen

                        [color= #000000; font-weight: bold;]break;

                    [color= #009900;]}

 

                [color= #b1b100;]case GameState.[color= #202020;]Playing[color= #339933;]:

                    [color= #009900;]{

                        [color= #666666; font-style: italic;]// Draw the game scene

                        [color= #000000; font-weight: bold;]break;

                    [color= #009900;]}

            [color= #009900;]}

 

 

            base.[color= #202020;]Draw[color= #009900;](gameTime[color= #009900;]);

        [color= #009900;]}

    [color= #009900;]}

[color= #009900;]}
 

هذه فكره بسيطة و هي الفكرة العامه، و من الممكن أن تكون هناك طريقة من نفس ال Xna.

بالتوفيق

#3

انا مش عارف اشكرك ازاى

فكرة ممتازة بدات العمل بها

الف شكر امجهودك و اهتمامك

مواضيع مشابهة