반응형

좀 바빠지다보니 ㅠㅠ

오랜만에 포스팅을 하게 되네요~


지금까지는 시간의 개념이 빠진채,


사용자가 입력을 하면 결과를 뱉어(출력해)내고,

또 다시 사용자가 입력을 하면 결과를 뱉어내는..

말그대로 정적인 프로그래밍만 했다면,


오늘 타이머 개체를 배우고나면 동적인 프로그래밍이 가능하실 겁니다~


그럼 정/동적인 프로그래밍이 뭐냐~!


음...알기 쉽게 게임을 만든다고 가정하고 설명드릴게요.


사용자가 용사가 되어 괴물을 잡는 게임을 제작한다고 가정해보아요.


그럼 사용자가 컨트롤하는 캐릭터가 있을테고,

좌, 우, 상, 하, 점프...등등의 사용자의 입력을 받으면 캐릭터가 움직이겠죠?

반대로 사용자가 입력이 없을때는 캐릭터는 가만히 있겠죠.

이 부분에 대해서는 전혀 상관이 없는데,


그럼 사용자가 움직임을 입력했을때, 시간의 개념이 없다면 바로 움직이는 결과만 화면만 출력이 될거에요.


그러나 보통 그런게임은 요즘 흔치 않죠. (16이하 bit의 컴퓨터때도 흔하지 않았음.)





그럼 결국 시간의 흐름에 따라 입력된 값대로 캐릭터를 부드럽게 움직이게 하면

좀더 역동적으로, 동적인 게임을 만들 수 있게 되겠죠.


결국 캐릭터가 움직이는 모션은

'시간'이란 개념을 통해서 그림을 하나씩 표현하고,

해당 좌표로 이동해줘야 하겠죠?


예를들어,

자, 그러면 총 3개의 움직임이 추가가 되었죠?

사용자가 키를 입력하면 위의 '타이머'개념이 없는 것 보다는

좀 더 움직이는 것처럼 역동적으로 보여 질 거에요.


저 하나하나의 움직임을 프레임,(Frame) 이라고 불러요

요즘 3D 게임에 보면 Fps 라는 개념이 있는데

이게 바로 Frame per second 라고.

초당 보여지는 프레임의 수를 얘기하는 거에요.


그럼 초당 보여지는 프레임 수가 높을 수록 더 잘게 잘게 쪼개서 움직이는 모습을 보여주게 되는 거니까

더 부드러운 움직임을 보여주겠죠?


결국 '시간'의 개념이 도입되면 다이내믹한 연출이 가능해진다는 말씀.





그럼 또 다른 예를 들어볼게요.


현재 시간을 표시하는 디지털 시계 프로그램을 만들어 볼게요.


시간 개념이 없이 그냥 폼이 로드 되었을때 현재시간을 표시하는 코딩을 하게되면


Private Sub Form_Load()

(현재시간 표시하는 코딩)

End Sub

이렇게 되겠죠? 그럼 

결과가 이렇게 나올거에요.




문제는 폼이 로드된 시점의 시간에서 멈춰 버린다는 것이죠.


그럼 매 초마다 띄우게 할 수는 없을까? 에 대한 궁금증이 생기실 거에요.


역시 이것도 당연히 '시간' 의 개념이 필요한것이죠.



그렇다면,

한번 만들어볼게요!!


이게 타이머 입니다.



타이머 속성을 한번 볼게요.

속성에는 중요하게 봐야 할게

EnabledInterval 이 두개 입니다.


우선 Interval을 설명드리면,

ms(밀리세컨)을 사용해서 타이머가 가지는 시간값을 지정하는 것입니다.

1분 = 60000ms

10초 = 10000ms

1초 = 1000ms

0.1초 = 100ms


이렇게 되겠죠?

그럼 'Interval값을 1000으로 두면

1초마다 timer에 입력된 코드를 실행시킨다.' 라고 알고 계시면 됩니다.


Enabled값은 말그대로 사용가능한지에 대한 여부인데.

False값으로 설정되지면 Timer는 정지 상태가 됩니다.

반대로 True값이 되면 타이머는 설정된 Interval수치를 작동시켜 돌아가게 되는 것이죠.


그럼 인터벌값을 1초로 두고, 매 초마다 현재 시간을 표현하는 레이블을 만들어 볼까요?




아주아주, 간단합니다.


이렇게 하면 아주 간단하죠!

매 초마다 Timer가 작동하게 되고, 그 타이머는 Label1의 caption속성에다가 Now라는 함수.

즉 현재 시간을 나타내는 함수를 대입하라는 것이죠.

실행 한번 해보세요 ㅎㅎ


2016-02-12 오후 1:11:25 와 같이 시간이 표시 될 것입니다.


자, 그럼 Format 형식을 사용해서 더 나은 타이머를 만들어볼게요.



어? 그럼 Format(Now, "hh:mm:ss") 이 부분이 뭐지? 라고 생각하시겠죠?


Format 함수는 간단하게 사용하시려면 Expression 부분과 [Format] 부분만 신경쓰시면 됩니다.

Expression은 표현할 인수를 얘기하는 것이고,

Format은 그 인수를 어떻게 표현할 것인지를 나타내는 것입니다.


알기 쉽게 풀어서 설명 드리면,

Now라는 함수는 2016-02-12 오후 1:11:25 라는 값을 가지고 있겠죠? (당연히 매초마다 바뀜.)


영어 단어로 풀어보자면




2016 

02 

12 

오후 

11 

25 

Year

Month 

Day 

AM/PM 

Hour 

Minute 

Second 


Year-Month-Day AM/PM Hour:Minute:Second 로 되어 있죠?


이걸 이제 Format 함수에 써먹는 방법은, 각 문자의 앞글자를 따서 사용합니다.


가령 현재 연도를 출력하고 싶다면 Year 단어의 앞글자인 Y.


월을 출력하고 싶다면 Month의 M

일을 출력하고 싶다면 Day의 D

...AM/PM은 그대로 AM/PM으로 사용하시면 되고,


H, M, S 이렇게 각각 앞글자를 따게 되죠.


어라? 근데 이상하네요.

Month의 M과 Minute의 M이 겹치네요?


그래서 날짜는 대문자

시간은 소문자로 표현합니다.


예를 들어볼게요.


16/02/12 을 표현하고 싶다. 하면 "YY/MM/DD" 라고 하면 되겠고,

2016년 02월 12일을 표현하고 싶다. 하면 "YYYY년 MM월 DD일" 이라고 표현하면 되겠습니다.


시간도 역시 마찬가지로.

현재시각: 2시 10분입니다.

라고 표현하고 싶다!

"현재시각: h시 m분입니다." 라고하면 되겠죠.


정말 쉽게 풀어 쓴거라. 후에 제대로 설명을 한번 드리도록할게요.

지금은 개념만 이렇게 잡아두시면 문제 없을 겁니다!


자 그럼 심화 문제 나갑니다!


아래와 같이 폼을 꾸며 주시고,


Label과 타이머를 이용해서 계속해서 시계가 출력되도록 설정합니다.

매초마다 시간을 보여주고,


사용자는 두개의 버튼을 누를 수 있습니다.

우선

1. 현재 시간 체크! 를 클릭하면 현재 시간을 저장합니다.

2. 얼마나 지났나? 를 클릭하면 아까 저장했던 시간부터 얼마나 지났는지 출력하는 문제입니다.



해답은 아래에 있지만. 꼭 풀어보고 하셔요!

















오늘은 여기까지 하겠습니다.


이해 안되시는 부분이나 궁금한점 있으시면 댓글 남겨주세요~!! 확인하는대로 바로 답변드릴게요!


반응형

+ Recent posts