بســم الله الـرحمــن الرحيــم الدرس الثالث <<== إذهب إلى الدرس السابق أهلا بكم في الدرس الثالث من سلسلة دروس تعلم ال Xna , في هذا الدرس سوف نقوم بتحديد موقع صورة في الشاشة. في الدرس السابق قمنا بعرض صورتين على كامل الشاشة. من الجلي لنا أنه من أجل عمل لعبة نحن بحاجة إلى عرض صور صغيرة على الشاشة, في الموقع الذي نحدده. و هذا هو هدفنا في هذا الدرس. في هذا الدرس نحن بصدد عرض حاملات المدافع و المدافع الخاصة بالاعبين. قبل إنتقالنا إلى الكود الخاص بالرسم , يجب علينا أولا تعريف بعض البيانات عن اللاعبين, مثل موقع اللاعب , لون اللاعب, هل اللاعب حي ام لا. لتخزين كل هذه البيانات معا , يلزمنا تعريف تركيبه “Struct” , الذي يعتبر طريقة تتيح لنا تخزين البيانات التي عرفناها. أضف هذا التركيب في أعلى الكود, مباشرة بعد تعريف فضاء الأسماء “namespace”, (إذا لم تكون واثق من الموقع ألق نظرة على الكود في نهاية الصفحة) :
public struct PlayerData { public Vector2 Position; public bool IsAlive; public Color Color; public float Angle; public float Power; }
PlayerData[] players; int numberOfPlayers = 4;
private void SetUpPlayers() { Color[] playerColors = new Color[10]; playerColors[0] = Color.Red; playerColors[1] = Color.Green; playerColors[2] = Color.Blue; playerColors[3] = Color.Purple; playerColors[4] = Color.Orange; playerColors[5] = Color.Indigo; playerColors[6] = Color.Yellow; playerColors[7] = Color.SaddleBrown; playerColors[8] = Color.Tomato; playerColors[9] = Color.Turquoise; players = new PlayerData[numberOfPlayers]; for (int i = 0; i < numberOfPlayers; i++) { players[i].IsAlive = true; players[i].Color = playerColors[i]; players[i].Angle = MathHelper.ToRadians(90); players[i].Power = 100; } }
players[0].Position = new Vector2(100, 193); players[1].Position = new Vector2(200, 212); players[2].Position = new Vector2(300, 361); players[3].Position = new Vector2(400, 164);
SetUpPlayers();
Texture2D carriageTexture; Texture2D cannonTexture;
carriageTexture = Content.Load<Texture2D> ("carriage");cannonTexture = Content.Load<Texture2D> ("cannon");
private void DrawPlayers() { foreach (PlayerData player in players) { if (player.IsAlive) { spriteBatch.Draw(carriageTexture, player.Position, Color.White); } } }
protected override void Draw(GameTime gameTime) { graphics.GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(); DrawScenery(); DrawPlayers(); spriteBatch.End(); base.Draw(gameTime); }
using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Net; using Microsoft.Xna.Framework.Storage; namespace XNAtutorial { public struct PlayerData { public Vector2 Position; public bool IsAlive; public Color Color; public float Angle; public float Power; } public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; GraphicsDevice device; int screenWidth; int screenHeight; Texture2D backgroundTexture; Texture2D foregroundTexture; Texture2D carriageTexture; Texture2D cannonTexture; PlayerData players; int numberOfPlayers = 4; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } protected override void Initialize() { graphics.PreferredBackBufferWidth = 500; graphics.PreferredBackBufferHeight = 500; graphics.IsFullScreen = false; graphics.ApplyChanges(); Window.Title = "Riemer's 2D XNA Tutorial"; base.Initialize(); } protected override void LoadContent() { device = graphics.GraphicsDevice; spriteBatch = new SpriteBatch(device); screenWidth = device.PresentationParameters.BackBufferWidth; screenHeight = device.PresentationParameters.BackBufferHeight; backgroundTexture = Content.Load ("background"); foregroundTexture = Content.Load ("foreground"); carriageTexture = Content.Load ("carriage"); cannonTexture = Content.Load ("cannon"); SetUpPlayers(); } private void SetUpPlayers() { Color playerColors = new Color[10]; playerColors[0] = Color.Red; playerColors[1] = Color.Green; playerColors[2] = Color.Blue; playerColors[3] = Color.Purple; playerColors[4] = Color.Orange; playerColors[5] = Color.Indigo; playerColors[6] = Color.Yellow; playerColors[7] = Color.SaddleBrown; playerColors[8] = Color.Tomato; playerColors[9] = Color.Turquoise; players = new PlayerData[numberOfPlayers]; for (int i = 0; i < numberOfPlayers; i++) { players[i].IsAlive = true; players[i].Color = playerColors[i]; players[i].Angle = MathHelper.ToRadians(90); players[i].Power = 100; } players[0].Position = new Vector2(100, 193); players[1].Position = new Vector2(200, 212); players[2].Position = new Vector2(300, 361); players[3].Position = new Vector2(400, 164); } protected override void UnloadContent() { } protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); base.Update(gameTime); } protected override void Draw(GameTime gameTime) { graphics.GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(); DrawScenery(); DrawPlayers(); spriteBatch.End(); base.Draw(gameTime); } private void DrawScenery() { Rectangle screenRectangle = new Rectangle(0, 0, screenWidth, screenHeight); spriteBatch.Draw(backgroundTexture, screenRectangle, Color.White); spriteBatch.Draw(foregroundTexture, screenRectangle, Color.White); } private void DrawPlayers() { foreach (PlayerData player in players) { if (player.IsAlive) { spriteBatch.Draw(carriageTexture, player.Position, Color.White); } } } } }