2012-12-03 1 views
0

사용자가 키보드를 눌렀을 때 그려진 텍스처를 변경하는 방법을 보여줄 수 있습니까? 기본적으로XNA Draw 변경 플레이어가 키보드를 사용할 때

I가 5 개 스프라이트 이미지 stood still, up, down, left, right 왼쪽 사각형 이동 버튼을 눌렀을 그리기 방법입니다 같은 keys.left 것처럼 내 첫 번째 시도는 업데이트 방법에 부울 조건을 만드는 것이 었습니다

왼쪽으로 움직이는 캐릭터를 그리기 위해서 제 문제는 그 사람의 질감입니다 stood still 다른 방향으로 움직일 때 그 부분은 사라지고 똑같이 겹칩니다.

다른 구문을 시도했지만 기타 기본적인 동작을 고수했습니다.

답변

1

그래서이 매우 의사 코드입니다, 그러나 이것은

먼저 우리는 선수에 대한 모든 정보를 포함 클래스를 만드는 것이 수행하는 방법 기본적인 접근 방법이다. 건강, 점수 등을 추가 할 수 있습니다. 여기에 중요

class Player 
{ 
    Texture2D Sprite; 
    Vector2 Position; 
    Vector2 Velocity; 
    static const float PlayerSpeed = 5; 
} 

는 (위 스프라이트의 왼쪽)이 위치는 속도 우리가 사용하고자하는 우리의 질감과 스프라이트 (변경 매초마다의 양)입니다. 물론 하나의 플레이어 텍스처 만 사용하고 그에 따라 소스 rect를 수정하는 것이 좋습니다.

입력 처리가 완료되었습니다.

void OnKeyboard(GameTime aGameTime, KeyArg aKey) 
{ 
    if(aKey == Keys.Left) 
    { 
     mPlayer.Velocity = new Vector2(-Player.PlayerSpeed, 0); 
     mPlayer.Sprite = TextureManager.GetTexture("left_player"); 
    } 
    else if(aKey == Keys.Right) 
    { 
     mPlayer.Velocity = new Vector2(Player.PlayerSpeed, 0); 
     mPlayer.Sprite = TextureManager.GetTexture("right_player"); 
    } 

    mPlayer.Position += aGameTime.EllapsedMiliseconds * mPlayer.Velocity; 
} 

여기서는 어떤 키를 눌렀는지 확인하고 속도를 수정하고 플레이어의 현재 스프라이트를 변경합니다. 최종 라인이 가장 중요한 라인이며, 이는 프레임의 경과 시간으로 수정 된 속도를 사용하여 플레이어 위치를 수정합니다. 그렇게하면 프레임 속도의 불일치에도 불구하고 안정된 움직임을 유지할 수 있습니다.

void Render() 
{ 
    Sprite.Draw(mPlayer.Sprite, mPlayer.Position); 
} 

마지막으로 렌더링, 스프라이트를 렌더링하는 방법은 명확해야합니다. 여기서는 스프라이트와 위치를 사용합니다. 텍스처 스위치를 최소화하고, 알파를 사용하여 스프라이트를 처리하며, 키보드의 가장 중요한 핸들링과 같이 개선 할 여지가 많이 있습니다. 꾸준히 위치를 조정해야하지만 구현 방법에 따라 움직임이 원하는 반복 속도에 달려있을 수 있습니다.

관련 문제