Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android上的C#单游戏-软键盘输入_C#_Android_Xamarin_Keyboard_Monogame - Fatal编程技术网

Android上的C#单游戏-软键盘输入

Android上的C#单游戏-软键盘输入,c#,android,xamarin,keyboard,monogame,C#,Android,Xamarin,Keyboard,Monogame,我正在开发一个快速的应用程序来应对android版的Xamarin/Monogame,我遇到了一个障碍。在这一点上,我需要玩家能够输入一些角色名称,并找到如何使Android软键盘在他们点击我在游戏画布上绘制的“文本框”时显示出来。我用这个方法来做,效果很好 然而,所有的键盘输入似乎都没有通过。诚然,我的姓名输入代码是有点拼凑在一起,使我的“文本框”工作,但即使是像“如果按下任何键,退出程序”这样简单的东西也不会触发。有人知道如何解决这个问题吗 这是迄今为止我在输入中获得的代码,并将其存储到na

我正在开发一个快速的应用程序来应对android版的Xamarin/Monogame,我遇到了一个障碍。在这一点上,我需要玩家能够输入一些角色名称,并找到如何使Android软键盘在他们点击我在游戏画布上绘制的“文本框”时显示出来。我用这个方法来做,效果很好

然而,所有的键盘输入似乎都没有通过。诚然,我的姓名输入代码是有点拼凑在一起,使我的“文本框”工作,但即使是像“如果按下任何键,退出程序”这样简单的东西也不会触发。有人知道如何解决这个问题吗

这是迄今为止我在输入中获得的代码,并将其存储到nameInput变量中(用于在提交时存储角色名称,也用于在输入时在播放器的文本框中显示文本)

private void GetKeys()
{
KeyboardState kbState=Keyboard.GetState();
Keys[]pressedKeys=kbState.GetPressedKeys();
//检查是否不再按下以前更新的任何键
foreach(最后按的键中的键)
{
如果(!pressedKeys.Contains(键))
OnKeyUp(key);
}
//检查当前按下的键是否已按下
foreach(按键按入按键)
{
如果(!lastPressedKeys.Contains(key))
OnKeyDown(键);
}
//保存当前按下的键,以便下次更新时进行比较
lastPressedKeys=按过的按键;
}
私有void OnKeyDown(密钥)
{
//做事
if(key==Keys.Back&&nameInput.Length>0)//如果有要删除的字母,则从名称中删除一个字母
{
nameInput=nameInput.Remove(nameInput.Length-1);
}
else if(key==Keys.LeftShift | | key==Keys.RightShift)//如果按下shift键,则将caps设置为true
{
大写=真;
}
else if(!caps&&nameInput.Length<16)//如果名称不太长,并且!caps,则将添加不带大写的字母
{
if(key==Keys.Space)
{
名称输入+=“”;
}
其他的
{
nameInput+=key.ToString().ToLower();
}
}
else if(nameInput.Length<16)//将字母添加到大写的名称中
{
nameInput+=key.ToString();
}
else if(key==Keys.Enter)
{
隐藏板();
}
}
私有void OnKeyUp(密钥)
{
//如果其中一个shift键向上,则将caps设置为false
if(key==Keys.LeftShift | | key==Keys.RightShift)
{
大写=假;
}
}

我不熟悉Monogame,但是您的角色名可以使用Android的
EditText
控件吗?
private void GetKeys()
{
    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;
}

private void OnKeyDown(Keys key)
{
    //do stuff
    if (key == Keys.Back && nameInput.Length > 0) //Removes a letter from the name if there is a letter to remove
    {
        nameInput = nameInput.Remove(nameInput.Length - 1);
    }
    else if (key == Keys.LeftShift || key == Keys.RightShift)//Sets caps to true if a shift key is pressed
    {
        caps = true;
    }
    else if (!caps && nameInput.Length < 16) //If the name isn't too long, and !caps the letter will be added without caps
    {
        if (key == Keys.Space)
        {
            nameInput += " ";
        }
        else
        {
            nameInput += key.ToString().ToLower();
        }
    }
    else if (nameInput.Length < 16) //Adds the letter to the name in CAPS
    {
        nameInput += key.ToString();
    }
    else if (key == Keys.Enter)
    {
        HideKeyboard();
    }
}

private void OnKeyUp(Keys key)
{
    //Sets caps to false if one of the shift keys goes up
    if (key == Keys.LeftShift || key == Keys.RightShift)
    {
        caps = false;
    }
}