Рисование текстуры пола - PullRequest
       3

Рисование текстуры пола

3 голосов
/ 06 августа 2011

Хорошо, допустим, у меня есть текстура плитки какого-то пола или чего-то еще.И я хотел бы, чтобы мой игрок пошел на это.Как я могу установить эту плитку, чтобы сделать ее как пол?Мне нужна эта текстура плитки, чтобы она была по всей ширине экрана, верно?Как я это делаю?Спасибо

Ответы [ 2 ]

4 голосов
/ 07 августа 2011

Если вы хотите действительно простой способ, вот он: сначала вы создаете новый класс и называете его Tile:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework; // Don't forget those, they will let you
using Microsoft.Xna.Framework.Content; // access some class like:
using Microsoft.Xna.Framework.Graphics; // Texture2D or Vector2

namespace Your_Project _Name
{
    class Tile
    {
    }
{

Пока все хорошо, теперь создайте текстуру и положение в своем классе простокак это:

namespace Your_Project _Name
{
    class Tile
    {
        Texture2D texture;
        Vector2 position;

        public void Initialize()
        {
        }

        public void Draw()
        {
        }
    }
{

Как вы можете видеть, я также создал два метода, Initialize и Draw, теперь мы инициализируем нашу текстуру и положение для текстуры плитки в публичном void Initialize (), я незнаю, как вы используете ContentManager, но здесь есть простой способ:

public void Initialize(ContentManager Content)
{
    texture = Content.Load<Texture2D>("YourfloorTexture"); //it will load your texture.
    position = new Vector2(); //the position will be (0,0)
}

Теперь нам нужно нарисовать нашу текстуру несколько раз, как мы это сделаем?Сказав это, код может быть более сложным, но вы поймете, что я добавлю SpriteBatch, чтобы рисовать.Все это делается в публичном void Draw ():

public void Draw(SpriteBatch spriteBatch)
    {
        for (int i=0; i<30;i++) //will do a loop 30 times. Each Time i will = 
                                //a valor from 0 to 30.
        {
            spriteBatch.Draw(texture, position, Color.White);
            //Will draw the texture once, at the position Vector2 
            //right now position = (0,0)

            spriteBatch.Draw(texture, new Vector2((int)i,(int)i), Color.White);
            //Will Draw the texture 30 times, the first time on the position (0,0)
            //Second Time on (1,1) .. third (2,2) etc...

            spriteBatch.Draw(texture, new Vector2((int)position.X + (i * texture.Width), (int)position.Y + (i * texture.Height), Color.White));
            //Will Draw the Texture 30 times Spaced by the Width and height
            //of the texture (this is the code you need) 
        }

    }

Я не пробовал, но он должен работать, теперь это всего лишь пример, вы можете выяснить все остальное.Есть много других способов сделать это, но этот действительно прост.Хорошо, теперь последний шаг заключается в реализации этого класса, поэтому перейдите в ваш основной класс, где у вас есть весь ваш код, и перед этим:

public Game1()

Создайте новый экземпляр вашего класса плиток

Tile tile;

и инициализируйте его в защищенном переопределении void Initialize ():

tile = new Tile();
tile.Initialize(Content);

Теперь вам нужно нарисовать его на экране, пройти в конец класса и найти защищенное переопределение void Draw (GameTime gameTime)и вызовите метод draw нашего класса:

spriteBatch.Begin();
tile.Draw(spriteBatch);
spriteBatch.End();

Это все шаги для завершения простой простой системы плиток.Как я уже говорил, существует множество других методов, которые вам просто нужно прочитать, чтобы узнать о них или создать их самостоятельно.

3 голосов
/ 07 августа 2011

Если вы не планируете делать ничего лишнего с мозаичным фоном, я бы порекомендовал решение thasc и разбил спрайт за один вызов .

Для этого высоздайте прямоугольник размером с ваш фон и передайте SamplerState.LinearWrap на SpriteBatch.Begin, затем вызовите Draw на прямоугольнике фона.

Rectangle backgroundRect = new Rectangle(0, 0, backWidth, backHeight);

spriteBatch.Begin(..., ..., SamplerState.LinearWrap, ..., ...);
spriteBatch.Draw(backgroundTexture, backgroundRect, Color.White);
spriteBatch.End();

Если вам интересно, что это делает, создаетодин полигон, который покрывает фоновую область, которая будет захватывать координаты вашей текстуры от 0,0f до backWidth.Текстуры обычно отображаются между (0.0f, 0.0f) и (1.0f, 1.0f), которые представляют углы данной текстуры.Если вы выйдете за эти границы, TextureAddressMode определяет, как будут обрабатываться эти координаты:

  • Clamp урежет координаты обратно в диапазон 0-1.
  • Wrap перенесет координаты обратно в 0, поэтому 0,0 = 2,0 = 4,0 = и т. Д. И 1,0 = 3,0 = 5,0 = и т. Д.
  • Mirror также будет переносить, но зеркально отображает текстуру при каждом втором проходе, в основномидти слева направо налево и т. д.как отображается многоугольник.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...