درین آموزش به بررسی حرکت دادن اسپرایت دو بعدی در فریم وورک Monogame یا همان XNA اسبق میپردازیم.
1- یک اسپرایت شیت از یکی از سایتهای گیم است دانلود کنید.
2- یک پروژه ی مونوگیم در ویژوال استدیو باز کرده، و در کلاس بازی، این خواص را تعیین کنید:
3- سپس از اسلوب initialize این مقداردهیهای اولیه را انجام دهید:
4- در اسلوب LoadContent به این روش تکسچر را لود کنید:
5- خطوط زیر را به اسلوب آپدیت اضافه کنید. اینگونه، ما حرکت قوسی به اسپرایت میدهیم.
6- در آخر، خطوط زیر را به اسلوب draw اضافه کنید.
بازی را تست کنید و با زدن چپ و راست اسپرایت را حرکت دهید. همانطور که مشاهده میکنید حرکت قوسی است.
1- یک اسپرایت شیت از یکی از سایتهای گیم است دانلود کنید.
2- یک پروژه ی مونوگیم در ویژوال استدیو باز کرده، و در کلاس بازی، این خواص را تعیین کنید:
Code:
private Texture2D eggTexture;
private Rectangle currentCelLocation;
private SpriteEffects eEggSprEff;
private Vector2 eggPos;
private int currentCel;
private int numberOfCels;
private int msUntilNextCel;
private int msPerCel;
3- سپس از اسلوب initialize این مقداردهیهای اولیه را انجام دهید:
Code:
runnerVelocity = new Vector2(0, 0);
maxRunnerVelocity = new Vector2(5, 0);
numberOfCels = 6;
currentCel = 0;
msPerCel = 50;
msUntilNextCel = msPerCel;
currentCelLocation.X = 0;
currentCelLocation.Y = 0;
currentCelLocation.Width = 43;
currentCelLocation.Height = 70;
eggPos = new Vector2(100, 100);
4- در اسلوب LoadContent به این روش تکسچر را لود کنید:
Code:
eggTexture = Content.Load<Texture2D>("Sonic_sheet");
5- خطوط زیر را به اسلوب آپدیت اضافه کنید. اینگونه، ما حرکت قوسی به اسپرایت میدهیم.
Code:
if (Keyboard.GetState().IsKeyDown(Keys.Left))
{
if (runnerVelocity.X > -maxRunnerVelocity.X)
runnerVelocity.X -= 2.0f;
eEggSprEff = SpriteEffects.FlipHorizontally;
}
if (Keyboard.GetState().IsKeyDown(Keys.Right))
{
if (runnerVelocity.X < maxRunnerVelocity.X)
runnerVelocity.X += 2.0f;
eEggSprEff = SpriteEffects.None;
}
else
{
runnerVelocity *= 0.90f;
}
eggPos += runnerVelocity;
msUntilNextCel -= gameTime.ElapsedGameTime.Milliseconds;
float relativeVelocity = Math.Abs(runnerVelocity.X / maxRunnerVelocity.X);
if (relativeVelocity > 0.05f)
{
if (msUntilNextCel <= 0)
{
currentCel++;
msUntilNextCel = (int)(msPerCel * (2.0f - relativeVelocity));
}
}
if (currentCel >= numberOfCels)
{
currentCel = 0;
}
6- در آخر، خطوط زیر را به اسلوب draw اضافه کنید.
Code:
spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.AlphaBlend);
spriteBatch.Draw(eggTexture, eggPos, currentCelLocation, Color.White, 0.0f, Vector2.Zero, 1.0f, eEggSprEff, 1.0f);
spriteBatch.End();
بازی را تست کنید و با زدن چپ و راست اسپرایت را حرکت دهید. همانطور که مشاهده میکنید حرکت قوسی است.