2013-03-23 39 views
5

Gần đây tôi đã bắt đầu tạo trò chơi video bằng cách sử dụng studio trò chơi XNA 4.0. Tôi đã tạo một menu chính với 4 phông chữ bằng cách sử dụng một danh sách nút. Chúng đổi màu từ Trắng sang Vàng khi tôi nhấn mũi tên lên và xuống.Điều hướng menu chính/tốc độ nhập bàn phím quá nhanh

Vấn đề của tôi là khi tôi cuộn qua nó từ phông chữ trên xuống phông chữ phía dưới thật nhanh và đi thẳng đến phông chữ cuối cùng. Tôi không chắc tại sao lại như vậy? Có phải vì tôi đang đặt nó trong phương thức cập nhật và nó gọi nó cứ 60 giây một lần hay lâu hơn?

Đây là mã của tôi khi tôi nhấn các phím mũi tên.

public void Update(GameTime gameTime) 
    { 
     keyboard = Keyboard.GetState(); 

     if (CheckKeyboard(Keys.Up)) 
     { 
      if (selected > 0) 
      { 
       selected--; 
      } 
     } 
     if (CheckKeyboard(Keys.Down)) 
     { 
      if (selected < buttonList.Count - 1) 
      { 
       selected++; 
      } 
     } 

     keyboard = prevKeyboard; 
    } 

    public bool CheckKeyboard(Keys key) 
    { 
     return (keyboard.IsKeyDown(key) && prevKeyboard.IsKeyUp(key)); 
    } 

Tôi cần ai đó giúp tôi làm chậm tốc độ hợp lý.

Nếu bạn có thể giúp tôi, nó sẽ được đánh giá cao.

+0

Vui mừng khi thấy một người dùng mới trên SO. Để bạn biết, chúng tôi thích rằng bạn không sử dụng Cảm ơn. – yumaikas

Trả lời

1

Tôi nghĩ vấn đề là vì bạn không đặt prevKeyboard chính xác.

Hãy thử điều này:

public void Update(GameTime gameTime) 
{ 
    keyboard = Keyboard.GetState(); 

    if (CheckKeyboard(Keys.Up)) 
    { 
     if (selected > 0) 
     { 
      selected--; 
     } 
    } 
    if (CheckKeyboard(Keys.Down)) 
    { 
     if (selected < buttonList.Count - 1) 
     { 
      selected++; 
     } 
    } 

    prevKeyboard = keyboard; // <=========== CHANGE MADE HERE 
} 

public bool CheckKeyboard(Keys key) 
{ 
    return (keyboard.IsKeyDown(key) && prevKeyboard.IsKeyUp(key)); 
} 
+0

Nó hoạt động. Cảm ơn vì đã giúp tôi ra ngoài. – hunteroatway17

+0

@ hunteroatway17 Không sao cả. Đừng quên đánh dấu câu trả lời đúng để toàn bộ cộng đồng SO có thể hưởng lợi. – rhughes

-1

Tôi nghĩ nó vì

if (CheckKeyboard(Keys.Up)) 
    { 
     if (selected > 0) 
     { 
      selected--; 
      // This loops executes so quick before you release button. 
      // Make changes here to stop the loop if the button is pressed and loop 
      // executed once.(May be) just **return;** would do ? 
     } 
    } 
    if (CheckKeyboard(Keys.Down)) 
    { 
     if (selected < buttonList.Count - 1) 
     { 
      selected++; 
      // This loops executes so quick before you release button. 
      // Make changes here to stop the loop if the button is pressed and loop 
      // executed once.(May be) just **return;** would do ? 
     } 
    } 
Các vấn đề liên quan