월별 글 목록: 2008년 10월월

XBOX360 게임 페이블2 와 폴아웃3 를 구입

사용자 삽입 이미지 페이블2 나 폴아웃3 모두 자유도가 굉장히 높다는 점에서 굉장히 좋다. 페이블2 는 윌 라이트, 시드마이어와 함께 3대 게임 개발자로 손꼽히는 피터 몰리뉴가 만들었다고 해서 기대가 많이 된다. 그리고 폴아웃3 는 내가 굉장히 좋아하는 ‘엘더스크롤4: 오블리비언’ 을 만든 개발진을 투입하여 만들었다는 점에서 많은 점수를 주고 있다. 그러나 폴아웃3 는 영문판이기 때문에 열심히 영어 공부와 공략집을 보면서 해야 할 것 같다.

사용자 삽입 이미지
 레드얼럿3 도 10월 말에 발매가 된다고 하고, WOW확장팩, 아이온과 같은 온라인 게임들도 앞으로 나올 예정이니 올 연말은 게임 때문에 바쁠 것 같다.

실버라이트와 C# 프로그래밍 – 3

사용자 삽입 이미지
실버라이트2 정식 버전 TOOL 한글판이 나왔습니다. 그래서 기존에 Beta2 로 개발 된 소스를 정식 버전으로 마이그레이션 하는 작업을 하였습니다. 결론적으로 App.xaml 에 있는 내용을 다 날렸고 UI를 새로 만들게 되었습니다. Beta2 와 정식 버전이 많이 바뀌어서 에러 없이 컴파일하더라도 정상적으로 화면이 나올 것 같지 않아서 엎어버렸습니다. 실버라이트2 정식버전 TOOL 은 [이곳] 에서 받으실 수 있습니다.

 

 기존에 Beta2 로 개발을 하셨다면 실버라이트2 정식 버전을 사용하려면 프로그램 추가/제거에서 Beta2 와 관련된 리스트를 모두 삭제하고 설치를 하시는 것이 좋습니다. 저의 경우 실버라이트 런타임을 비롯한 3가지를 삭제하였습니다. 그리고 나서 위에서 받은 TOOL을 설치하면 런타임부터 SDK 까지 개발에 필요한 모든 것이 설치됩니다. 실버라이트 런타임의 경우 유저용을 받아서 설치하게 되면 정상적으로 Debuging 을 하지 못한다고 합니다. 그리고 모두 삭제하고 새로 설치해야 실버라이트 Beta2 로 개발한 프로젝트를 열었을 때 마이그레이션을 자동으로 할 것인지 물어본다고 합니다.

 현재 나온 정식 버전은 RC1 이지만 RC0 에 대한 정보들도 도움이 충분히 될 것 같습니다. 기타 여러 가지 어려운 점이 많겠지만 영어 문서나 GOOGLE 에서 검색을 해보면 영문이지만 어느 정도 도움을 받을 수 있을 것입니다. 그래도 실버라이트와 관련하여 안풀리는 정보가 있다면 카페를 통해서 다른 분들께 도움을 받을 수 있을 것입니다.

1040592706.zip
일단 저번에 올렸던 소스(http://www.dingpong.net/tt/179)에서 기존에 UI 부분을 제거하여 컴파일되도록 만든 소스입니다. 그리고 공개되어 있는 UI 소스인 Dave’s Glossy Controls For Silverlight(http://cafe.naver.com/mssilverlight/3182) 를 붙였습니다. 지금은 Blend 2 SP1 Preview 한글버전이 나오지 않아서 UI 를 만들지 못하였는데 나중에 로그인과 채팅에 필요한 UI 를 만들어서 붙이면 될 것 같습니다.

실버라이트와 C# 프로그래밍 – 2

사용자 삽입 이미지
 안녕하세요. 두 번째 실버라이트에 관련 된 글입니다. 저번 글에서 실버라이트 개발 환경설정을 소개하였습니다. 그런데 글을 쓰는 오늘(10월 14일) 실버라이트2 정식 버전이 출시 되었다고 합니다. 저번 글을 실버라이트2 Beta2 를 기준으로 작성했는데 다음날 실버라이트2 정식 버전이 출시 되어서 조금 당황이 되는 기분이네요. 그래도 도움이 되실 분들이 있으리라 생각합니다. 어쨌든 그래서 이번 글의 첫 부분에서는 실버라이트2 정식 버전에 관련 된 뉴스와 설정에 대해서 링크를 소개합니다. 사실 아직 한글 버전이 출시 되지 않았기 때문에 저도 설치를 해보지 않은 상태입니다. 한글 버전은 약 일주일 정도 후에 출시되지 않을까 생각합니다.
 실버라이트2 와 관련된 이야기는 http://cafe.naver.com/mssilverlight.cafe 실버라이트 정보 공유 카페에서 활발하게 진행이 되고 있습니다. 이 카페에 방문하시면 많은 정보를 얻으실 수 있을 것 같습니다. 이클립스에서 실버라이트 플러그인을 지원한다는 얘기 등이 눈에 띄고 있습니다.
 오늘은 C#으로 실버라이트를 이용한 프로그램을 만들 때 도움이 될만한 기초 팁이나 정보 몇 가지를 소개해 드리고자 합니다.
1. 실버라이트와 C#으로 개발한 프로그램 배포하기
 실버라이트는 웹에서 실행되기 때문에 웹 서버가 필요합니다. 자체서버를 구축할 수도 있고 웹 호스팅을 받는 방법도 있습니다. 개인이라면 대부분 후자 쪽을 선택하리라 생각합니다. 웹 호스팅 업체는 무척 많습니다. 호스팅 업체를 선택해서 웹 호스팅을 받고 FTP 접속해서 자신이 개발한 파일을 올리면 됩니다. 실버라이트 프로젝트를 만들면 웹 프로젝트와 함께 만들어지는데 해당 폴더를 올리면 쉽게 실행시킬 수 있습니다. 실제 실행되는 파일은 .xap 라고 생각이 됩니다. 올리고 나서 HTML 페이지에 접속하면 실버라이트가 실행됩니다.
2. 실버라이트 런타임이 없는 사용자가 실버라이트로 개발한 프로그램을 실행하기
 실버라이트 런타임이 설치되어 있지 않은 컴퓨터에서는 실버라이트 프로그램이 있는 웹 페이지에 접속하면 실버라이트 런타임을 설치하는 페이지 링크가 달린 이미지가 나오게 될 것입니다. 웹 페이지마다 이용하는 실버라이트 버전이 다를 수 있기 때문에 이 링크는 HTML 페이지에서 수정을 할 수 있습니다. HTML 페이지에 보면 <a href 태그를 이용한 링크가 있는 것을 볼 수 있는데 이 링크 URL을 수정하면 됩니다. 만약 Beta 버전으로 프로젝트를 만들다가 정식 버전이 나왔다면 이때 정식 버전을 받을 수 있는 페이지로 수정되었는지 확인해야합니다.
3. UserControl 에서 다른 UserControl 을 자신의 화면에 띄우기
 제목이 살짝 애매한 것 같습니다. 윈도우 프로그래밍을 생각하면 부모와 자식 윈도우의 관계를 실버라이트로 보여주려면 어떻게 하는 것이 좋을지에 대한 것입니다. 실버라이트도 하나의 컨버스에 모든 UI와 화면을 표현할 수 없어서 여러 개의 컨버스를 만들게 되고 UserControl 이 그런 역할을 하게 됩니다. 어떤 AccountUI 이라는 UserControl 을 자신의 UserControl 에 붙이고 싶다고 합시다.
public AccountUI accountUI = null;
        public UIControl()
        {
            InitializeComponent();
            accountUI = new AccountUI();
            this.LayoutRoot.Children.Add(accountUI);
        }
이렇게 자식으로 Add를 하게 되면 UIControl 이라는 UserControl 안에 AccountUI 라는 UserControl 이 작동하게 됩니다. 간단하게 코드로 작업할 수 있습니다.
4. xaml 코드와 c# 코드에서 각각 이벤트 처리하기
 
        private void btnChat_Click(object sender, RoutedEventArgs e)
        {
            Page.Instance.logicClient.SendChatMsg(ChatTextBox.Text,
 ChatNickTextBox.Text);
        }
 위와 같이 버튼을 클릭 했을 때 동작해야하는 코드가 있다고 합시다. xaml 에서 이 이벤트를 연결시켜 줄 수도 있고 C# 코드에서도 할 수 있습니다. 밑에는 xaml 의 예제를 보여주고 있습니다.
<Button Style=”{StaticResource ButtonStyle}” Content=”Chat” Click=”btnChat_Click” Width=”55″ x:Name=”ChatButton”/>

 개인적으로 C# 코드에서 하는 것을 선호합니다 그 이유는 여러 가지가 있지만 실수를 막기 위함이 가장 큰 것 같습니다. 프로그래머에게 더 명시적이라고 생각합니다.
        public AccountUI()
        {
            InitializeComponent();
         ChatButton.Click += btnChat_Click;
        }
 위와 같이 x:Name 으로 선언한 이름을 인스턴스로 하여 Click 이라는 맴버 변수에 함수 포인터를 + 해주는 것이라고 생각합니다. 저렇게 코드로도 위에서 봤던 xaml 과 같은 작동을 하도록 할 수 있습니다.
 추가적으로 Keydown 이벤트는 KeyDown=”ChatBox_KeyDown” 과 같이 xaml 에서 추가하여 사용 할 수 있고 ChatButton.KeyDown += ChatBox_KeyDown; 과 같이 하여 사용 할 수 있습니다. 그리고 Keydown 의 함수는 구현은 아래와 같습니다.
        /// <summary>
        /// 채팅창에서 엔터를 눌렀을 때 버튼과 같은 효과를 내도록 한다.
        /// </summary>
        /// <param name=”sender”></param>
        /// <param name=”e”></param>
        private void ChatBox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                btnChat_Click(sender, null);
            }
        }    
5. Blend 툴로 만든 스토리보드를 코드로 제어하기

 Blend 툴로 스토리보드를 이용하여 동작을 만들었다면 그것을 적절한 시기에 코드에서 실행을 해주거나 멈추거나 제어를 하고 싶을 때가 있을 것입니다.

LoginSuccess.Begin();

 단순히 스토리보드이름.Begin(); 을 하면 실행이 됩니다. 다만, 코드에 따라서 Begin() 을 했음에도 동작이 실행되지 않는 경우가 있었습니다. UserControl 이 아닌 다른 class 함수에서 호출했을 때 그렇게 동작이 실행되지 않았습니다. 그래서 Dispatcher.BeginInvoke 함수를 이용하여 Begin() 을 호출하는 함수를 인자로 넣어주니 작동을 하였습니다. 그런 부분만 조금 조심한다면 사용하는 것 자체는 무척 쉽습니다. 그리고 스토리보드를 특정 타겟을 지정해서 동작하게 할 수 있습니다.
        private void AnimateBall(Image onBall, Image offBall)
        {
            Page.Instance.FadeIn.Stop();
            Storyboard.SetTarget(Page.Instance.FadeInAnimation, onBall);
            Storyboard.SetTarget(Page.Instance.FadeOutAnimation, offBall);
            Page.Instance.FadeIn.Begin();
        }

 위와 같은 경우가 그 예제라고 할 수 있습니다. 이미지를 타겟으로 설정하여 애니메이션을 정지하고 재생할 수 있습니다.

 위의 내용들은 실버라이트2 Beta2 를 기준으로 하고 있기 때문에 다른 버전에서는 문제가 있을 수 있습니다. 혹시 문제가 발생하면 버전을 확인해 주시길 바랍니다.