Wednesday, September 29, 2010

XNA: Lesson4: 2D Graphics 2

الدرس الرابع
2D Graphics 2

بسم الله و الصلاة و السلام علي رسول الله صلي الله عليه و سلم ...

نكمل في هذا الدرس باذن الله مفاهيم و اساسيات التعامل مع كائنات ال 2D...

  • تغيير مقاس الشاشة: Changing Windows Size:
لتغيير ابعاد الشاشة الي 500 * 300 مثلا نكتب الكود التالي في ملف Game1.CS في ال Constructor:
public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            graphics.PreferredBackBufferWidth = 500;
            graphics.PreferredBackBufferHeight = 300;

            Content.RootDirectory = "Content";
        }


  • تطبيق:
    • غير ابعاد الشاشة لاي مقاس جديد تريده ...


  • Moving the sprite on the screen:
  • تحريك العنصر علي الشاشة:
اتفقنا ان في نظام الاحداثيات يوجد x و يوجد y ....
طبعا نستخدم x لتحريك العنصر بشكل افقي ... و نستخدم ال y  للتحريك بشكل عمودي ...
و اتفقنا ايضا ان ال x تبدا من الشمال يعني اول نقطة علي الشاشة في الشمال تساوي صفر ... و بالتالي اذا اردنا تحريك العنصر لليمين ماذا سنفعل ؟؟؟ سنزيد ال x بالقيمة التي نريد التحريك بها ... و كذلك في ال y نقطة الصفر تبدا من اول نقطة علي الشاشة بالاعلي و بالتالي اذا اردنا تحريك العنصر لتحت سنزيد ال y .

نفترض اننا نريد تحريك العنصر لليمين مثلا سنكتب الكود التالي:
mySprite1.position.X += 1;
ماذا فعنا هنا؟ قمنا بزيادة ال x بمقدار 1 ... و بالتالي سيتحرك العنصر لليمين بمقدار 1 في التكرار الواحد ...

  • دعونا نطبق ... افتحوا المشروع الخاص بالدرس الثالث ...
نفتح الكلاس clsSprite.CS و نعرف خاصية جديدة به:
public Vector2 velocity { get; set; }
ما هي ال velocity : هي تمثل سرعة الكائن علي الشاشة ... و عرفناها ب vector2 حيث ال x هي قيمة السرعة للتحريك الافقي و ال y هي قيمة السرعة للتحريك الراسي ...



  • ثم نبدا وظيفة جديدة في الكلاس و هي Move اي تحرك و التي ننفذها في كل تكرار في اللعبة بحيث يتحرك الكائن بالسرعة التي حددناها و هذه ال Method ستكون كالتالي:
        public void Move()
        {
            position += velocity;
  }

و هنا اضفنا قيمة السرعة الي مكان الكائن و هكذا في كل تكرار في اللعبة يتم زيادة احداثيات الكائن بمقدار السرعة ...

  • الان نفتح ملف ال Game1.CS:
ثم نذهب الي الحدث LoadContent و نعدل الكود ليصبح كالتالي:
        protected override void LoadContent()
        {
// Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            // TODO: use this.Content to load your game content here

            spriteBall = new clsSprite(Content.Load<Texture2D>("ball"),
                Vector2.Zero);

            spriteBall.velocity = new Vector2(1, 1);
        }

كما ترون يوجد سطر اضافي بعد تعريف object   من كلاس ال clsSprite و هو:
            spriteBall.velocity = new Vector2(1, 1);
و هنا تم تعريف السرعة بمقدار 1,1 يعني في كل تكرار في اللعبة ستزيد قيمة ال x بمقدار 1 و ستزيد قيمة ال y بقيمة 1.



ثم نذهب الي حدث ال Update() و نعدل الكود ليصبح كالتالي:
        protected override void Update(GameTime gameTime)
        {
            // Allows the game to exit
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();

            // TODO: Add your update logic here
            spriteBall.Move();

            base.Update(gameTime);
        }
نلاحظ السطر التالي:
spriteBall.Move();
و لا ننسي ان حدث ال update يتم تنفيذه في كل تكرار في اللعبة ... و بالتالي ننفذ كود التحرك Move فيه ليتحرك الكائن ...


  • خلاصة الدرس:
تم التدريب علي تحريك كائنات ال 2D في اللعبة ... و في الدرس القادم سنتعلم كيف نتحكم في الحركة بحيث لا يخرج الكائن خارج حدود اللعبة ...

التطبيق:
قم بانشاء 3 كائنات من نوع clsSprite و قم بتحريكهم في اتجاهات مختلفة ...
التطبيق بالانجليزي لمن يفهم اكثر بها:
Create 3 objects of the clsSprite class, and move them towards different ways …

و صلي الله و سلم علي سيدنا محمد و السلام عليكم ...

No comments:

Post a Comment