Редактируемое текстовое поле XNA - PullRequest
3 голосов
/ 16 декабря 2010

Я знаю, как рисовать текст в XNA, но я реализую дизайнер уровней, который потребует от пользователя ввода текста в пользовательский интерфейс.Я немного побродил по Google, но не смог найти, как реализовать редактируемое текстовое поле.Для этого ничего не встроено в рамки?

Ответы [ 5 ]

3 голосов
/ 16 декабря 2010

вы можете использовать какую-нибудь библиотеку графического интерфейса, например http://nuclexframework.codeplex.com

или используйте winforms http://create.msdn.com/en-US/education/catalog/sample/winforms_series_1

1 голос
/ 07 августа 2012

Если вам нужен простой способ ввода небольшого количества текста, создайте класс kbHandler

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Input;

namespace CodeName
{
public class KbHandler
{
    private Keys[] lastPressedKeys;
    public string tekst = "";

    public KbHandler()
    {
        lastPressedKeys = new Keys[0];
    }

    public void Update()
    {
        KeyboardState kbState = Keyboard.GetState();
        Keys[] pressedKeys = kbState.GetPressedKeys();

        //check if any of the previous update's keys are no longer pressed
        foreach (Keys key in lastPressedKeys)
        {
            if (!pressedKeys.Contains(key))
                OnKeyUp(key);
        }

        //check if the currently pressed keys were already pressed
        foreach (Keys key in pressedKeys)
        {
            if (!lastPressedKeys.Contains(key))
                OnKeyDown(key);
        }

        //save the currently pressed keys so we can compare on the next update
        lastPressedKeys = pressedKeys;
    }

//Create your own   
private void OnKeyDown(Keys key)
    {
        switch (key)
        {
            case Keys.D0:
                tekst += "0";
                break;
            case Keys.D1:
                tekst += "1";
                break;
            case Keys.D2:
                tekst += "2";
                break;
            case Keys.D3:
                tekst += "3";
                break;
            case Keys.D4:
                tekst += "4";
                break;
            case Keys.D5:
                tekst += "5";
                break;
            case Keys.D6:
                tekst += "6";
                break;
            case Keys.D7:
                tekst += "7";
                break;
            case Keys.D8:
                tekst += "8";
                break;
            case Keys.D9:
                tekst += "9";
                break;
            case Keys.NumPad0:
                tekst += "0";
                break;
            case Keys.NumPad1:
                tekst += "1";
                break;
            case Keys.NumPad2:
                tekst += "2";
                break;
            case Keys.NumPad3:
                tekst += "3";
                break;
            case Keys.NumPad4:
                tekst += "4";
                break;
            case Keys.NumPad5:
                tekst += "5";
                break;
            case Keys.NumPad6:
                tekst += "6";
                break;
            case Keys.NumPad7:
                tekst += "7";
                break;
            case Keys.NumPad8:
                tekst += "8";
                break;
            case Keys.NumPad9:
                tekst += "9";
                break;
            case Keys.OemPeriod:
                tekst += ".";
                break;
            case Keys.Back:
                if (tekst.Length > 0)
                {
                    tekst = tekst.Remove(tekst.Length - 1, 1);
                }                    
                break;

        }

    }

    private void OnKeyUp(Keys key)
    {
        //do stuff
    }
}
}

И в цикле обновления

kb.Update();
string text = kb.tekst;

Это действительно простой и грязный способ сделать это

1 голос
/ 16 декабря 2010

Рассматривали ли вы внедрение редактора уровней для вашей игры, добавив XNA в WinForms ?

0 голосов
/ 17 декабря 2010

Чтобы согласиться с некоторыми другими предложениями в этой теме, вы также можете использовать WPF и просто отобразить XNA в пользовательский элемент управления в xaml. Есть отличное сообщение в блоге Ника Грэйвлина о том, как это сделать, здесь:
http://blogs.msdn.com/b/nicgrave/archive/2010/07/25/rendering-with-xna-framework-4-0-inside-of-a-wpf-application.aspx

Самое замечательное в этом то, что вы можете использовать такие методы, как MVVM, чтобы написать свой редактор: -)

0 голосов
/ 16 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...