تمرین : ترکیب ماوس و صفحه کلید
در این تمرین می خواهیم با استفاده از هر دو ورودی ماوس و صفحه کلید یک تصویر را در صفحه رسم کرده و سپس با استفاده از کلید E در صفحه کلید آن تصویر را پاک کنیم
در این تمرین ما از تصویر زیر برای تصویر رسم شده :
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
و از اشاره گر تمرین قسمت قبلی برای تغییر اشاره گر ماوس استفاده خواهیم کرد
برای شروع دو تصویر فوق را وارد پکیج بازی کنید
ابتدا ساختار تغییر ماوس که در بخش قبلی فرا گرفته ایم را دوباره انجام می دهیم .
خاصیت پنهان کرده ماوس در صفحه بازی را در متد اغازین تعریف کنید :
کد PHP:
[PHP] this.IsMouseVisible = false;
[/PHP]
* با استفاده از تکه دستور زیر می توانید Title بالایی صفحه بازی خود را تغییر بدهید
کد PHP:
[PHP]this.Window.Title = "ترکیب ماوس و صفحه کلید ";
[/PHP]
اکنون متغییر آن را تعریف کرده و تصویر را وارد کنید :
کد PHP:
[PHP]Texture 2d Arrow;
[/PHP]
کد PHP:
[PHP] Arrow = Content.Load<Texture2D>("cursor");
[/PHP]
مختصات فعلی ماوس را در دو متغییر از نوع Int قرار داده :
[PHP]
کد PHP:
MouseState M = Mouse.GetState();
x = M.X;
y = M.Y;
[/PHP]
و سپس تصویر را رسم کرده و این متغییر را به مکان تصویر نسبت می دهیم :
کد PHP:[PHP]
spriteBatch.Begin();
spriteBatch.Draw(Arrow, new Vector2(x, y), new Rectangle(0, 0, 360, 360), Color.Black, 0, new Vector2(0,0), 1.0f, SpriteEffects.None, 1);
spriteBatch.End();
[/PHP]
اکنون پروژه را اجرا کرده تا از صحت کار اطمینان حاصل کنید
پس از انجام این کار حال باید تصویر دوم را وارد کنیم .
متغییر زیر را به صورت سراسری تعریف کنید :
کد PHP:
[PHP]Texture2d Ball;
[/PHP]
و این متغییر را در متد LoadContent به وسیله تصویر توپ خودمان مقدار دهی می کنیم :
کد PHP:
[PHP] Ball = Content.Load<Texture2D>("ball");
[/PHP]
سپس ان را در متد Draw بر روی سکانس رسم می کنیم :
کد PHP:
[PHP] spriteBatch.Draw(Ball, new Vector2(0, 0), new Rectangle(0, 0, 360, 360), Color.Red, 0, new Vector2(0, 0), 1.0f, SpriteEffects.None, 1);
[/PHP]
کد PHP:[PHP]
spriteBatch.Begin();
spriteBatch.Draw(Arrow, new Vector2(x, y), new Rectangle(0, 0, 360, 360), Color.Black, 0, new Vector2(0,0), 1.0f, SpriteEffects.None, 1);
spriteBatch.Draw(Ball, new Vector2(0, 0), new Rectangle(0, 0, 360, 360), Color.Red, 0, new Vector2(0, 0), 1.0f, SpriteEffects.None, 1);
spriteBatch.End();
[/PHP]
یک بار اجرا گرفته تا خروجی را مشاهده کنید :
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در ادامه اجرا را قدم به قدم به وجود میاوریم :
ابتدا باید کاری کنیم که با کلیک ماوس بر روی سکانس تصویر ما رسم شود . برای این کار ابتدا باید تعامل با کلیک ماوس را به وجود بیاوریم :
به متد Update که مکان تعریف مختصات ماوس ما بود رجوع می کنیم. با استفاده از کلاس MouseStat شرطی را بنابر فشار داده شدن کلیک چپ ماوس ایجاد کرده :
کد PHP:[PHP]
if (M.LeftButton == ButtonState.Pressed)
{
}
[/PHP]
یک متغییر سراسری از نوع bool ایجاد کرده و خاصیت true شدن آن را در شرط بالا قرار می دهیم :
کد PHP:
bool st;
کد PHP:[PHP]
if (M.LeftButton == ButtonState.Pressed)
{
st = true;
}
[/PHP]
اکنون دوباره به متد Draw باز گشته یک ساختار جدید رسم ایجاد می کنیم و رسم توپ را در آنجا قرار می دهیم
کد بخش Draw کلاس شما به این صورت خواهد بود :
کد PHP:[PHP]
spriteBatch.Begin();
spriteBatch.Draw(Arrow, new Vector2(x, y), new Rectangle(0, 0, 360, 360), Color.Black, 0, new Vector2(0,0), 1.0f, SpriteEffects.None, 1);
spriteBatch.End();
spriteBatch.Begin();
spriteBatch.Draw(Ball, new Vector2(0, 0), new Rectangle(0, 0, 360, 360), Color.Red, 0, new Vector2(0, 0), 1.0f, SpriteEffects.None, 1);
spriteBatch.End();
[/PHP]
اکنون بخش رسم توپ را در یک شرط قرار داده و می گوییم اگر st برابر با true شد آنگاه رسم را انجام بده
کد PHP:[PHP]
if (st == true)
{
spriteBatch.Begin();
spriteBatch.Draw(Ball, new Vector2(0, 0), new Rectangle(0, 0, 360, 360), Color.Red, 0, new Vector2(0, 0), 1.0f, SpriteEffects.None, 1);
spriteBatch.End();
}
[/PHP]
حال اگر پروژه را اجرا کنیم می توانیم مشاهده کنیم که با زدن دکمه چپ ماوس تصویر بر روی سکانس رسم می شود
* سوال :
چه کار کنیم که تصویر در مختصات فعلی ماوس ما رسم شود ؟؟؟؟ (ببینم کسی بلده
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
)
حال باید وضعیت دسترسی صفحه کلید را تعریف کنیم تا بتوانیم شرط مربوط به کلید Eرا در آن به وجود بیاوریم .
در متد Update وضعیت مربوط به صفحه کلید را ایجاد کنید :
کد PHP:
[PHP] KeyboardState K = Keyboard.GetState();
[/PHP]
سپس با اضفاه کردن شرطی خواهیم گفت که اگر کلید E ما فشار داده شد متغییر bool st را برابر با false قرار بده
کد PHP:
[PHP]if (K.IsKeyDown(Keys.E))
{
st = false;
}
[/PHP]
اکنون با بازگشت به متد Draw در ادامه شرط تشکیل تصویر یک شرط دیگر قرار داده تا هنگامی که متغییر false شد تصویر را پاک کند
کد PHP:[PHP]
if (st == true)
{
spriteBatch.Begin();
spriteBatch.Draw(Ball, new Vector2(0,0), new Rectangle(0, 0, 360, 360), Color.Red, 0, new Vector2(0, 0), 1.0f, SpriteEffects.None, 1);
spriteBatch.End();
}
else if (st == false)
{
spriteBatch.GraphicsDevice.Clear(ClearOptions.Dept hBuffer, Color.CornflowerBlue, 0, 0);
}
[/PHP]
اکنون پروژه را اجرا کرده و تست کنید
* از طریق کد اورده شده در شرط دوم می توانیم اخرین رسم انجام شده را پاک کنیم
در دو مثال اخیر ما توانستیم با استفاده از قابلیت هایی که ماوس و صفحه کلید در اختیار ما قرار می دهد دو پروژه را ایجاد کنیم . برای تسلط بیشتر توصیه می کنم که تمرین های بیشتری را انجام دهید