Jump to content

  • Log In with Google      Sign In   
  • Create Account


There has to be a better way... (to get text)


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
6 replies to this topic

#1 viper110110   Members   -  Reputation: 584

Like
1Likes
Like

Posted 14 March 2013 - 07:46 PM

Is there a better way to do the following?

 

I tried importing Microsoft.VisualBasic and then using Interaction.InputBox() but it sometimes crashed and otherwise froze the game.

 

string text = string.Empty;

            if (IsNewKeyPress(Keys.A))
            {
                if (CurrentKeyboardState.IsKeyDown(Keys.LeftShift) || CurrentKeyboardState.IsKeyDown(Keys.RightShift))
                {
                    text += "A";
                }
                else
                {
                    text += "a";
                }
            }
            if (IsNewKeyPress(Keys.B))
            {
                if (CurrentKeyboardState.IsKeyDown(Keys.LeftShift) || CurrentKeyboardState.IsKeyDown(Keys.RightShift))
                {
                    text += "B";
                }
                else
                {
                    text += "b";
                }
            }
           //Through z, plus numbers

 



Sponsor:

#2 slicer4ever   Crossbones+   -  Reputation: 3519

Like
0Likes
Like

Posted 14 March 2013 - 11:22 PM

depends on how IsNewKeyPress is implemented, can you capture key changes, or do you poll the entire keyboard?

 

in my keyboard implementation, i store an array of characters that recently changed, so i go over that list, and add the characters to my input field.

 

however, if you don't have any indication of what keys have changed, at best loop over the keys:

 

 

 //assuming ascii key chart, and first key is something like 32, and last key is something like 96 in ascii key chart.
 for(int i=FIRST_KEY;i<=LAST_KEY;i++){
  if(IsNewKeyPress(i)){
   if(LeftShift || RightShift) text+=upper(i); //upper returns an uppercase if possible, otherwise returns i. Also I stream-lined your left/right shift check.
   else text+=i;
 }
}

Edited by slicer4ever, 14 March 2013 - 11:23 PM.

Check out https://www.facebook.com/LiquidGames for some great games made by me on the Playstation Mobile market.

#3 Poigahn   Crossbones+   -  Reputation: 518

Like
0Likes
Like

Posted 15 March 2013 - 02:32 AM

I am a little rusty on the VB so I will just pseudo code.

 

  Variable = Keypressed

   If ASC(Variable) => 32 and ASC(Variable) =<57 then string = string + Variable

 

  Be sure though to check for other keys as well, such as "ENTER" - "BACKSPACE" - "DELETE"


Your Brain contains the Best Program Ever Written : Manage Your Data Wisely !!


#4 viper110110   Members   -  Reputation: 584

Like
0Likes
Like

Posted 15 March 2013 - 09:28 AM

Ya, I don't have any indication of what keys have changed, and IsNewKeyPress is implemented as checking the current and previous state to see if it was up and is now down. I don't think I can rely on the ascii table for all my keyboard buttons, but I guess I could replace the letters with a loop and then convert to upper case if shift is pressed. The other issue is that Keys is defined as an Enum of all the keyboard buttons.

 

I should also clarify that I am using c# and XNA. The keyboard state is coming from XNA.



#5 slicer4ever   Crossbones+   -  Reputation: 3519

Like
0Likes
Like

Posted 15 March 2013 - 11:32 AM

if the Enum is numerically in order, you can typedef the integer i to the Keys Enum.


Edited by slicer4ever, 15 March 2013 - 11:34 AM.

Check out https://www.facebook.com/LiquidGames for some great games made by me on the Playstation Mobile market.

#6 CC Ricers   Members   -  Reputation: 623

Like
0Likes
Like

Posted 15 March 2013 - 11:59 AM

XNA generally does not have the best design to get keyboard input if you need to buffer a lot of key presses for typing longer strings. This article explains why. It gives you a better alternative that doesn't use long if statements, Dictionaries or Enum assignments.


The sample code is actually pretty simple. It basically looks for Windows message codes related to key presses.


My development blog: Electronic Meteor

#7 Poigahn   Crossbones+   -  Reputation: 518

Like
0Likes
Like

Posted 15 March 2013 - 03:15 PM

If you are going to use ASCII for letter checking, VB should catch that and automatically switch to upper case.

 

Write a simple test program to verify.


Your Brain contains the Best Program Ever Written : Manage Your Data Wisely !!





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS