تبلیغات
پرسه در بازی سازی - آموزش مونوگیم - محدود کردن آبجکت به ابعاد صحنه

در این آموزش به شما نشان خواهم داد که چطور یک آبجکت را به ابعاد صفحه محدود کنید. یعنی اگر ابجکت حرکت کرد، وفتی به مرز صفحه نزدیک شد به جای این که از صفحه خارج شود، متوقف می شود. 
برای شروع  یک پروژه ویندوز مونوگیم ایجاد کنید. در solution explorer در فولدر Content  روی content کلیک کنید تا pipeline اجراشود و در آن یک تصویر وارد کنید.( در آموزش های قبلی توضیح داده ام) و نام آم را image بگذارید.
وارد محیط کد شوید و در کلاس Game1 یک Texture2D و دو متغیر int به نام های imageX و imageY ایجاد کنید.
در متد Initialize به متغیرهای imageX  و imageY مقادیر 100 را بدهید و در متد LoadContent تصویر image را برای Texture2D  که نام image دارد، انتخاب کنید: 

 protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);
            image = Content.Load<Texture2D>("image");
            // TODO: use this.Content to load your game content here
        }

حال برای این که بتوانیم مفهوم را نشان دهیم به image یک حرکت ساده می دهیم. در این متد مقدار imageX را در هر فریم به اندازه 5 واحد افزایش میدهیم. در این جا یک شرط اضافه میکنیم تا حرکت آبجکت را را محدود کنیم. در این شرط از  graphics.PreferredBackBufferWidth استفاده کردم که عرض صفحه بازی را مشخص میکند. (متغیر graphics.PreferredBackBufferHeight نیز برای طول یا ارتفاع صفحه استفاده می شود). این کد میگوید اگر مقدار imageX از عرض صفحه بیشتر شد، مقدار آن را با مقدار عرض صفحه منهای عرض خود تصویر قرار بده تا تصویر از صفحه بیرون نرود. متد Update را به این شکل تغییر دهید. 

 protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
                Exit();
            imageX += 5;

            if (imageX > graphics.PreferredBackBufferWidth - image.Width )
            {
                imageX = graphics.PreferredBackBufferWidth - image.Width;
            }
            // TODO: Add your update logic here

            base.Update(gameTime);
        }

و برای رسم تصویر متد Draw به این شکل باشد :

 protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);
            spriteBatch.Begin();
            spriteBatch.Draw(image,new Vector2(imageX,imageY),Color.White);
            spriteBatch.End();
            // TODO: Add your drawing code here

            base.Draw(gameTime);
        }

اگر بازی را اجرا کنید باید نتیجه چیزی شبیه به این باشد : 

نتیجه کار


نظرات()   
   
تبادل لینک
یکشنبه 9 آبان 1395 03:44 ب.ظ
نینجا لینک شما را به صورت سه طرفه به تبادل لینک دعوت می نماید
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر
نظرات پس از تایید نشان داده خواهند شد.
آخرین پست ها

کانال آموزش طراحی بازی..........چهارشنبه 17 آذر 1395

نسخه بتا یونیتی ۵.۵..........پنجشنبه 11 آذر 1395

هیولا دات کام، بستر توزیع بازی های کامپیوتری به صورت آنلاین..........پنجشنبه 27 آبان 1395

ساخت فایل exe از فایل سی شارپ بدون ویژوال استدیو..........چهارشنبه 12 آبان 1395

آموزش مونوگیم - محدود کردن آبجکت به ابعاد صحنه..........یکشنبه 9 آبان 1395

توپ قرمز مسطح یا Flat Red Ball- انجین بازی دوبعدی به زبان سی شارپ..........پنجشنبه 6 آبان 1395

طراحان مطرح دنیای بازی - ریچارد گریوت..........شنبه 1 آبان 1395

طراحان مطرح دنیای بازی - گری گایگکس Gary Gygax..........چهارشنبه 28 مهر 1395

بهبود کیفیت آموزش ها با GifCam..........دوشنبه 26 مهر 1395

طراحان مطرح دنیای بازی - پیتر مولینیو..........جمعه 23 مهر 1395

طراحان مطرح دنیای بازی - ریچارد گارفیلد..........پنجشنبه 22 مهر 1395

طراحان مطرح دنیای بازی - وارن اسپکتور..........چهارشنبه 21 مهر 1395

طراحان مطرح دنیای بازی - سید میر..........سه شنبه 20 مهر 1395

طراحان مطرح دنیای بازی - ویل رایت..........دوشنبه 19 مهر 1395

طراحان مطرح دنیای بازی - شیگرو میاماتو..........یکشنبه 18 مهر 1395

همه پستها