Windows Phone 7용 게임 개발의 터치 조작 1부 터치 조작 기본 사항

페이지 업데이트 :
페이지 생성 날짜 :

윈도우 폰 7 시작

윈도우 폰 7 응용 프로그램 플랫폼

Windows Phone 7 개발 환경은 2010 년 9 월에 공식적으로 출시되었으며 실제로 Windows Phone 7을 실행하는 스마트 폰이 시장에 출시되기 시작했습니다.

図 1 :HTC から販売されている Windows Phone 7 を搭載した「HTC 7 Trophy」
그림 1 : HTC에서 판매 한 Windows Phone 7이 장착 된 HTC 7 트로피

Windows Phone 7에서 실행되는 응용프로그램을 만들 때 프로그램 프레임워크로 "Silverlight"와 "XNA 프레임워크" 중에서 선택할 수 있습니다. 일반적으로 게임 개발에는 "XNA 프레임워크"를 사용하고 도구와 같은 다른 응용 프로그램에는 "실버라이트"를 사용합니다.

이 섹션에서는 게임 개발에 XNA Framework를 사용하고 Windows Phone 7에서 가장 많이 사용되는 사용자 인터페이스인 터치 패널을 사용하는 방법을 설명합니다. 간단한 사용법은 XNA Game Studio 도움말에 설명되어 있으므로 여기서는 좀 더 자세히 설명하고자합니다.

개발 환경 준비

이 섹션은 XNA Game Studio를 약간이라도 만진 사람의 관점에서 나온 것이므로 설치 및 설정과 같은 자세한 지침은 생략하겠습니다. XNA Game Studio 및 웹과 함께 제공되는 도움말에는 많은 정보가 있으므로 직접 확인하십시오. 나는 또한 내 사이트 (http://sorceryforce.com/xna/)에 일부를 가지고있다.

図 2 :Microsoft Visual Studio 2010 Express for Windows Phone(Windows Phone Developer Tools に含まれます)
그림 2: Microsoft Visual Studio 2010 Express for Windows Phone(Windows Phone Developer Tools에 포함)

図 3 :Windows Phone エミュレーター
그림 3: 윈도우 폰 에뮬레이터

프로그래밍! - 1. 터치 정보 가져오기

이 샘플 정보

Windows Phone 7에서 사용되는 XNA 프레임 워크 버전은 "4.0"이지만 그때까지는 터치 패널에 대한 클래스가 없었으며 키보드, 마우스 및 게임 패드가 주류였습니다. 4.0부터 Windows Phone 7이 지원되었으며 터치 패널 전용 클래스가 추가되었습니다.

이 기사에서는 주로 그 클래스에 대해 설명합니다 만, 실제로 간단한 터치 위치 정보를 얻고 싶다면 터치 패널에 클래스를 사용하지 않고 다른 클래스로 대체 할 수 있습니다. "마우스"클래스입니다. 이 샘플에서는 Mouse 클래스를 사용하여 터치 정보를 가져옵니다.

이 샘플 프로그램의 목표

화면을 터치하면 터치 위치에 따라 이미지(스프라이트)가 배치됩니다.

図 3,4 :タッチした位置にスプライトが表示される 図 3,4 :タッチした位置にスプライトが表示される
그림 3,4: 스프라이트는 터치된 위치에 나타납니다.

프로그램 - 필드 선언

샘플 프로그램과 함께 바로 설명하고 싶습니다. 터치 조작과 직접적인 관련이 없는 부분과 처음부터 생성된 프로그램에 대한 설명은 생략하니 별도로 배포된 소스코드를 참고하시기 바랍니다.

public class Game1 : Microsoft.Xna.Framework.Game
{
  GraphicsDeviceManager graphics;
  SpriteBatch spriteBatch;

  /// <summary>
  /// テクスチャー
  /// </summary>
  Texture2D texture;

  /// <summary>
  /// タッチしている位置
  /// </summary>
  Vector2 touchPosition;

  public Game1()
  {

이 필드는 터치 위치에 그릴 텍스처와 터치 위치를 저장할 Vector2 구조체 변수를 선언합니다.

프로그램 - 텍스처 불러오기

질감은 이미 콘텐츠 프로젝트에 추가되었으며 LoadContent 메서드를 사용하여 로드되었습니다. 내용은 터치 패널과 직접 관련이 없기 때문에 자세한 설명은 생략합니다.

図 6 :コンテンツプロジェクトに「Texture.png」を追加しておく
그림 6: 콘텐츠 프로젝트에 텍스처 추가.png

図 7 :今回サンプルで使用する画像
그림 7: 이 샘플에 사용된 이미지

protected override void LoadContent()
{
  // 新規の SpriteBatch を作成します。これはテクスチャーの描画に使用できます。
  spriteBatch = new SpriteBatch(GraphicsDevice);

  // テクスチャーをコンテンツパイプラインから読み込む
  texture = Content.Load<Texture2D>("Texture");
}

프로그램 - 터치 정보 수집

터치 정보는 Game.Update 메서드에서 검색됩니다.

전용 클래스 대신 "Mouse"클래스를 사용하여 터치 정보를 얻고 있습니다. "Mouse.GetState" 메서드를 사용하는 경우 현재 마우스 상태가 "MouseState" 구조체로 반환되므로 "MouseState.X" 및 "MouseState.Y" 속성에서 터치 위치를 가져올 수 있습니다.

protected override void Update(GameTime gameTime)
{
  // ゲームの終了条件をチェックします。
  if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
    this.Exit();

  // マウスの状態を取得(ここではタッチパネルの簡易的な情報)
  MouseState mouseState = Mouse.GetState();

  // タッチしている位置を設定
  touchPosition = new Vector2(mouseState.X, mouseState.Y);
  base.Update(gameTime);
}

Mouse 클래스를 사용하여 터치 정보를 가져올 때 주의해야 할 한 가지는 간단한 정보만 반환한다는 것입니다. Mouse 클래스를 사용할 때 얻을 수 있는 정보에 대한 유일한 제한 사항은 "단일 터치 전용", "터치 위치(MouseState.X, MouseState.Y 속성)" 및 "터치 여부(MouseState.LeftButton)"입니다. 멀티 터치 또는 제스처를 지원하지 않습니다. 또한 터치하지 않은 위치를 얻으면 이전 터치 위치를 계속 반환합니다. 입력 정보는 터치하지 않으면 수신할 수 없기 때문에 마우스로 마우스 오버 등 위치 정보를 획득할 수 없습니다.

프로그램 - 텍스처 그리기

protected override void Draw(GameTime gameTime)
{
  GraphicsDevice.Clear(Color.CornflowerBlue);

  // スプライトの描画準備
  spriteBatch.Begin();

  // タッチしている位置にテクスチャーを描画
  spriteBatch.Draw(texture, touchPosition, Color.White);

  // スプライトの一括描画
  spriteBatch.End();

  base.Draw(gameTime);
}

이 샘플의 요약

Mouse 클래스는 터치 정보 획득을 대체하므로 이 샘플에서와 같이 터치 위치를 가져야만 정보를 얻을 수 있습니다. 반대로 터치 전용 클래스를 사용하는 경우 더 많은 정보를 얻을 수 있습니다.

따라서 Mouse 클래스를 사용하여 터치 정보를 얻는 것이 장점이 없는 것은 아닙니다. Mouse 클래스를 사용하면 다음과 같은 이점이 있습니다.

  • Windows에서 실행되는 마우스 사용 게임과 코드를 공유할 수 있습니다.
  • 최소한의 코드로 터치 위치 정보를 작성할 수 있습니다.
  • 불필요한 처리 생략 가능

단일 터치만 사용하고 터치 위치 지정만 사용하는 경우 Mouse 클래스를 사용하여 위의 이점을 활용할 수 있습니다.