آموزش حرکت قوسی دادن اسپرایت با انیمیشن در Monogame یا همان XNA

Aurlito

Gold User
Feb 16, 2008
3,044
1,511
نام
چوبک
درین آموزش به بررسی حرکت دادن اسپرایت دو بعدی در فریم وورک Monogame یا همان XNA اسبق میپردازیم.

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();
بازی را تست کنید و با زدن چپ و راست اسپرایت را حرکت دهید. همانطور که مشاهده میکنید حرکت قوسی است.
 
  • Like
Reactions: MASOUD-CRASH

کاربرانی که این گفتگو را مشاهده می‌کنند (کاربران: 0, مهمان: 1)

Top
رمز عبور خود را فراموش کرده اید؟