2012-04-03 9 views
1

Ich schreibe ein einfaches Spiel in XNA, wo Sie ein Sprite mit WSAD bewegen. Das Problem ist, wenn zwei Tasten der gleichen Richtung gleichzeitig gedrückt werden, wird die Bewegung abgebrochen und das Zeichen bewegt sich nicht. Ist es möglich, einen Schlüssel manuell auf "freigegeben" zu setzen, um dies zu vermeiden? Hier ist der Schlüssel Bewegungscode:XNA Schlüssel zur Freigabe?

if (newKeyState.IsKeyDown(Keys.W)) 
{ 
    position.Y -= vel; 
} 
if (newKeyState.IsKeyDown(Keys.S)) 
{ 
    position.Y += vel; 
} 
if (newKeyState.IsKeyDown(Keys.A)) 
{ 
    position.X -= vel; 
} 
if (newKeyState.IsKeyDown(Keys.D)) 
{ 
    position.X += vel; 
} 

Antwort

1

Ist es möglich, einen Schlüssel zur Freigabe manuell eingestellt, dies zu vermeiden?

Nein. Sie können es jedoch in einen else-if ändern. In diesem Fall wird W & & S gedrückt, dann zählt nur W. Sie können dies ändern, indem Sie den zuerst aktivierten Schlüssel ändern.

if (newKeyState.IsKeyDown(Keys.W)) { 
    position.Y -= vel; 
} else if (newKeyState.IsKeyDown(Keys.S)) { 
    position.Y += vel; 
} else if (newKeyState.IsKeyDown(Keys.A)) { 
    position.X -= vel; 
} else if (newKeyState.IsKeyDown(Keys.D)) { 
    position.X += vel; 
} 

Wenn Sie nur eine Richtung auf jeder Achse verschieben möchten.

if (newKeyState.IsKeyDown(Keys.W)) { 
    position.Y -= vel; 
} else if (newKeyState.IsKeyDown(Keys.S)) { 
    position.Y += vel; 
} 

if (newKeyState.IsKeyDown(Keys.A)) { 
    position.X -= vel; 
} else if (newKeyState.IsKeyDown(Keys.D)) { 
    position.X += vel; 
} 
1

Der Schlüssel Zustand (newKeyState im obigen Code) stellt den tatsächlichen physikalischen Zustand der Tastatur, so ist es weder möglich noch wünschenswert, ein Schlüssels des Zustand freigegeben zu setzen, wenn der Benutzer nach wie vor es nach unten drücken wird. Es gibt jedoch einige Alternativen, mit denen Sie das gewünschte Endergebnis erreichen können:

1) Sie können Ihren Code, z.

if(newKeyState.IsKeyDown(Keys.W)) 
{ 
    position.Y -= vel; 
} 
else if(newKeyState.IsKeyDown(Keys.S)) 
{ 
    position.Y += vel; 
} 
// etc. 

2) Sie können Ihren eigenen Zustand (das heißt eine im Cache gespeicherte Version von newKeyState) und stellen Sie Schlüssel halten, um dadurch freigegeben.