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

الدرس السابع من سلسلة دروس تعلم ال Xna

بدأه *خلدون خالد* في 5 مارس 2009 · 4 رد · 2,408 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

الدرس السابع

<<== إذهب إلى الدرس السابق

أهلا بكم في الدرس السابع من سلسلة دروس تعلم الXna , سوف نقوم في هذا الدرس بكتابة نص على الشاشة.

في هذا الدرس سوف نتعلم كيفية الكتابة على الشاشة, بحيث يصبح بإمكاننا كتابة قيمة الطاقة و الزاوية لمدفع اللاعب الحالي.

لقد اصبحت الكتابة على الشاشة في ال Xna عملية سهلة جدا. أولا, يجب أن نقوم بإستيراد خط "Font" إلى المشروع الخاص بنا و ربطه بمتغير داخل الكود, بنفس الطريقة التي قمنا فيها بإضافة الصورة إلى المشروع. بعدها يمكننا ببساطة أن نقوم برسم النص على الشاشة بإستخدام ال SpriteBatch. لا يلزمنا أيضا ان نقوم بإنشاء SpriteBatch جديد : لإنه يمكننا ببساطة أن نستخدم نفس الSpriteBatch الذي استخدمناه لرسم المدافع و التضاريس.

دعنا نبدأ بإضافة الخط إلى المشروع. لعمل ذلك, ىقم بالضغط بالزر اليمين على مجلد ال Content في ال Solution Explorer. بعدها إختر من القائمة Add-> New Item , كما يظهر في الصورة التالية.

post-133895-1236269915_thumb.jpg

في مربع الحوار, قم بإختيار ال "Sprite Font" و اعطه اسما في الأسفل : myFont.spritefont و بعدها إضغط على زر إضافة "Add". ستلاحظ أن ملف ال myFont.spritefont قد تم إضافته إلى مجلد ال Content في المشروع.

بعد ذلك سوف يظهر لديك ملف نص (ملف Xml عمليا) غريب (ما غريب إلا الشيطان :) ). لحسن الحظ, لن نغير كثيرا في هذا الملف. إبحث عن خانة إسم الخط "FontName" في الملف, و قم بتغيره من myFont إلى Arial. بهذا سوف تقوم بتعريف عائلة الخط, كما سيمكنك من إختيار اي خط موجود على جهازك. لكي ترى ما هي الخطوط المثبته على جهازك, إفتح المجلد C:\Windows\Fonts. لاحظ أيضا انه من خلال ملف النص نفسه بإمكانك أن تقوم بتغيير حجم الخط. إفتراضيا الحجم هو 14 نقطة.

بعدها, إرجع إلي ملف ال Game1.CS قم بإضافة المتغير التالي في أعلى الكود:

 SpriteFont font;

كما أن الكائن Texture2D يمكن ربطه مع ملف صورة, بإمكاننا أن نربط الكائن SpriteFont مع ملف خط. قم بتحميل الملف في المتغير الذي عرفناه , داخل الدالة LoadContent :

font = Content.Load<SpriteFont> ("myFont");

العملية شبيهة بتحميل الصورة: حيث قمنا بإستخدام الدالة Content.Load , بعدها حددنا نوع المتغير الذي نريد تحميلة, إضافة إلى القسم الأول من إسم الملف.

الآن و بعد أن تم تحميل الخط, و ال SpriteBatch مفعل, نحن جاهزين لكي نقوم برسم بعض النصوص.مره أخرى سوف نقوم بوضع هذا الكود في دالة الرسم الخاصة بنا و لكن سنقوم بذلك في دالة منفصلة:

 private void DrawText()
	 {
		 spriteBatch.DrawString(font, "Cannon power: 100", new Vector2(20, 45), Color.White);
	 }

هذا السطر من الكود يطلب من ال SpriteBatch أن يرسم بعض النص على الشاشة بإستخدام كائن الخط font. قمنا بتحديد الموقع, اللون و النص, للتعبير عن قوة المدفع. سوف يتم رسم النص على بعد 20 بكسل يمين الشاشة و 45 من الأعلى, (من الركن الأعلى الأيسر للشاشة). طبعا لاتنسى أن تستدعي هذه الدالة من داخل دالة الرسم الأصليه Draw() :

 protected override void Draw(GameTime gameTime)
	 {
		 graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

		 spriteBatch.Begin();
		 DrawScenery();
		 DrawPlayers();
		 DrawText();
		 spriteBatch.End();

		 base.Draw(gameTime);
	 }

الآن عند تشغيل الكود, سوف تشاهد مؤشر الطاقة موجود على الركن الأيسر العلوي!

من الواضح أن الرقم الظاهر على الشاشة لا يعبر عن قيمة الطاقة الفعلية, لأننا قمنا بوضع رقم ثابت. بدلا من ذلك قم بتغير دالة DrawText كالتالي:

 private void DrawText()
	 {
		 PlayerData player = players[currentPlayer];
		 int currentAngle = (int)MathHelper.ToDegrees(player.Angle);
		 spriteBatch.DrawString(font, "Cannon angle: " + currentAngle.ToString(), new Vector2(20, 20), player.Color);
		 spriteBatch.DrawString(font, "Cannon power: " + player.Power.ToString(), new Vector2(20, 45), player.Color);
	 }

هكذا يتم قراءة معلومات اللاعب من مصفوفة ال PlayerData. من هذه البيانات إستخدمنا كل من الزاوية و الطاقة و اللون من أجل كتابة النص.

هذا كل شيئ :lol: حاول تشغيل البرنامج. سوف تظهر لك الشاشة مثل الصورة في الأسفل. حاول تغيير قيم الزاوية و الطاقة : سوف تتغير القيم الموجوده على الشاشة بناء على القيم الجديدة.

post-133895-1236269970_thumb.jpg

• التمرين هذا اليوم (لي و للقراء): هو محاولة الكتابة باللغة العربية, و اللغات الغير لاتينية, و اللغات من اليمين لليسار.

كود المشروع حتى الآن:

 

[color= #0000FF;]using [color= #008000;]System[color= #FF0000;]; 

 [color= #0000FF;]using [color= #008000;]System.Collections.Generic[color= #FF0000;]; 

 [color= #0000FF;]using [color= #008000;]Microsoft.Xna.Framework[color= #FF0000;]; 

 [color= #0000FF;]using [color= #008000;]Microsoft.Xna.Framework.Audio[color= #FF0000;]; 

 [color= #0000FF;]using [color= #008000;]Microsoft.Xna.Framework.Content[color= #FF0000;]; 

 [color= #0000FF;]using [color= #008000;]Microsoft.Xna.Framework.GamerServices[color= #FF0000;]; 

 [color= #0000FF;]using [color= #008000;]Microsoft.Xna.Framework.Graphics[color= #FF0000;]; 

 [color= #0000FF;]using [color= #008000;]Microsoft.Xna.Framework.Input[color= #FF0000;]; 

 [color= #0000FF;]using [color= #008000;]Microsoft.Xna.Framework.Net[color= #FF0000;]; 

 [color= #0000FF;]using [color= #008000;]Microsoft.Xna.Framework.Storage[color= #FF0000;]; 

 

 [color= #0000FF;]namespace XNAtutorial 

 [color= #000000;]{ 

     [color= #0000FF;]public [color= #0000FF;]struct PlayerData 

     [color= #000000;]{ 

         [color= #0000FF;]public Vector2 Position[color= #FF0000;]; 

         [color= #0000FF;]public [color= #0000FF;]bool IsAlive[color= #FF0000;]; 

         [color= #0000FF;]public [color= #008000;]Color Color[color= #FF0000;]; 

         [color= #0000FF;]public [color= #0000FF;]float Angle[color= #FF0000;]; 

         [color= #0000FF;]public [color= #0000FF;]float Power[color= #FF0000;]; 

     [color= #000000;]} 

 

     [color= #0000FF;]public [color= #0000FF;]class Game1 [color= #FF0000;]: Microsoft.[color= #0000FF;]Xna.[color= #0000FF;]Framework.[color= #0000FF;]Game 

     [color= #000000;]{ 

         GraphicsDeviceManager graphics[color= #FF0000;]; 

         SpriteBatch spriteBatch[color= #FF0000;]; 

         GraphicsDevice device[color= #FF0000;]; 

 

         [color= #0000FF;]int screenWidth[color= #FF0000;]; 

         [color= #0000FF;]int screenHeight[color= #FF0000;]; 

 

         Texture2D backgroundTexture[color= #FF0000;]; 

         Texture2D foregroundTexture[color= #FF0000;]; 

         Texture2D carriageTexture[color= #FF0000;]; 

         Texture2D cannonTexture[color= #FF0000;]; 

         SpriteFont font[color= #FF0000;]; 

 

         PlayerData[color= #000000;][[color= #000000;]] players[color= #FF0000;];

         [color= #0000FF;]int numberOfPlayers [color= #FF0000;]= [color= #FF0080;]4[color= #FF0000;]; 

         [color= #0000FF;]float playerScaling[color= #FF0000;]; 

         [color= #0000FF;]int currentPlayer [color= #FF0000;]= [color= #FF0080;]0[color= #FF0000;]; 

 

         [color= #0000FF;]public Game1[color= #000000;]([color= #000000;]) 

         [color= #000000;]{ 

             [color= #008000;]graphics [color= #FF0000;]= [color= #0000FF;]new GraphicsDeviceManager[color= #000000;]([color= #0000FF;]this[color= #000000;])[color= #FF0000;]; 

             [color= #008000;]Content.[color= #0000FF;]RootDirectory [color= #FF0000;]= [color= #A31515;]"Content"[color= #FF0000;]; 

         [color= #000000;]} 

 

         [color= #0000FF;]protected [color= #0000FF;]override [color= #0000FF;]void Initialize[color= #000000;]([color= #000000;]) 

         [color= #000000;]{ 

             [color= #008000;]graphics.[color= #0000FF;]PreferredBackBufferWidth [color= #FF0000;]= [color= #FF0080;]500[color= #FF0000;]; 

             [color= #008000;]graphics.[color= #0000FF;]PreferredBackBufferHeight [color= #FF0000;]= [color= #FF0080;]500[color= #FF0000;]; 

             [color= #008000;]graphics.[color= #0000FF;]IsFullScreen [color= #FF0000;]= false[color= #FF0000;]; 

             [color= #008000;]graphics.[color= #0000FF;]ApplyChanges[color= #000000;]([color= #000000;])[color= #FF0000;]; 

             Window.[color= #0000FF;]Title [color= #FF0000;]= [color= #A31515;]"Riemer's 2D XNA Tutorial"[color= #FF0000;]; 

 

             [color= #0000FF;]base.[color= #0000FF;]Initialize[color= #000000;]([color= #000000;])[color= #FF0000;]; 

         [color= #000000;]} 

 

         [color= #0000FF;]protected [color= #0000FF;]override [color= #0000FF;]void LoadContent[color= #000000;]([color= #000000;]) 

         [color= #000000;]{ 

             device [color= #FF0000;]= [color= #008000;]graphics.[color= #0000FF;]GraphicsDevice[color= #FF0000;]; 

             spriteBatch [color= #FF0000;]= [color= #0000FF;]new SpriteBatch[color= #000000;](device[color= #000000;])[color= #FF0000;]; 

 

             screenWidth [color= #FF0000;]= device.[color= #0000FF;]PresentationParameters.[color= #0000FF;]BackBufferWidth[color= #FF0000;]; 

             screenHeight [color= #FF0000;]= device.[color= #0000FF;]PresentationParameters.[color= #0000FF;]BackBufferHeight[color= #FF0000;]; 

 

 

            backgroundTexture [color= #FF0000;]= [color= #008000;]Content.[color= #0000FF;]Load[color= #FF0000;]<Texture2D[color= #FF0000;]> [color= #000000;]([color= #A31515;]"background"[color= #000000;])[color= #FF0000;]; 

            foregroundTexture [color= #FF0000;]= [color= #008000;]Content.[color= #0000FF;]Load[color= #FF0000;]<Texture2D[color= #FF0000;]> [color= #000000;]([color= #A31515;]"foreground"[color= #000000;])[color= #FF0000;]; 

            carriageTexture [color= #FF0000;]= [color= #008000;]Content.[color= #0000FF;]Load[color= #FF0000;]<Texture2D[color= #FF0000;]> [color= #000000;]([color= #A31515;]"carriage"[color= #000000;])[color= #FF0000;]; 

            cannonTexture [color= #FF0000;]= [color= #008000;]Content.[color= #0000FF;]Load[color= #FF0000;]<Texture2D[color= #FF0000;]> [color= #000000;]([color= #A31515;]"cannon"[color= #000000;])[color= #FF0000;]; 

 

            [color= #008000;]font [color= #FF0000;]= [color= #008000;]Content.[color= #0000FF;]Load[color= #FF0000;]<SpriteFont[color= #FF0000;]> [color= #000000;]([color= #A31515;]"myFont"[color= #000000;])[color= #FF0000;]; 

 

             SetUpPlayers[color= #000000;]([color= #000000;])[color= #FF0000;]; 

             playerScaling [color= #FF0000;]= [color= #FF0080;]40.0f [color= #FF0000;]/ [color= #000000;]([color= #0000FF;]float[color= #000000;])carriageTexture.[color= #0000FF;]Width[color= #FF0000;]; 

         [color= #000000;]} 

 

         [color= #0000FF;]private [color= #0000FF;]void SetUpPlayers[color= #000000;]([color= #000000;]) 

         [color= #000000;]{ 

             [color= #008000;]Color[color= #000000;][[color= #000000;]] playerColors [color= #FF0000;]= [color= #0000FF;]new [color= #008000;]Color[color= #000000;][[color= #FF0080;]10[color= #000000;]][color= #FF0000;]; 

             playerColors[color= #000000;][[color= #FF0080;]0[color= #000000;]] [color= #FF0000;]= [color= #008000;]Color.[color= #0000FF;]Red[color= #FF0000;]; 

             playerColors[color= #000000;][[color= #FF0080;]1[color= #000000;]] [color= #FF0000;]= [color= #008000;]Color.[color= #0000FF;]Green[color= #FF0000;]; 

             playerColors[color= #000000;][[color= #FF0080;]2[color= #000000;]] [color= #FF0000;]= [color= #008000;]Color.[color= #0000FF;]Blue[color= #FF0000;]; 

             playerColors[color= #000000;][[color= #FF0080;]3[color= #000000;]] [color= #FF0000;]= [color= #008000;]Color.[color= #0000FF;]Purple[color= #FF0000;]; 

             playerColors[color= #000000;][[color= #FF0080;]4[color= #000000;]] [color= #FF0000;]= [color= #008000;]Color.[color= #0000FF;]Orange[color= #FF0000;]; 

             playerColors[color= #000000;][[color= #FF0080;]5[color= #000000;]] [color= #FF0000;]= [color= #008000;]Color.[color= #0000FF;]Indigo[color= #FF0000;]; 

             playerColors[color= #000000;][[color= #FF0080;]6[color= #000000;]] [color= #FF0000;]= [color= #008000;]Color.[color= #0000FF;]Yellow[color= #FF0000;]; 

             playerColors[color= #000000;][[color= #FF0080;]7[color= #000000;]] [color= #FF0000;]= [color= #008000;]Color.[color= #0000FF;]SaddleBrown[color= #FF0000;]; 

             playerColors[color= #000000;][[color= #FF0080;]8[color= #000000;]] [color= #FF0000;]= [color= #008000;]Color.[color= #0000FF;]Tomato[color= #FF0000;]; 

             playerColors[color= #000000;][[color= #FF0080;]9[color= #000000;]] [color= #FF0000;]= [color= #008000;]Color.[color= #0000FF;]Turquoise[color= #FF0000;]; 

 

             players [color= #FF0000;]= [color= #0000FF;]new PlayerData[color= #000000;][numberOfPlayers[color= #000000;]][color= #FF0000;]; 

             [color= #0000FF;]for [color= #000000;]([color= #0000FF;]int i [color= #FF0000;]= [color= #FF0080;]0[color= #FF0000;]; i [color= #FF0000;]< numberOfPlayers[color= #FF0000;]; i[color= #FF0000;]++[color= #000000;]) 

             [color= #000000;]{ 

                 players[color= #000000;][i[color= #000000;]].[color= #0000FF;]IsAlive [color= #FF0000;]= true[color= #FF0000;]; 

                 players[color= #000000;][i[color= #000000;]].[color= #008000;]Color [color= #FF0000;]= playerColors[color= #000000;][i[color= #000000;]][color= #FF0000;]; 

                 players[color= #000000;][i[color= #000000;]].[color= #0000FF;]Angle [color= #FF0000;]= MathHelper.[color= #0000FF;]ToRadians[color= #000000;]([color= #FF0080;]90[color= #000000;])[color= #FF0000;]; 

                 players[color= #000000;][i[color= #000000;]].[color= #0000FF;]Power [color= #FF0000;]= [color= #FF0080;]100[color= #FF0000;];                 

             [color= #000000;]} 

 

             players[color= #000000;][[color= #FF0080;]0[color= #000000;]].[color= #0000FF;]Position [color= #FF0000;]= [color= #0000FF;]new Vector2[color= #000000;]([color= #FF0080;]100, [color= #FF0080;]193[color= #000000;])[color= #FF0000;]; 

             players[color= #000000;][[color= #FF0080;]1[color= #000000;]].[color= #0000FF;]Position [color= #FF0000;]= [color= #0000FF;]new Vector2[color= #000000;]([color= #FF0080;]200, [color= #FF0080;]212[color= #000000;])[color= #FF0000;]; 

             players[color= #000000;][[color= #FF0080;]2[color= #000000;]].[color= #0000FF;]Position [color= #FF0000;]= [color= #0000FF;]new Vector2[color= #000000;]([color= #FF0080;]300, [color= #FF0080;]361[color= #000000;])[color= #FF0000;]; 

             players[color= #000000;][[color= #FF0080;]3[color= #000000;]].[color= #0000FF;]Position [color= #FF0000;]= [color= #0000FF;]new Vector2[color= #000000;]([color= #FF0080;]400, [color= #FF0080;]164[color= #000000;])[color= #FF0000;]; 

         [color= #000000;]} 

 

         [color= #0000FF;]protected [color= #0000FF;]override [color= #0000FF;]void UnloadContent[color= #000000;]([color= #000000;]) 

         [color= #000000;]{ 

         [color= #000000;]} 

 

         [color= #0000FF;]protected [color= #0000FF;]override [color= #0000FF;]void Update[color= #000000;](GameTime gameTime[color= #000000;]) 

         [color= #000000;]{ 

             [color= #0000FF;]if [color= #000000;](GamePad.[color= #0000FF;]GetState[color= #000000;](PlayerIndex.[color= #0000FF;]One[color= #000000;]).[color= #0000FF;]Buttons.[color= #0000FF;]Back [color= #FF0000;]== [color= #008000;]ButtonState.[color= #0000FF;]Pressed[color= #000000;]) 

                 [color= #0000FF;]this.[color= #0000FF;]Exit[color= #000000;]([color= #000000;])[color= #FF0000;]; 

 

             ProcessKeyboard[color= #000000;]([color= #000000;])[color= #FF0000;]; 

             [color= #0000FF;]base.[color= #0000FF;]Update[color= #000000;](gameTime[color= #000000;])[color= #FF0000;]; 

         [color= #000000;]} 

 

         [color= #0000FF;]private [color= #0000FF;]void ProcessKeyboard[color= #000000;]([color= #000000;]) 

         [color= #000000;]{ 

             KeyboardState keybState [color= #FF0000;]= Keyboard.[color= #0000FF;]GetState[color= #000000;]([color= #000000;])[color= #FF0000;]; 

             [color= #0000FF;]if [color= #000000;](keybState.[color= #0000FF;]IsKeyDown[color= #000000;]([color= #008000;]Keys.[color= #0000FF;]Left[color= #000000;])[color= #000000;]) 

                 players[color= #000000;][currentPlayer[color= #000000;]].[color= #0000FF;]Angle [color= #FF0000;]-= [color= #FF0080;]0.01f[color= #FF0000;]; 

             [color= #0000FF;]if [color= #000000;](keybState.[color= #0000FF;]IsKeyDown[color= #000000;]([color= #008000;]Keys.[color= #0000FF;]Right[color= #000000;])[color= #000000;]) 

                 players[color= #000000;][currentPlayer[color= #000000;]].[color= #0000FF;]Angle [color= #FF0000;]+= [color= #FF0080;]0.01f[color= #FF0000;]; 

 

             [color= #0000FF;]if [color= #000000;](players[color= #000000;][currentPlayer[color= #000000;]].[color= #0000FF;]Angle [color= #FF0000;]> MathHelper.[color= #0000FF;]PiOver2[color= #000000;]) 

                 players[color= #000000;][currentPlayer[color= #000000;]].[color= #0000FF;]Angle [color= #FF0000;]= [color= #FF0000;]-MathHelper.[color= #0000FF;]PiOver2[color= #FF0000;]; 

             [color= #0000FF;]if [color= #000000;](players[color= #000000;][currentPlayer[color= #000000;]].[color= #0000FF;]Angle [color= #FF0000;]< [color= #FF0000;]-MathHelper.[color= #0000FF;]PiOver2[color= #000000;]) 

                 players[color= #000000;][currentPlayer[color= #000000;]].[color= #0000FF;]Angle [color= #FF0000;]= MathHelper.[color= #0000FF;]PiOver2[color= #FF0000;]; 

 

             [color= #0000FF;]if [color= #000000;](keybState.[color= #0000FF;]IsKeyDown[color= #000000;]([color= #008000;]Keys.[color= #0000FF;]Down[color= #000000;])[color= #000000;]) 

                 players[color= #000000;][currentPlayer[color= #000000;]].[color= #0000FF;]Power [color= #FF0000;]-= [color= #FF0080;]1[color= #FF0000;]; 

             [color= #0000FF;]if [color= #000000;](keybState.[color= #0000FF;]IsKeyDown[color= #000000;]([color= #008000;]Keys.[color= #0000FF;]Up[color= #000000;])[color= #000000;]) 

                 players[color= #000000;][currentPlayer[color= #000000;]].[color= #0000FF;]Power [color= #FF0000;]+= [color= #FF0080;]1[color= #FF0000;]; 

             [color= #0000FF;]if [color= #000000;](keybState.[color= #0000FF;]IsKeyDown[color= #000000;]([color= #008000;]Keys.[color= #0000FF;]PageDown[color= #000000;])[color= #000000;]) 

                 players[color= #000000;][currentPlayer[color= #000000;]].[color= #0000FF;]Power [color= #FF0000;]-= [color= #FF0080;]20[color= #FF0000;]; 

             [color= #0000FF;]if [color= #000000;](keybState.[color= #0000FF;]IsKeyDown[color= #000000;]([color= #008000;]Keys.[color= #0000FF;]PageUp[color= #000000;])[color= #000000;]) 

                 players[color= #000000;][currentPlayer[color= #000000;]].[color= #0000FF;]Power [color= #FF0000;]+= [color= #FF0080;]20[color= #FF0000;]; 

 

             [color= #0000FF;]if [color= #000000;](players[color= #000000;][currentPlayer[color= #000000;]].[color= #0000FF;]Power [color= #FF0000;]> [color= #FF0080;]1000[color= #000000;]) 

                 players[color= #000000;][currentPlayer[color= #000000;]].[color= #0000FF;]Power [color= #FF0000;]= [color= #FF0080;]1000[color= #FF0000;]; 

             [color= #0000FF;]if [color= #000000;](players[color= #000000;][currentPlayer[color= #000000;]].[color= #0000FF;]Power [color= #FF0000;]< [color= #FF0080;]0[color= #000000;]) 

                 players[color= #000000;][currentPlayer[color= #000000;]].[color= #0000FF;]Power [color= #FF0000;]= [color= #FF0080;]0[color= #FF0000;]; 

         [color= #000000;]} 

 

         [color= #0000FF;]protected [color= #0000FF;]override [color= #0000FF;]void Draw[color= #000000;](GameTime gameTime[color= #000000;]) 

         [color= #000000;]{ 

             [color= #008000;]graphics.[color= #0000FF;]GraphicsDevice.[color= #0000FF;]Clear[color= #000000;]([color= #008000;]Color.[color= #0000FF;]CornflowerBlue[color= #000000;])[color= #FF0000;]; 

 

             spriteBatch.[color= #0000FF;]Begin[color= #000000;]([color= #000000;])[color= #FF0000;]; 

             DrawScenery[color= #000000;]([color= #000000;])[color= #FF0000;]; 

             DrawPlayers[color= #000000;]([color= #000000;])[color= #FF0000;]; 

             DrawText[color= #000000;]([color= #000000;])[color= #FF0000;]; 

             spriteBatch.[color= #0000FF;]End[color= #000000;]([color= #000000;])[color= #FF0000;]; 

 

             [color= #0000FF;]base.[color= #0000FF;]Draw[color= #000000;](gameTime[color= #000000;])[color= #FF0000;]; 

         [color= #000000;]} 

 

         [color= #0000FF;]private [color= #0000FF;]void DrawScenery[color= #000000;]([color= #000000;]) 

         [color= #000000;]{ 

             [color= #008000;]Rectangle screenRectangle [color= #FF0000;]= [color= #0000FF;]new [color= #008000;]Rectangle[color= #000000;]([color= #FF0080;]0, [color= #FF0080;]0, screenWidth, screenHeight[color= #000000;])[color= #FF0000;]; 

             spriteBatch.[color= #0000FF;]Draw[color= #000000;](backgroundTexture, screenRectangle, [color= #008000;]Color.[color= #0000FF;]White[color= #000000;])[color= #FF0000;]; 

             spriteBatch.[color= #0000FF;]Draw[color= #000000;](foregroundTexture, screenRectangle, [color= #008000;]Color.[color= #0000FF;]White[color= #000000;])[color= #FF0000;]; 

         [color= #000000;]} 

 

         [color= #0000FF;]private [color= #0000FF;]void DrawPlayers[color= #000000;]([color= #000000;]) 

         [color= #000000;]{ 

             [color= #0000FF;]foreach [color= #000000;](PlayerData player [color= #0000FF;]in players[color= #000000;]) 

             [color= #000000;]{ 

                 [color= #0000FF;]if [color= #000000;](player.[color= #0000FF;]IsAlive[color= #000000;]) 

                 [color= #000000;]{ 

                     [color= #0000FF;]int xPos [color= #FF0000;]= [color= #000000;]([color= #0000FF;]int[color= #000000;])player.[color= #0000FF;]Position.[color= #0000FF;]X[color= #FF0000;]; 

                     [color= #0000FF;]int yPos [color= #FF0000;]= [color= #000000;]([color= #0000FF;]int[color= #000000;])player.[color= #0000FF;]Position.[color= #0000FF;]Y[color= #FF0000;]; 

                     Vector2 cannonOrigin [color= #FF0000;]= [color= #0000FF;]new Vector2[color= #000000;]([color= #FF0080;]11, [color= #FF0080;]50[color= #000000;])[color= #FF0000;]; 

 

                     spriteBatch.[color= #0000FF;]Draw[color= #000000;](cannonTexture, [color= #0000FF;]new Vector2[color= #000000;](xPos [color= #FF0000;]+ [color= #FF0080;]20, yPos [color= #FF0000;]- [color= #FF0080;]10[color= #000000;]), [color= #0000FF;]null, 

player.[color= #008000;]Color, player.[color= #0000FF;]Angle, cannonOrigin, playerScaling, SpriteEffects.[color= #0000FF;]None, [color= #FF0080;]1[color= #000000;])[color= #FF0000;]; 

                     spriteBatch.[color= #0000FF;]Draw[color= #000000;](carriageTexture, player.[color= #0000FF;]Position, [color= #0000FF;]null, player.[color= #008000;]Color, [color= #FF0080;]0, 
new 

Vector2[color= #000000;]([color= #FF0080;]0, carriageTexture.[color= #0000FF;]Height[color= #000000;]), playerScaling, SpriteEffects.[color= #0000FF;]None, [color= #FF0080;]0[color= #000000;])[color= #FF0000;]; 

                 [color= #000000;]} 

             [color= #000000;]} 

         [color= #000000;]} 

 

         [color= #0000FF;]private [color= #0000FF;]void DrawText[color= #000000;]([color= #000000;]) 

         [color= #000000;]{ 

             PlayerData player [color= #FF0000;]= players[color= #000000;][currentPlayer[color= #000000;]][color= #FF0000;]; 

             [color= #0000FF;]int currentAngle [color= #FF0000;]= [color= #000000;]([color= #0000FF;]int[color= #000000;])MathHelper.[color= #0000FF;]ToDegrees[color= #000000;](player.[color= #0000FF;]Angle[color= #000000;])[color= #FF0000;]; 

             spriteBatch.[color= #0000FF;]DrawString[color= #000000;]([color= #008000;]font, [color= #A31515;]"Cannon angle: " [color= #FF0000;]+ currentAngle.[color= #0000FF;]ToString[color= #000000;]([color= #000000;]), [color= #0000FF;]new Vecto
r2[color= #000000;]([color= #FF0080;]20, 

[color= #FF0080;]20[color= #000000;]), player.[color= #008000;]Color[color= #000000;])[color= #FF0000;]; 

             spriteBatch.[color= #0000FF;]DrawString[color= #000000;]([color= #008000;]font, [color= #A31515;]"Cannon power: " [color= #FF0000;]+ player.[color= #0000FF;]Power.[color= #0000FF;]ToString[color= #000000;]([color= #000000;]), [color= #0000FF;]new Vecto
r2[color= #000000;]([color= #FF0080;]20, 

[color= #FF0080;]45[color= #000000;]), player.[color= #008000;]Color[color= #000000;])[color= #FF0000;]; 

         [color= #000000;]} 

     [color= #000000;]} 

 [color= #000000;]}

نسخة عن الدرس بصيغة ال PDF

Learn_Xna7.pdf

:wub:

#2
اقتباس
بعد ذلك سوف يظهر لديك ملف نص (ملف Xml عمليا) غريب (ما غريب إلا الشيطان :) ).

أمتأكد أن الجزء الاخير من هذه العبارة قالها الكاتب :D

أما بالنسبة للتمرين .. فهو كبير نوعا ما ..

نستطيع التعديل على ملف XML ( الغريب :D ) , وتحديد مدى يستوعب الحروف العربية .. يمكن معرفة مدى الحروف العربية من موقع unicode الرسمي .. أو من خلال برنامج " مخطط توزيع المحارف " الموجود في الويندوز ( ستجده في البرامج الملحقة ضمن أدوات النظام ) ..

post-42837-1236312930_thumb.jpg

ولكن هناك مشكلتين اثنتين :

1- البرنامج ياخذ وقت طويل في توليد الصورة .. بناء على المدى الكبير الذي حددناه .. هل يعرف أحد طريق لتحديد مدى أفضل .. مثلا نقول له من 10 الى 40 - ومن 100 الى 200 .

هنا حل مؤقت :

http://msdn.microsoft.com/en-us/library/bb...Studio.10).aspx

2- الحروف العربية منفصلة .

post-42837-1236312473_thumb.jpg

لحسن الحظ : قد انهيت كتابة مكتبة صغيرة تعالج مشكلة اللغة العربية ( كنت اريدها لمكتبة opengl , ولكن ممكن استخدامها هنا أيضا .. وهي في مراحلها الاخيرة , ++C .)

ممكن نستخدمها هنا لو لزم الأمر :D , المكتبة تقوم بربط الحروف العربية .. وأظن أنه قام احد الاخوان ( منهم على ما اظن الاخ حسن الجودي الله يذكره بالخير , بطرح مشروع مشابه ) ..

تم تعديل هذه المشاركة بواسطة الشمري في 6 مارس 2009 في 07:19

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3
اقتباس
أمتأكد أن الجزء الاخير من هذه العبارة قالها الكاتب

بتصرف ;)

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

فعلا فقد قمت ببعض البحث على الإنترنت و توصلت لنتيجة أن الكتابه باللغات الغير لاتينية يحتاج فعلا إلى مكتبات و إضافات مساعده لعمله، (بمعنى أن ال Xna لا تدعم ذلك إفتراضيا)

من جهة أخرى غالبية الأدوات التي تم تطويرها من أجانب لا تدعم اللغة العربيه (يعني فقط صينية يابنايه كوريه روسيه ..)

اقتباس
لحسن الحظ : قد انهيت كتابة مكتبة صغيرة تعالج مشكلة اللغة العربية ( كنت اريدها لمكتبة opengl , ولكن ممكن استخدامها هنا أيضا .. وهي في مراحلها الاخيرة , ++C .)

أخبرنا بنتائج تجربتها :)

#4

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

و لكن اضفت شئ بسيط , هو ظهور كلمة pause عند الضغط على p و لكن كلمة بشكل كبير

if (pause)
			{
				spriteBatch.DrawString(font, "Pause!", new Vector2((sw / 2) - 150, (sh / 2) - 200), Color.Black, 0, new Vector2(0, 0), 5, SpriteEffects.None, 0);
				spriteBatch.DrawString(font, "Click P to continue...", new Vector2(250, 50), Color.Red);
			}

لو فى حد وصل لحل مع اللغة العربية ياريت يرد

#5
اقتباس
لو فى حد وصل لحل مع اللغة العربية ياريت يرد

لو بحثت على الإنترنت ربما تجد بعض الحلول، ولكني لم أطبق أي منها!!

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