본문 바로가기
프로그래밍

키 이벤트 제어하기

by 건우아빠유리남편 2009. 7. 9.
반응형

그림표시도 하고 알아서 움직이게도 해봤으니..  내 맘대로 움직여볼까요

 

키보드 클래스

 

키보드정보를 가지고 있다.

static KeyboardState GetState()

키보드의 상태를 가지고 온다.

 

키보드상태 구조체

키보드 상태정보를 가지고 있다.

bool IsKeyDown(Keys key)

키가 down상태인가 여부

bool IsKeyUp(Keys key)

키가 up상태인가 여부

 

키 열거체

키 종류에 따라 다음과 같이 표시한다.

A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z

문자키

F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,
F11,F12,F13,F14,F15,F16,F17,F18,F19.F20,
F21,F22,F23,F24

기능키

NumPad0,NumPad1,NumPad2,NumPad3,NumPad4,
NumPad5,NumPad6,NumPad7,NumPad8,NumPad9,
Decimal,Divide,

숫자패드키

Up,Down,Left,Right

방향키

LeftAlt,LeftControl,LeftShift,LeftWindows
RightAlt,RightControl,RightShift,RightWindows

수식키

Add,Apps,Attn,Back,CapsLock,Crsel,
Delete,End,Enter,EraseEof,Escape,Execute,Exsel
Help,Home,Insert,Multiply,None,NumLock
Pa1,PageDown,PageUp,Play,Print,PrintScreen,
ProcessKey,Scroll,Select,SelectMedia,
Separator,Sleep,Space,Subtract,Tab,Zoom

기능키

LaunchApplication1,LaunchApplication2,LaunchMail

기동키

VolumeDown,VolumeMute,VolumeUp

볼륨 키

MediaNextTrack,MediaPlayPause,MediaPreviousTrack,MediaStop

미디어 키

BrowserBack,BrowserFavorites,BrowserForward,,
BrowserHome,BrowserRefresh,BrowserSearch,BrowserStop

브라우저 키

Oem8,OemBackslash,OemClear,OemCloseBrackets,OemComma
OemMinus,OemOpenBrackets,OemPeriod,OemPipe,OemPlus,
OemQuestion,OemQuotes,OemSemicolon,OemTilde

Oem

D0,D1,D2,D3,D4,D5,D6,D7,D8,D9

키보드에 따라 달라지는 키

 

 

소스코드 편집하기

Game1.cs를 편집한다.

 

Game1.cs

using System;

using System.Collections.Generic;

using Microsoft.Xna.Framework;

using Microsoft.Xna.Framework.Audio;

using Microsoft.Xna.Framework.Content;

using Microsoft.Xna.Framework.Graphics;

using Microsoft.Xna.Framework.Input;

using Microsoft.Xna.Framework.Storage;

 

//키 이벤트를 처리한다.

namespace XnaImage {

    public class Game1 : Microsoft.Xna.Framework.Game {

        //시스템

        private GraphicsDeviceManager graphics; 

        private ContentManager        content;  

        private SpriteBatch           spBatch;  

        private Texture2D             texture;

 

        //위치

        private int x = 100; //X좌표

        private int y = 100; //Y좌표

 

        //constructor

        public Game1() {

            //그래픽스와 컨텐트 지정

            graphics = new GraphicsDeviceManager(this);

            content  = new ContentManager(Services);

 

            //Update()를 초당 20회 부르도록 설정한다.

            IsFixedTimeStep = true;

            TargetElapsedTime = new TimeSpan(500000); //50milisec에 한번          

        }

 

        //초기화

        protected override void Initialize() {

            base.Initialize();

        }

 

        //그래픽스 컨텐츠 불러오기

        protected override void LoadGraphicsContent(bool loadAllContent) {

            if (loadAllContent) {       

                spBatch = new SpriteBatch(graphics.GraphicsDevice);

                texture = content.Load<Texture2D>("xna"); //Assent Name을 지정한다.

            }

        }

 

        //그래픽스 컨텐츠를 놓아준다.

        protected override void UnloadGraphicsContent(bool unloadAllContent) {

            if (unloadAllContent == true) {

                content.Unload();

            }

        }

 

        //업데이트

        protected override void Update(GameTime gameTime) {

            //키 상태 얻어오기

            KeyboardState keyboardState = Keyboard.GetState();

 

            //

            if (keyboardState.IsKeyDown(Keys.Left)) {

                x-=10;

            }

            //

            else if (keyboardState.IsKeyDown(Keys.Right)) {

                x+=10;

            }

            //

            if (keyboardState.IsKeyDown(Keys.Up)) {

                y-=10;

            }

            //

            else if (keyboardState.IsKeyDown(Keys.Down)) {

                y+=10;

            }           

            //종료 = ESC

            if (keyboardState.IsKeyDown(Keys.Escape)) {

                Exit();

            }

 

            //base 업데이트

            base.Update(gameTime);

        }

 

        //그리기

        protected override void Draw(GameTime gameTime) {

            //배경색지정

            graphics.GraphicsDevice.Clear(Color.White);

 

            //텍스쳐 그리기

            spBatch.Begin();

            Vector2 pos = new Vector2(x-90,y-90); //좌표지정

            spBatch.Draw(texture,pos,Color.White);

            spBatch.End();

 

            //베이스 그리기

            base.Draw(gameTime);

        }

    }

}

 

이렇게 편집 후 컴파일 하시면 상하좌우 방향키에 움직이고, ESC키를 누르면 프로그램이 종료되는 프로그램이 완성됩니다.

반응형

'프로그래밍' 카테고리의 다른 글

데이타를 스토리지에 저장하기  (0) 2009.07.09
마우스 이벤트 처리하기  (0) 2009.07.09
이미지에 애니메이션 붙이기  (0) 2009.07.09
이미지 파일 읽어오기  (0) 2009.07.09
헬로 월드! in XNA  (0) 2009.07.09

댓글