Я хочу нарисовать сетку на Windows Phone 7, используя XNA - PullRequest
1 голос
/ 04 июня 2011

Я пытаюсь нарисовать сетку на экране Windows Phone;это поможет мне лучше позиционировать свои спрайты на экране, а не угадывать места на экране.

Я нашел несколько примеров сетки (2d или 3d) с использованием XNA 3.0, но, к сожалению, архитектура отличается и поэтомукод не работает в XNA 4.0

У кого-нибудь есть что-то, что могло бы работать?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 05 июня 2011

Вы можете скачать класс PrimitiveBatch здесь http://create.msdn.com/en-US/education/catalog/sample/primitives и использовать приведенный ниже код для создания подходящей сетки в качестве текстуры.

PrimitiveBatch primitiveBatch;
private Texture2D GenerateGrid(Rectangle destRect, int cols, int rows, Color gridColor, int cellSize)
{
    int w = (int)(cols * gridCellSize);
    int h = (int)(rows * gridCellSize);

    float uselessWidth = destRect.Width - w;
    float uselessHeigth = destRect.Height - h;

    Rectangle bounds = new Rectangle((int)(uselessWidth / 2) + destRect.X, (int)(uselessHeigth / 2) + destRect.Y, w, h);

    RenderTarget2D grid = new RenderTarget2D(GraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height);

    GraphicsDevice.SetRenderTarget(grid);
    GraphicsDevice.Clear(Color.Transparent);

    primitiveBatch.Begin(PrimitiveType.LineList);

    float x = bounds.X;
    float y = bounds.Y;

    for (int col = 0; col < cols + 1; col++)
    {
        primitiveBatch.AddVertex(new Vector2(x + (col * gridCellSize), bounds.Top), gridColor);
        primitiveBatch.AddVertex(new Vector2(x + (col * gridCellSize), bounds.Bottom), gridColor);
    }

    for (int row = 0; row < rows + 1; row++)
    {
        primitiveBatch.AddVertex(new Vector2(bounds.Left, y + (row * gridCellSize)), gridColor);
        primitiveBatch.AddVertex(new Vector2(bounds.Right, y + (row * gridCellSize)), gridColor);
    }
    primitiveBatch.End();

    GraphicsDevice.SetRenderTarget(null);
return grid;
}
1 голос
/ 05 июня 2011

Возможно, вы захотите взглянуть на проект XPF от RedBadger . Это позволяет использовать макет стиля XAML в проекте XNA.

1 голос
/ 04 июня 2011

Один быстрый и грязный способ, которым вы можете сделать это (как для отладки, тем быстрее, лучше), это просто создать текстуру сетки с тем же разрешением, в котором вы используете свою игру XNA (если вы используете это в том же разрешении, что и телефон, это будет 480x800). Большая часть текстуры будет просто альфа-картой и с линиями сетки в один пиксель, вы можете создать несколько разрешений или вы можете повторить небольшую текстуру с крестиком в один пиксель, разделяющую часть экрана, которая делится на разрешение, которое вы используете. в.

Метод draw будет таким, как показано ниже, и будет называться Everyframe.

Этот код может быть объявлен внутри вашего игрового класса

Texture2D gridTexture;
Rectangle gridRectangle;

Этот код должен быть в вашем методе LoadContent

//Best to use something like a png file
gridTexture = content.Load<Texture2D>("pathto/mygridtexture");
gridRectangle = new Rectangle(0,0,resolutionX,resolutionY);

Этот метод должен вызываться из вашего метода Draw последним, чтобы убедиться, что он находится сверху, при условии, что вы просто используете стандартный spriteBatch.Begin() для рендеринга спрайтов (сначала, если вы выполняете рендеринг FrontToBack).

public void DrawGrid()
{
    spriteBatch.Draw(gridTexture, gridRectangle, Color.White);
}

Эта сетка будет оставаться неизменной на протяжении всего времени работы вашего приложения и должна быть полезна при попытке выстроить ваш пользовательский интерфейс или объекты, которые имеют относительные позиции в вашей игре.

НТН.

...