1 00:00:00,000 --> 00:00:05,069 2 00:00:05,069 --> 00:00:06,110 토마스 활기찬 : 좋아. 3 00:00:06,110 --> 00:00:07,450 안녕하세요, 여러분. 4 00:00:07,450 --> 00:00:08,690 나는 토마스 활기찬입니다. 5 00:00:08,690 --> 00:00:15,160 이 세미나는 될 것입니다 SDL을 사용하여 C에서 2D 게임을 작성. 6 00:00:15,160 --> 00:00:17,970 그래서 나는 당신이 모든 거 알아 그래, 정말, 요구 7 00:00:17,970 --> 00:00:22,050 게임을하고 게임을 만들고 싶어, 하지만이 SDL 사업은 무엇인가? 8 00:00:22,050 --> 00:00:25,320 그래서 SDL은 C 라이브러리입니다. 9 00:00:25,320 --> 00:00:28,270 그것은 단순한 의미 DirectMedia 레이어. 10 00:00:28,270 --> 00:00:31,340 그리고, 크로스 플랫폼의 게임 개발 라이브러리. 11 00:00:31,340 --> 00:00:37,160 그것은, 윈도우, 맥에서 작동 리눅스, 심지어는 아이폰 OS와 안드로이드. 12 00:00:37,160 --> 00:00:40,380 그것은 같은 것들을 처리 오디오 시스템에 대한 액세스 13 00:00:40,380 --> 00:00:44,900 컴퓨터, 키보드, 및 대 마우스, 조이스틱은, 그들은 부착하는 경우. 14 00:00:44,900 --> 00:00:48,300 모바일, 심지어 작업을 수행 할 수 있습니다 입력과 그 모두를 터치합니다. 15 00:00:48,300 --> 00:00:53,030 그리고 물론, 그래픽 처리, 화면에 물건을 그리기. 16 00:00:53,030 --> 00:00:56,470 >> 따라서 매우 광범위에도 사용되는 당신은 이전에 들어 본 않았을 수 있습니다. 17 00:00:56,470 --> 00:01:00,860 그것은 예를 들어,에 내장, 밸브의 소스 엔진, 18 00:01:00,860 --> 00:01:04,970 같은 어떤 권력 게임 포탈과 팀 포트리스 2. 19 00:01:04,970 --> 00:01:08,680 이는 매우 많은 수도있어 나올 인디 게임, 20 00:01:08,680 --> 00:01:13,545 그래서 당신은 무엇을보고 흥분 모든 그것으로 만드는 것입니다. 21 00:01:13,545 --> 00:01:20,000 >> 세미나의 목표는 당신이 얻을 수 있습니다 SDL과 개발로 출발했다. 22 00:01:20,000 --> 00:01:22,700 우리는 방법을 배울거야 게임 창을 만들 수 있습니다. 23 00:01:22,700 --> 00:01:26,130 우리는 스프라이트를 만들거야 이는 게임의 이미지입니다 24 00:01:26,130 --> 00:01:27,744 그 주위를 이동할 수 있습니다. 25 00:01:27,744 --> 00:01:29,910 우리는 방법을 배울거야 와 스프라이트 애니메이션, 26 00:01:29,910 --> 00:01:32,910 그래서 주위로 이동, 확인 그들은 시간이 지남에 변경합니다. 27 00:01:32,910 --> 00:01:35,580 그리고 우리는 방법을 배울거야 키보드와 마우스를 캡처 28 00:01:35,580 --> 00:01:38,240 컴퓨터에서 입력. 29 00:01:38,240 --> 00:01:41,550 우리가 얘기하지 않습니다 약 오늘은 3D 그래픽은, 30 00:01:41,550 --> 00:01:45,520 그것은 매우 복잡하기 때문에 우리는 시간이 없어 될 수 있습니다. 31 00:01:45,520 --> 00:01:49,010 우리는 배울 방법에 우리의 게임에 오디오를 재생할 수 있습니다. 32 00:01:49,010 --> 00:01:53,300 그리고 우리는 구축되지 않습니다 리눅스하지만 아무것도. 33 00:01:53,300 --> 00:01:58,330 >> 이제주의 사항이있다, 희망, 마지막 세미나로, 34 00:01:58,330 --> 00:02:01,660 당신은 편안있을거야 SDL 문서, 35 00:02:01,660 --> 00:02:05,370 그래서 당신은 알아 갈 수있을거야 어떻게 자신을 위해 오디오를 재생합니다. 36 00:02:05,370 --> 00:02:12,150 또한 작업을해야 Mac 또는 PC 용 건물 정확히 리눅스 구축과 같은, 37 00:02:12,150 --> 00:02:14,700 하지만 설치는 것 조금 다를 수. 38 00:02:14,700 --> 00:02:17,700 그래서 당신은 이해할 수 있어야합니다 이 일을 위해 밖으로 방법 39 00:02:17,700 --> 00:02:20,900 오늘의 세미나의 말. 40 00:02:20,900 --> 00:02:26,980 >> 설정에 대한 그래서 우리는거야 가상 컴퓨터를 사용할 수 있습니다. 41 00:02:26,980 --> 00:02:31,010 우리는 때문에, CS50의 IDE를 사용하는 것이 우리는 단지 C로 작성 될거야 42 00:02:31,010 --> 00:02:35,120 그러나 IDE 우리는, 브라우저가 없기 때문에 새 창 또는 디스플레이를 만들 수 없습니다 43 00:02:35,120 --> 00:02:36,410 그것은 그래픽. 44 00:02:36,410 --> 00:02:38,450 그래서 우리는 가상 머신이 필요합니다. 45 00:02:38,450 --> 00:02:47,790 그래서 당신은 지시에 따라 수 여기 manual.CS50.net/appliance/15에서 46 00:02:47,790 --> 00:02:53,290 공식 CS50 어플라이언스를 설치하려면 이는 단지 가상 리눅스이고 47 00:02:53,290 --> 00:02:55,110 기계. 48 00:02:55,110 --> 00:02:58,090 >> 그리고 당신은 일단 그 모든 것이 up-- 설정 49 00:02:58,090 --> 00:03:02,090 때문에, 조금 시간이 걸릴 수 있습니다 당신이 가고있어 매우 큰 download-- 50 00:03:02,090 --> 00:03:07,060 VM sudo는 APT-GET 업데이트에서 실행합니다. 51 00:03:07,060 --> 00:03:09,410 그리고 정말이야 모든 소프트웨어를 업데이트하기 52 00:03:09,410 --> 00:03:12,670 가상 머신에 패키지. 53 00:03:12,670 --> 00:03:20,130 >> 그 후, 당신은 실행하는거야 sudo는은, 설치 libsdl2-2.0-0있는 apt-get 54 00:03:20,130 --> 00:03:27,960 libsdl2-DBG, libsdl2-DEV, 및 추가 libsdl2 이미지-2.0-0, 55 00:03:27,960 --> 00:03:32,560 libsdl2 이미지-DBG, 및 libsdl2 이미지-DEV. 56 00:03:32,560 --> 00:03:33,640 그래서 그 기능은 무엇입니까? 57 00:03:33,640 --> 00:03:38,440 즉, 단순히 디버그를 설치 정보, 문서, 헤더, 58 00:03:38,440 --> 00:03:41,260 두 개의 라이브러리에 대한 바이너리. 59 00:03:41,260 --> 00:03:45,090 SDL 2.0, 오래된 일반, 다른 도서관 60 00:03:45,090 --> 00:03:50,110 라는 SDL 이미지, 어떤 우리가 사용하게 될거야 61 00:03:50,110 --> 00:03:54,560 우리의 게임에 이미지 파일을로드합니다. 62 00:03:54,560 --> 00:03:57,860 >> 당신이 또한 일단 그래서 그것은 묻는 바로 그 때, 그 63 00:03:57,860 --> 00:04:01,100 그냥, yes를 입력 Enter 키를 누르십시오 패키지를 설치하려면 64 00:04:01,100 --> 00:04:04,430 그리고 당신은 갈 수 있어야한다. 65 00:04:04,430 --> 00:04:14,800 그래서, 배포 코드를 얻을 수 있습니다 오 이런 주는거,이 업데이트되지 않습니다. 66 00:04:14,800 --> 00:04:18,480 당신이하지 않는 GitHub의에 account--이 당신은 GitHub의 계정이있는 경우, 67 00:04:18,480 --> 00:04:24,450 이 망할 놈의 작업을 수행 할 수 있습니다 REPO에 복제 명령 68 00:04:24,450 --> 00:04:30,490 그리고 그 망할 놈을 다운로드합니다 거기에 모든 코드와 REPO, 69 00:04:30,490 --> 00:04:31,700 그래서 당신은 코드를해야합니다. 70 00:04:31,700 --> 00:04:36,470 >> 당신은 GitHub의가없는 경우 계정은, 당신이해야하는 유형입니다 71 00:04:36,470 --> 00:04:48,867 wgithttps : //github.com/tlively/sdl seminar-- 여기 그것은 different--의 72 00:04:48,867 --> 00:04:49,700 /archive/master.zip. 73 00:04:49,700 --> 00:04:55,610 74 00:04:55,610 --> 00:04:59,220 그래서 다시, 그 동일한의 URL, 그것은 될 것 제외 75 00:04:59,220 --> 00:05:09,010 tlively / SDL_seminar / master.zip과 당신은 다운로드 wgit을 사용하고 있습니다. 76 00:05:09,010 --> 00:05:12,940 그리고 당신은 단지 수 그 압축 파일을 압축 해제 77 00:05:12,940 --> 00:05:14,900 다음 당신은 할 수 있습니다 모든 소스 코드. 78 00:05:14,900 --> 00:05:17,580 그것에 대해 정말 죄송. 79 00:05:17,580 --> 00:05:23,880 그리고 코드도에서 호스팅됩니다 몇 CS50 세미나의 웹 페이지 80 00:05:23,880 --> 00:05:25,230 일. 81 00:05:25,230 --> 00:05:26,590 >> 괜찮아. 82 00:05:26,590 --> 00:05:29,932 그래서 우리는 어떻게 시작합니까 우리 자신의 게임을 작성? 83 00:05:29,932 --> 00:05:31,890 음, 먼저 우리가하고 싶은거야 84 00:05:31,890 --> 00:05:34,740 SDL 문서를 볼 수 있습니다. 85 00:05:34,740 --> 00:05:37,020 그래서 여기에 VM입니다. 86 00:05:37,020 --> 00:05:38,720 그리고 여기에 웹 페이지입니다. 87 00:05:38,720 --> 00:05:40,340 나는 libsdl.org 살고 탐색했습니다. 88 00:05:40,340 --> 00:05:43,110 89 00:05:43,110 --> 00:05:48,140 내가 여기서 할거야 것은 가서입니다 사이드에, 문서에서, 90 00:05:48,140 --> 00:05:51,040 위키 클릭합니다. 91 00:05:51,040 --> 00:05:56,870 이 위키에 저를 가져올 것 SDL에 대한 문서의 대부분을 보유하고 있습니다. 92 00:05:56,870 --> 00:06:01,360 여기에 사이드에 걸쳐, 우리는있어 카테고리 별 API를 클릭 것, 93 00:06:01,360 --> 00:06:04,300 때문에이 제공하는 것입니다 우리 좋은 범주보기 94 00:06:04,300 --> 00:06:07,770 SDL을위한 전체 API의. 95 00:06:07,770 --> 00:06:12,390 >> 그래서 예를 들어, 우리가 기본 초기화 96 00:06:12,390 --> 00:06:18,380 그리고, 아래의 모든 종류의 종료 SDL을 사용하기위한 관리 물건, 97 00:06:18,380 --> 00:06:21,630 그리고, 우리는 섹션을 화면에 물건을 표시. 98 00:06:21,630 --> 00:06:23,000 즉 비디오입니다. 99 00:06:23,000 --> 00:06:25,790 입력 이벤트, 그 점점 키보드로 입력, 100 00:06:25,790 --> 00:06:29,710 마우스의 입력을 받고,과 조이스틱, 당신도 그것을 가지고있는 경우. 101 00:06:29,710 --> 00:06:32,901 것들에 대한 포스 피드백이있다 게임 컨트롤러와 같은 어떤 102 00:06:32,901 --> 00:06:34,150 우리에 대해 얘기하지 않을거야. 103 00:06:34,150 --> 00:06:35,630 그리고 여기에 오디오입니다. 104 00:06:35,630 --> 00:06:38,940 그리고 다른 한 무리의 존재 SDL은 당신을 위해 할 수있는 물건. 105 00:06:38,940 --> 00:06:43,830 >> 그러나 오늘 우리가 초점을 맞출거야 여기에 초기화에, 106 00:06:43,830 --> 00:06:48,332 비디오 이미지들을 디스플레이 섹션 및 입력 이벤트 처리. 107 00:06:48,332 --> 00:06:50,290 그래서이 주이다 문서의 섹션 108 00:06:50,290 --> 00:06:53,050 당신이 걱정해야한다고. 109 00:06:53,050 --> 00:06:57,170 그냥 재미를 위해, 우리는 가서 경우 여기 이름으로 API를 클릭, 110 00:06:57,170 --> 00:07:04,350 우리는 모든의 목록을 볼 수 있습니다 SDL 라이브러리의 한 가지. 111 00:07:04,350 --> 00:07:11,330 그래서 이러한 모든 기능을, 열거, 구조, 재료의 미친 양, 112 00:07:11,330 --> 00:07:12,820 알파벳 순서. 113 00:07:12,820 --> 00:07:14,580 그리고 분명히까지 당신은 당신이 일을하는지 알고, 114 00:07:14,580 --> 00:07:19,100 이 역시 도움이 될 수 없습니다 저희는 범주별로 API를하는 이유입니다. 115 00:07:19,100 --> 00:07:20,810 >> 그래서 시작하자. 116 00:07:20,810 --> 00:07:25,680 희망 당신은 이미했습니다 배포 코드를 다운로드했습니다. 117 00:07:25,680 --> 00:07:30,070 그래서 당신이 할 수있는 권리이다 여기 CS50 어플라이언스에, 118 00:07:30,070 --> 00:07:31,150 단순히 터미널을 엽니 다. 119 00:07:31,150 --> 00:07:33,750 120 00:07:33,750 --> 00:07:34,440 여기에서 우리는 간다. 121 00:07:34,440 --> 00:07:40,740 그래서 이미 다운로드 한 .ZIP를 사용하여 분배 코드 122 00:07:40,740 --> 00:07:41,690 방법. 123 00:07:41,690 --> 00:07:43,140 그리고 나는 그것을 압축 해제했습니다. 124 00:07:43,140 --> 00:07:46,120 그래서 여기가 SDL 세미나 마스터입니다. 125 00:07:46,120 --> 00:07:49,750 그래서 그 디렉토리에 들어갈거야. 126 00:07:49,750 --> 00:07:55,310 그리고 우리가 여기에서 보는 것은 것을 우리는 일곱 C 파일이 있습니다. 127 00:07:55,310 --> 00:07:58,070 그리고이 코드 것입니다 우리는 오늘보고 될 것입니다. 128 00:07:58,070 --> 00:08:00,040 우리는 메이크 있습니다. 129 00:08:00,040 --> 00:08:06,950 그리고 우리는 자원 디렉토리를 가지고, 이는 단순히 이미지를 갖는다 130 00:08:06,950 --> 00:08:09,070 것을 당신은 곧 볼 수있을 것입니다. 131 00:08:09,070 --> 00:08:16,060 >> 그럼이 파일을 열 수 있습니다 G-편집 편집기를 사용하여. 132 00:08:16,060 --> 00:08:22,000 그래서 나는 모든 파일을 열려면 그 안녕하세요로 시작하고이 .c로 끝납니다. 133 00:08:22,000 --> 00:08:23,380 여기에서 우리는 간다. 134 00:08:23,380 --> 00:08:28,180 그래서 작은 창이다, 그래서 우리는있어 더 큰 것을 만들려고 노력하는 것. 135 00:08:28,180 --> 00:08:28,900 아니, 멀리 갔다. 136 00:08:28,900 --> 00:08:32,836 137 00:08:32,836 --> 00:08:34,570 >> 괜찮아. 138 00:08:34,570 --> 00:08:37,959 그래서 여기에 처음이다 파일은 우리가 보는 것입니다. 139 00:08:37,959 --> 00:08:39,000 그것은 hello1_sdl.c라고. 140 00:08:39,000 --> 00:08:41,890 141 00:08:41,890 --> 00:08:47,980 그리고이 모든 수행은 SDL을 초기화입니다 라이브러리 우리는 그것을 사용할 수 있도록. 142 00:08:47,980 --> 00:08:51,550 당신이 와서 알게 될 것입니다 방법 이 코드를 직접 최대? 143 00:08:51,550 --> 00:08:53,850 음, 우리는 이상의 보면 문서에서 144 00:08:53,850 --> 00:08:58,040 우리는 초기화로 이동 및 섹션 종료 145 00:08:58,040 --> 00:09:02,230 그것은 우리 모두에게 것 SDL을 초기화하는 방법에 대한. 146 00:09:02,230 --> 00:09:06,630 그래서 확실히이 재차 읽어 보시기 바랍니다. 147 00:09:06,630 --> 00:09:09,230 그것은 당신에게 모든 것을 말할 것 여기에 무슨 일이 일어나고 있는지에 대해. 148 00:09:09,230 --> 00:09:14,360 그러나 문제의 주요 요점이다 우리는이 함수의 SDL를 호출해야 149 00:09:14,360 --> 00:09:18,910 그것을 통과 어떤 물건 종류 우리는 라이브러리를 초기화 할 수 있습니다. 150 00:09:18,910 --> 00:09:23,620 우리의 경우 그래서, 우리는 단지거야 지금은 비디오를 초기화하고, 151 00:09:23,620 --> 00:09:26,690 그래서 우리는 이미지를 표시 시작할 수 있습니다. 152 00:09:26,690 --> 00:09:32,370 >> 여기, 당신이 경우에 볼 수 있습니다 우리는 거기에 SDL을 클릭, 우리 153 00:09:32,370 --> 00:09:36,160 더 많은 정보를 얻을 수 있습니다, 리턴 값을 포함. 154 00:09:36,160 --> 00:09:39,050 그래서 우리는 여기에서 볼 returnes 성공에 제로. 155 00:09:39,050 --> 00:09:43,320 우리의 코드에 그래서, 우리는 갈거야 그것은 0을 반환하지 않는 경우 참조 156 00:09:43,320 --> 00:09:47,020 그리고 복귀하지 않는다면 제로는, 그래서, 성공하지 못한 157 00:09:47,020 --> 00:09:50,650 우리는 단순히 인쇄에가는거야 이 기능을 이용하여 다른 에러, 158 00:09:50,650 --> 00:09:56,260 문자열을 반환 SDL get 및 오류, 발생한 오류를 설명. 159 00:09:56,260 --> 00:09:58,510 우리는 인쇄거야 오류가 다음 우리는 그냥있어 160 00:09:58,510 --> 00:10:02,270 프로그램을 종료 예정 오류 코드와. 161 00:10:02,270 --> 00:10:06,470 >> 우리가 필요로하는 그런 다음 다른 일 할 일은, 프로그램이 종료하기 전에, 162 00:10:06,470 --> 00:10:10,830 우리가 성공적으로 SDL을 초기화하는 경우, 우리는 단지 SDL 종료를 호출해야합니다. 163 00:10:10,830 --> 00:10:15,750 그리고 그것은 청소를 처리 할 것 우리 SDL의 내부 자원의 모든. 164 00:10:15,750 --> 00:10:21,240 그래서 문서는, 다시 ... 이렇게 여기에 우리가 초기화에 165 00:10:21,240 --> 00:10:23,640 절을 종료 문서. 166 00:10:23,640 --> 00:10:26,680 당신은 클릭 할 수 있습니다 여기에 기능, SDL은 종료 167 00:10:26,680 --> 00:10:28,700 당신은뿐만 아니라 그것에 대해 모두를 읽을 수 있습니다. 168 00:10:28,700 --> 00:10:31,400 그리고이 기능을 많이 문서 페이지 169 00:10:31,400 --> 00:10:35,630 예제 코드를, 그래서이 아주 좋은 자원이다. 170 00:10:35,630 --> 00:10:39,610 확실히 시간을 보내고 이 위키의 일부를 읽고 171 00:10:39,610 --> 00:10:42,520 당신은 할 거라면 프로젝트의이. 172 00:10:42,520 --> 00:10:43,760 >> 괜찮아. 173 00:10:43,760 --> 00:10:46,590 그래서 우리의 전체 프로그램입니다. 174 00:10:46,590 --> 00:10:53,935 우리는 이제 난 일은 .. 수있는 일 여기에 메이크 파일을 열 것, 175 00:10:53,935 --> 00:10:56,150 그래서 나는이 걸릴거야 그 작동 방법을 살펴 보자. 176 00:10:56,150 --> 00:10:59,500 그리고 그것은 매우 간단한 메이크입니다 이전에 보았던 것과 유사한. 177 00:10:59,500 --> 00:11:04,010 주요 차이점 중 하나 즉, 여기,이입니다 178 00:11:04,010 --> 00:11:07,870 실행의 결과를 삽입하는 것입니다 당신은 이미했습니다이 명령, 179 00:11:07,870 --> 00:11:10,850 당신이 SDL 설치 한 경우 설치. 180 00:11:10,850 --> 00:11:13,230 그리고 이것은 명령입니다 그 생성하는거야 181 00:11:13,230 --> 00:11:16,710 컴파일러에 대한 몇 가지 여분의 플래그. 182 00:11:16,710 --> 00:11:22,050 >> 그 외에, 우리는 그것을주는 거 모든 일반적인 명령뿐만 아니라 183 00:11:22,050 --> 00:11:23,430 이 두 명령. 184 00:11:23,430 --> 00:11:30,270 그래서 -lsdl2 이미지 핸들 SDL 이미지 라이브러리에 연결. 185 00:11:30,270 --> 00:11:36,200 그리고 -lm 실제로 연결을 처리 표준 C 수학 라이브러리. 186 00:11:36,200 --> 00:11:40,630 그래서 우리는 필요하지 않을 수 있습니다 우리의 C 파일의 모든 사람들, 187 00:11:40,630 --> 00:11:43,900 우리가 할 수 있도록하지만, 우리는 단지에 넣어 모두에 대해 동일한 makefile을 사용하여 188 00:11:43,900 --> 00:11:44,816 수정없이. 189 00:11:44,816 --> 00:11:46,970 190 00:11:46,970 --> 00:11:50,080 >> 여기 소스에, 이 어디 좋겠입니다 191 00:11:50,080 --> 00:11:53,680 당신이 가고 있었다 파일을 넣어 프로젝트에 컴파일합니다. 192 00:11:53,680 --> 00:11:57,570 하지만 내 C의 모든 일부터 여기에 파일의 주요 기능을 가지고있다 193 00:11:57,570 --> 00:12:00,000 그것은 혼란 것 우리는 그들 모두를 넣어 경우. 194 00:12:00,000 --> 00:12:06,930 그래서, 그냥 말을하려고 해요 지금, hello1_sdl.c, 195 00:12:06,930 --> 00:12:11,150 이는 우리가 보았던 하나입니다. 196 00:12:11,150 --> 00:12:18,740 난 다시 가서한다면 여기에, 걸 할 수 있습니다. 197 00:12:18,740 --> 00:12:22,160 그리고 무엇을했던 것은 단지입니다 그 첫 번째 파일을 컴파일. 198 00:12:22,160 --> 00:12:28,780 그리고 우리는 때문에, ./game 입력 할 수 있습니다 그것이 생산 실행이다. 199 00:12:28,780 --> 00:12:31,660 그리고 그것은 한 모든 인쇄했다 초기화 성공. 200 00:12:31,660 --> 00:12:33,300 그래서 우리는 바로 일을했다. 201 00:12:33,300 --> 00:12:36,200 그러나 그것은, 가지 지루했다 우리는 창이 표시되지 않았기 때문에, 202 00:12:36,200 --> 00:12:37,900 아무것도 주위에 이동되지 않았다. 203 00:12:37,900 --> 00:12:41,030 >> 그래서 좋은, 우리는 SDL이 초기화되었다. 204 00:12:41,030 --> 00:12:43,520 자, 이제 뭔가로 이동하자 좀 더 흥미 롭군요. 205 00:12:43,520 --> 00:12:54,700 그래서 여기에 우리가 hello2_window.c 있고, 이 약간 더 될 것입니다 206 00:12:54,700 --> 00:13:00,010 복잡한 C 프로그램이 SDL 그냥 예전처럼 초기화 207 00:13:00,010 --> 00:13:04,250 지금을 제외하고 우리는거야 SDL 타이머를 초기화합니다. 208 00:13:04,250 --> 00:13:07,720 그리고 이것은 우리가 할 것입니다 내부 타이머에 액세스 209 00:13:07,720 --> 00:13:10,550 사용 기능은 시간에 관한. 210 00:13:10,550 --> 00:13:11,920 >> 그리고 이제 여기로 살펴 보자. 211 00:13:11,920 --> 00:13:16,840 우리가 할 것은 우리가이 포인터를 가지고있다 SDL 윈도우 구조체에있는 212 00:13:16,840 --> 00:13:21,160 이 호출에 의해 생성 될 것입니다 함수에, SDL은 창을 만들 수 있습니다. 213 00:13:21,160 --> 00:13:25,380 자,이 인수 많이 걸립니다, 그래서이 문서를보고 가자. 214 00:13:25,380 --> 00:13:27,930 그래서 다시, 내가 갈거야 카테고리 별 API, 내가 해요 215 00:13:27,930 --> 00:13:33,820 먼저 여기 비디오에 추락하고, 섹션, 윈도우 관리를 표시. 216 00:13:33,820 --> 00:13:36,470 그래서이 부분은있다 거기에 물건의 톤, 217 00:13:36,470 --> 00:13:39,970 하지만 당신은을 통해 보면 이러한 기능, 당신은거야 218 00:13:39,970 --> 00:13:43,620 그 아마 하나 우리를 참조하십시오 SDL은 창을 만들라고합니다, 219 00:13:43,620 --> 00:13:46,600 이는 상단에서 우측으로 발생합니다. 220 00:13:46,600 --> 00:13:49,080 >> 그리고 이것이 이 기능에 대한 설명서를 참조하십시오. 221 00:13:49,080 --> 00:13:53,710 창은 제목이 것, 화면의 X 및 Y 위치, 222 00:13:53,710 --> 00:13:56,960 이 폭이 것, 높이, 다음은 몇 가지 플래그를 취할 것입니다. 223 00:13:56,960 --> 00:14:01,220 이제, 우리는 실제로 걱정하지 않는다 지금 이러한 플래그의, 224 00:14:01,220 --> 00:14:04,560 하지만 당신은 뭔가를 원하는 경우 같은 전체 화면 창을, 225 00:14:04,560 --> 00:14:07,920 당신은 좀 걸릴 수 있습니다. 226 00:14:07,920 --> 00:14:13,190 지금, 우리는 단지거야 이러한 특수 값을 사용하고, 227 00:14:13,190 --> 00:14:18,775 SDL 윈도우 플러스를 중심으로 순서대로 x와 y에 대한 228 00:14:18,775 --> 00:14:21,800 그냥 창을 만들 수 있습니다 우리의 화면 중심. 229 00:14:21,800 --> 00:14:24,370 >> 그래서 그 무엇을하는지입니다. 230 00:14:24,370 --> 00:14:27,960 그리고 창으로 발생하는 경우 null의 경우, 오류가있는 의미, 231 00:14:27,960 --> 00:14:32,570 다시 우리는 단지에가는거야 SDL 가져 오기 오류를 사용하여 오류를 인쇄 할 수 있습니다. 232 00:14:32,570 --> 00:14:36,570 그리고 우리는 초기화 때문에 SDL은, 우리는 지금 닫아야합니다. 233 00:14:36,570 --> 00:14:40,900 그래서 우리는 SDL 전에 종료 전화 메인 하나를 반환. 234 00:14:40,900 --> 00:14:42,905 >> 그래서 우리는이 창을 희망 열고있다. 235 00:14:42,905 --> 00:14:44,613 그리고 우리는 무엇을거야 우리는거야 할 일은 236 00:14:44,613 --> 00:14:50,340 5,000 밀리 초 동안 SDL을 호출, 5 가지 초로 동일하다. 237 00:14:50,340 --> 00:14:55,640 그리고 우리는 그와 함께 할 때, 이 창을 파괴하는 것, 238 00:14:55,640 --> 00:14:59,470 , SDL 라이브러리를 정리 프로그램을 종료합니다. 239 00:14:59,470 --> 00:15:05,240 그럼 가서 촬영 것을 제공 할 수 있습니다. 240 00:15:05,240 --> 00:15:08,660 >> 그래서 지금 대신은 변경 메이크 때마다, 241 00:15:08,660 --> 00:15:12,180 나는 단순히 확인하고 할 수있는 다음 명령 줄에서, 242 00:15:12,180 --> 00:15:16,090 소스는 일치 한 다음 말 우리가 컴파일하고있는 파일입니다. 243 00:15:16,090 --> 00:15:17,090 그래서 hello2_window.c입니다. 244 00:15:17,090 --> 00:15:21,390 245 00:15:21,390 --> 00:15:21,890 환상적인. 246 00:15:21,890 --> 00:15:22,970 아니 erros 없습니다. 247 00:15:22,970 --> 00:15:26,085 이제, 우리는 우리의 실행 파일을 실행하면, 우리는이 창을 참조하십시오. 248 00:15:26,085 --> 00:15:27,960 이제 몇 가지가있다 창 문제. 249 00:15:27,960 --> 00:15:32,820 우리가 주위를 이동할 수 있지만 갖는다 그 안에이 배경 정크. 250 00:15:32,820 --> 00:15:34,660 그래서 우리는 그려지지 않은 아무것도, 그리고 그것은이다 251 00:15:34,660 --> 00:15:38,210 쓰레기 가득한하는 거의 우리가 기대하는 것입니다. 252 00:15:38,210 --> 00:15:41,010 >> 또한, 우리는 창을 닫을 수 없습니다. 253 00:15:41,010 --> 00:15:44,780 나는이 X를 눌러 해요 코너 아무것도 일어나고. 254 00:15:44,780 --> 00:15:47,840 그래서 우리는 해결하는 방법을 볼 수 있습니다 약간의 그. 255 00:15:47,840 --> 00:15:51,750 그래서이 부분을 해결 할 곳 창 먼저 쓰레기로 가득하다. 256 00:15:51,750 --> 00:16:00,850 그래서 우리는 hello3_image.c까지 가면, 무엇을 우리는 우리가 몇 가지를 추가 한 것을 볼 수 있습니다 257 00:16:00,850 --> 00:16:03,360 여기에 더 많은 것. 258 00:16:03,360 --> 00:16:08,740 우리는이 새로운 헤더를 추가했습니다 타이머 기능을 얻을 파일. 259 00:16:08,740 --> 00:16:11,490 나는 우리가 마지막에 그했다 추측 하나, 너무, 나는 그것을 언급하지 않았다. 260 00:16:11,490 --> 00:16:13,550 하지만 지금 우리는이기 때문에 이미지 작업, 261 00:16:13,550 --> 00:16:18,720 우리는 SDL을 포함 할 필요 이미지 헤더 파일뿐만 아니라. 262 00:16:18,720 --> 00:16:22,087 그래서 같은 일이 같은입니다 전에, 여기에 SDL을 초기화, 263 00:16:22,087 --> 00:16:23,420 창을 만드는 같은 거래. 264 00:16:23,420 --> 00:16:25,380 우리는 지금 전에 봤어요. 265 00:16:25,380 --> 00:16:29,870 >> 이제 우리는라는 것을 작성해야 일종의 함께가는 렌더러, 266 00:16:29,870 --> 00:16:30,800 창. 267 00:16:30,800 --> 00:16:33,860 그러나의 일종 의 추상 개체 268 00:16:33,860 --> 00:16:37,370 이 모든 일을 담당 창에 드로잉 작업. 269 00:16:37,370 --> 00:16:41,580 그리고 실제로 해당 로드 프로그램 270 00:16:41,580 --> 00:16:47,880 에서 그래픽 하드웨어로 당신의 컴퓨터 나 휴대 전화 또는 무엇이든. 271 00:16:47,880 --> 00:16:51,005 그래서 우리가 원하는 플래그 그건 ... 합격 당신은 문서를 볼 수 있습니다 272 00:16:51,005 --> 00:16:56,160 here--가는 자세한 내용을 얻을 수 있습니다 SDL은, 가속 렌더링 할 수있는 273 00:16:56,160 --> 00:16:58,550 가 될 것 의미 그래픽 하드웨어를 사용하여 274 00:16:58,550 --> 00:17:01,490 그냥 소프트웨어 에뮬레이션하지. 275 00:17:01,490 --> 00:17:07,390 >> 그리고 우리가 사용하는거야 SDL 렌더러 PRESENTVSYNC. 276 00:17:07,390 --> 00:17:12,280 VSYNC 간단하게 만드는 것입니다 그래픽은 더 방지를 봐 277 00:17:12,280 --> 00:17:14,970 이 일이라고 화면 테러, 여기서 반 278 00:17:14,970 --> 00:17:17,720 다음의 한 프레임 절반의 프레임이 동시에 인출 얻을 279 00:17:17,720 --> 00:17:20,056 그것은 끔찍한 보인다. 280 00:17:20,056 --> 00:17:23,130 그러나 다시, 당신은 읽어 갈 수있다 자신에 그것에 대해. 281 00:17:23,130 --> 00:17:24,319 >> 그래서 우리는 여기에 몇 가지 플래그를 가지고있다. 282 00:17:24,319 --> 00:17:27,810 그래서 우리는 단지 전화를 겁니다 이 기능 SDL은 렌더러를 만들 수 있습니다. 283 00:17:27,810 --> 00:17:31,340 우리는 그것을 창을 줄거야 그 렌더러에 관련. 284 00:17:31,340 --> 00:17:34,520 음 하나는 우리가 무엇을 걱정하지 않는다 의미 그래픽 드라이버는 우리가 사용하는 것입니다. 285 00:17:34,520 --> 00:17:36,603 그래서 꽤 많이해야 항상 부정적인 하나, 286 00:17:36,603 --> 00:17:39,010 당신은 그래픽 드라이버에 대해 알지 못한다면. 287 00:17:39,010 --> 00:17:41,650 그리고 우리는 단지거야 그것은 우리의 플래그를 전달한다. 288 00:17:41,650 --> 00:17:47,240 즉 null을 반환한다면, 우리는있어 평소와 같이 오류를 인쇄하는 것, 289 00:17:47,240 --> 00:17:49,550 그러나 우리는 또한거야 창을 파괴 290 00:17:49,550 --> 00:17:54,970 전에 그 자원을 청소 SDL 종료 호출하고 반환. 291 00:17:54,970 --> 00:17:58,110 >> 이제, 흥미로운 부분 여기에 우리는 우리의 이미지를로드되는 경우 292 00:17:58,110 --> 00:18:00,870 이 기능 IMG_load를 사용하여. 293 00:18:00,870 --> 00:18:04,050 이것은 우리가 가고있는 전용 기능입니다 SDL 이미지 라이브러리에서 사용할 수 있습니다. 294 00:18:04,050 --> 00:18:05,480 그것은 우리가 필요로하는 단 하나입니다. 295 00:18:05,480 --> 00:18:12,950 그것은 문자열을받는 함수이다 그 모든 이미지 리소스의 경로입니다. 296 00:18:12,950 --> 00:18:18,024 그리고 그것은 .PNG 될 수 있습니다, GIF, 비트 맵, 이러한 것들 중 하나. 297 00:18:18,024 --> 00:18:19,690 이 기능이 너무 좋은 이유입니다. 298 00:18:19,690 --> 00:18:22,560 그것은 거의 모든 포맷을 처리 할 수​​ 있습니다. 299 00:18:22,560 --> 00:18:27,240 메모리 저장을로로드 것은 SDL 표면을 불렀다. 300 00:18:27,240 --> 00:18:34,660 >> 지금 SDL 표면은 단지 구조체입니다 즉, 메모리에 화상 데이터를 나타낸다. 301 00:18:34,660 --> 00:18:38,054 그래서 당신에 대한 자세한 내용을보실 수 있습니다 문서 두에 그. 302 00:18:38,054 --> 00:18:40,720 그리고이 오류가있는 경우, 우리는있어 모든 것은 어디 할 것 303 00:18:40,720 --> 00:18:44,480 우리가 오류를 인쇄, 닫기 우리 자원은 다음 프로그램을 종료합니다. 304 00:18:44,480 --> 00:18:48,970 이제 흥미로운 것은 전에이다 우리는 창에 이미지를 그릴 수 있습니다 305 00:18:48,970 --> 00:18:51,390 우리는 실제로 텍스처를 확인해야합니다. 306 00:18:51,390 --> 00:18:54,460 이제 텍스처 대응 로드 된 이미지 데이터를 307 00:18:54,460 --> 00:18:57,820 그래픽 하드웨어의 메모리에. 308 00:18:57,820 --> 00:19:00,720 >> 그래서 표면 주에 메모리, 일반 메모리 309 00:19:00,720 --> 00:19:05,550 우리는 모든 학기를 사용했던 것을, 과 질감이 별도의 VRAM에 310 00:19:05,550 --> 00:19:09,410 메모리 그래픽 카드 제어하는​​. 311 00:19:09,410 --> 00:19:13,170 그래서 우리는이 함수를 호출 SDL_CreateTextureFromSurface. 312 00:19:13,170 --> 00:19:17,104 우리는 우리의 렌더러 및 우리의 표면을 제공합니다. 313 00:19:17,104 --> 00:19:19,020 그리고 우리가 실제로있어 면 다, 314 00:19:19,020 --> 00:19:20,311 그래서 우리는 그냥 무료로 될 것입니다. 315 00:19:20,311 --> 00:19:22,210 우리는 더 이상 필요하지 않습니다. 316 00:19:22,210 --> 00:19:26,650 그리고이 호출 그렇다면 오류가 발생한 null을 반환 317 00:19:26,650 --> 00:19:29,630 우리는 전체를 할거야 다시 일을보고 오류가 발생했습니다. 318 00:19:29,630 --> 00:19:30,920 >> 괜찮아. 319 00:19:30,920 --> 00:19:34,810 여기, 우리는 몇 가지에 들어갈 실제 렌더링 기능을 제공합니다. 320 00:19:34,810 --> 00:19:37,730 그래서 SDL_RenderClear를 호출 그것을 전달 321 00:19:37,730 --> 00:19:42,550 우리 창과 관련된 렌더러 단순히 화면이 검게 만든다. 322 00:19:42,550 --> 00:19:47,650 그래서 쓰레기는 우리가 본 그 것을 제거 우리의 창은 이전과는 검은한다. 323 00:19:47,650 --> 00:19:50,750 그리고 우리는거야 SDL_RenderCopy를 호출하려면, 324 00:19:50,750 --> 00:19:53,010 그것은 우리의 렌더러, 우리의 질감을 제공합니다. 325 00:19:53,010 --> 00:19:55,800 그리고 우리는 얘기하자 무슨 이 필드는 비트에 있습니다. 326 00:19:55,800 --> 00:19:57,830 하지만 그 것 텍스쳐 데이터를 취할 327 00:19:57,830 --> 00:20:03,100 그것을에 복사 우리 창 이미지를 그립니다. 328 00:20:03,100 --> 00:20:07,020 우리는이 사본을 완료 한 후에 그래서 우리의 윈도우로 데이터 329 00:20:07,020 --> 00:20:11,180 우리는이 여분의 기능을 수행해야 SDL_RenderPresent했다. 330 00:20:11,180 --> 00:20:15,360 >> 그리고 이것은 재미있다 이 가져 때문에 331 00:20:15,360 --> 00:20:18,770 이중 버퍼링라는 주제에. 332 00:20:18,770 --> 00:20:24,380 그래서 더블 버퍼링 기술입니다 그래픽이 훨씬 더 볼 수 있습니다. 333 00:20:24,380 --> 00:20:28,240 다시 말하지만, 그 화면 찢어 방지 나는 여기서 이전에 대해 얘기했다 334 00:20:28,240 --> 00:20:29,590 두 개의 버퍼를 가지고있다. 335 00:20:29,590 --> 00:20:32,260 백 버퍼가있다 메모리와 프론트 버퍼. 336 00:20:32,260 --> 00:20:36,410 전면 버퍼는 그대로입니다 어떤 순간에 화면에 있습니다. 337 00:20:36,410 --> 00:20:42,070 그래서 우리는 이러한 변화를 그리는 모든 수행 SDL처럼 복사 또는 SDL_RenderClear 렌더링 338 00:20:42,070 --> 00:20:43,080 백 버퍼에. 339 00:20:43,080 --> 00:20:44,800 그래서 그들은 일을 수정 백 버퍼에. 340 00:20:44,800 --> 00:20:48,970 여기에서 우리는이 드로잉 될 수 있습니다 백 버퍼에 녹색 사각형. 341 00:20:48,970 --> 00:20:52,300 >> 그래서 우리는 일을 할 때 우리의 렌더링 작업하는 342 00:20:52,300 --> 00:20:55,700 정말 오래 걸릴 수 있습니다 시간, 우리는 무엇을 할 거 야 343 00:20:55,700 --> 00:20:57,860 버퍼를 전환 할 수 있습니다. 344 00:20:57,860 --> 00:21:00,720 그래서 말 그대로 그냥 소요 프론트 버퍼와 백 버퍼 345 00:21:00,720 --> 00:21:02,990 그래서 그들을 전환 즉, 순간적으로, 346 00:21:02,990 --> 00:21:06,630 한 번의 작업으로 대신 어쩌면 수백 또는 수천, 347 00:21:06,630 --> 00:21:10,910 새로 렌더링의 모든 오브젝트가 화면에있다. 348 00:21:10,910 --> 00:21:13,160 그리고이 일을 방지 화면 상쾌한 같은 349 00:21:13,160 --> 00:21:16,710 우리는 그린 한 반 프레임에 대한 우리의 객체. 350 00:21:16,710 --> 00:21:21,280 우리가 호출 할 필요가 왜 그렇게 그건 SDL_RenderPresent뿐만 아니라, 351 00:21:21,280 --> 00:21:23,320 SDL_RenderCopy있다. 352 00:21:23,320 --> 00:21:25,749 >> 다시 말하지만, 우리는 단지거야 5 초 동안 대기. 353 00:21:25,749 --> 00:21:27,540 그럼 우리가 갈거야 우리의 자원을 정리. 354 00:21:27,540 --> 00:21:29,540 우리는 더 적지이 시간이. 355 00:21:29,540 --> 00:21:31,750 그리고 우리는 단지거야 프로그램을 종료합니다. 356 00:21:31,750 --> 00:21:35,350 그럼 그렇게하자. 357 00:21:35,350 --> 00:21:41,880 나는 소스를 메이크업을 입력하려고하고 있어요 hello--이 지금 3image.c입니다 같습니다. 358 00:21:41,880 --> 00:21:49,632 359 00:21:49,632 --> 00:21:52,240 좋아, 그 오류를 컴파일하지 않습니다. 360 00:21:52,240 --> 00:21:57,210 그리고 당신은 여기에서 볼 수 있습니다 지금은했습니다 내 이미지를 그려, 안녕하세요, CS50! 361 00:21:57,210 --> 00:22:00,560 우리의 창에있는 오초 후 사라집니다. 362 00:22:00,560 --> 00:22:02,090 >> 자,이 여전히 오른쪽 문제가있다? 363 00:22:02,090 --> 00:22:05,750 이것은 좋은 응용 프로그램이 아닙니다, 나는 창을 닫으려고 할 때, 때문에 364 00:22:05,750 --> 00:22:06,500 아무 반응이 없습니다. 365 00:22:06,500 --> 00:22:09,540 즉, X는 여전히 응답하지 않습니다. 366 00:22:09,540 --> 00:22:17,420 그럼 살펴 보자 다음 파일, hello4animation. 367 00:22:17,420 --> 00:22:21,850 그래서이 파일은 그 소개 것 368 00:22:21,850 --> 00:22:25,124 우리의 이미지 이동 및 운동. 369 00:22:25,124 --> 00:22:27,040 그래서 우리는 할거야 같은 일 이전과, 370 00:22:27,040 --> 00:22:30,190 SDL을 시작,을 만들 창, 렌더러를 만들 371 00:22:30,190 --> 00:22:33,030 로 이미지를로드 메모리, 텍스처를 만듭니다. 372 00:22:33,030 --> 00:22:35,090 우리는 전에 그 모두를 보았다. 373 00:22:35,090 --> 00:22:36,770 이제이 새로운 기능입니다. 374 00:22:36,770 --> 00:22:42,305 우리는 구조라고 할 겁니다 그냥 사각형 인 SDL RECT. 375 00:22:42,305 --> 00:22:49,950 우리가 여기에 가면, 우리는 할 수 SDL의 RECT에 대한 검색을 수행, 376 00:22:49,950 --> 00:22:54,040 그리고 당신은 A의 볼 수 있습니다 아주 간단한 구조. 377 00:22:54,040 --> 00:22:56,760 그것은 X, Y에 대한이 위치하며 378 00:22:56,760 --> 00:23:02,080 폭과 높이를 가지고 사각형의 크기. 379 00:23:02,080 --> 00:23:07,785 >> 그래서 우리가있어 우리가 할 거 야입니다 이 SDL의 RECT의 DEST를 정의하는 것, 380 00:23:07,785 --> 00:23:09,480 대상. 381 00:23:09,480 --> 00:23:14,130 그리고 이것은 장소입니다 여기서 화면 382 00:23:14,130 --> 00:23:16,005 우리는 드로잉 할거야 우리의 이미지, 바로 그래서 383 00:23:16,005 --> 00:23:17,880 우리는 할 거라면 주위 동화상, 384 00:23:17,880 --> 00:23:20,300 다음 대상 곳 우리는 이미지를 그릴거야 385 00:23:20,300 --> 00:23:22,620 주위를 이동해야합니다. 386 00:23:22,620 --> 00:23:24,910 그래서 우리는이 전화를 겁니다 기능 SDL_QueryTexture. 387 00:23:24,910 --> 00:23:27,550 388 00:23:27,550 --> 00:23:33,500 내가 주소를 전달하고있어 주목 dest.w의 폭이며, 이는 389 00:23:33,500 --> 00:23:36,950 및 dest.h, 높이가된다. 390 00:23:36,950 --> 00:23:40,425 그래서 SDL_QueryTexture는 것입니다 폭 해당 필드에 저장 391 00:23:40,425 --> 00:23:41,675 우리의 질감의 높이. 392 00:23:41,675 --> 00:23:44,680 393 00:23:44,680 --> 00:23:47,030 >> 그리고 나는거야 무슨 내가 갈거야 할 일은 394 00:23:47,030 --> 00:23:55,580 dest.x 될 창을 설정합니다 이다 폭 마이너스 dest.w, 395 00:23:55,580 --> 00:23:59,000 2로 나누어 스프라이트의 폭. 396 00:23:59,000 --> 00:24:03,860 그리고 이것은 그렇게를 설정하는 것입니다 이미지가 완벽하게 중심에 있음 397 00:24:03,860 --> 00:24:06,780 우리의 창에서, 알았지? 398 00:24:06,780 --> 00:24:08,652 그래서 지금은 y 위치를 가지고있다. 399 00:24:08,652 --> 00:24:10,360 그리고이에 가고 있어 가변 될 400 00:24:10,360 --> 00:24:16,390 우리가 될 것하고 있기 때문에, 변경 Y 방향으로 화상을 이동. 401 00:24:16,390 --> 00:24:19,050 그리고 지금 우리는 뭔가를 애니메이션 루프했다. 402 00:24:19,050 --> 00:24:21,180 >> 어떻게 애니메이션이 작동합니까? 403 00:24:21,180 --> 00:24:27,630 음, 인간의 눈 (12)은 별개의 감지 할 수 있습니다 매 순간에 이미지, 알았지? 404 00:24:27,630 --> 00:24:33,060 당신이 날 12 이미지 카드를 플래시한다면 두 번째로, 나는 그 이미지의 각을 보았다 405 00:24:33,060 --> 00:24:35,950 자신의 고유 한 개별 이미지로. 406 00:24:35,950 --> 00:24:39,690 지금, 당신은 더 많은 깜박이는 경우 두 번째의 날에 이미지, 407 00:24:39,690 --> 00:24:42,140 다음 내 눈 시작할 것 그들을 함께 흐리게하기 408 00:24:42,140 --> 00:24:46,920 나는 모션으로 인식 것, 대신에 하나의 고유 한 이미지. 409 00:24:46,920 --> 00:24:51,930 그래서, 예를 들어, 영화, 텔레비전, 그들은 당신이 24 시간에 이미지를 플래시 410 00:24:51,930 --> 00:24:52,570 두 번째. 411 00:24:52,570 --> 00:24:55,110 그래서 초당 24 프레임입니다. 412 00:24:55,110 --> 00:25:00,136 컴퓨터 화면 반면 자주 초당 60 프레임입니다. 413 00:25:00,136 --> 00:25:01,260 즉, 자신의 새로 고침 속도입니다. 414 00:25:01,260 --> 00:25:04,650 즉 그들이 새로 고침 빈도의 화면의 그림. 415 00:25:04,650 --> 00:25:08,960 그래서 우리의 목표는 (60)이 될 것입니다 우리의 게임에 대한 초당 프레임. 416 00:25:08,960 --> 00:25:11,770 417 00:25:11,770 --> 00:25:13,710 >> 그래서 코드에서 것을 볼 수 있습니다. 418 00:25:13,710 --> 00:25:19,064 각 프레임에 대한 그래서, 우리가 처음이야 창을 취소 한 것. 419 00:25:19,064 --> 00:25:20,230 이것은 일반적인 패턴이다. 420 00:25:20,230 --> 00:25:22,450 당신은 항상 취소 윈도우 프레임마다 다음 421 00:25:22,450 --> 00:25:25,210 도면을 모두 수행 작업 후 단부에서, 422 00:25:25,210 --> 00:25:29,610 RenderPresent가 보여 않습니다 프레임의 모든. 423 00:25:29,610 --> 00:25:33,910 그리고 당신은 거 야 마지막에 대기가 424 00:25:33,910 --> 00:25:36,340 다음 때까지 대기 프레임은 시작해야한다. 425 00:25:36,340 --> 00:25:38,650 >> 나는 많은 일을했다 그래서 만약 여기에 복잡한 계산 426 00:25:38,650 --> 00:25:43,100 그 이상 16 밀리 초를했다, 그것은 나를 위해 불가능하다 427 00:25:43,100 --> 00:25:46,890 60의 프레임 속도를 얻기 위해 그 각 프레임이기 때문에 나는 원 428 00:25:46,890 --> 00:25:48,750 계산하는 데 시간이 너무 오래 복용. 429 00:25:48,750 --> 00:25:52,340 또한, 우리는 정말 일을하는지 작품의 무시할 금액의 종류 430 00:25:52,340 --> 00:25:54,820 여기에, 단지 거기 때문에 우리가 그리는 것 한 가지. 431 00:25:54,820 --> 00:25:59,390 그래서 나는 단지의 1/60을 기다립니다 둘째, 길이 인 432 00:25:59,390 --> 00:26:01,520 프레임 사이의 프레임. 433 00:26:01,520 --> 00:26:05,610 그래서 나는 종류의 일을 척 해요 내 모든 작품은 제로 시간이 걸립니다. 434 00:26:05,610 --> 00:26:09,050 하지만 실제 게임에서, 당신은 빼기해야 할 것이다 435 00:26:09,050 --> 00:26:13,760 시간은 그것이 수행했다 당신의 휴식 시간에서이 모든 작업. 436 00:26:13,760 --> 00:26:16,970 >> 어쨌든, 나는 무엇이다 실제로이 루프에서 일을? 437 00:26:16,970 --> 00:26:19,070 나는 창을 취소합니다. 438 00:26:19,070 --> 00:26:27,470 나는에 int이며 dest.y을 설정 내 실제 Y 위치를 int로 캐스팅. 439 00:26:27,470 --> 00:26:32,070 지금, 나는 해상도를 떠 원하는 내 게임 내 y 위치에 대한, 440 00:26:32,070 --> 00:26:34,150 그러나 실제로에 화면에 그립니다, 441 00:26:34,150 --> 00:26:39,070 이 단위이기 때문에 그것은, 정수가 필요합니다 픽셀은, 그래서 캐스트가 무엇인지입니다. 442 00:26:39,070 --> 00:26:41,745 나는 이미지를 그릴거야. 443 00:26:41,745 --> 00:26:45,180 그래서 이것은 소스 사각형이다. 444 00:26:45,180 --> 00:26:47,060 이것은 목적지 직사각형이다. 445 00:26:47,060 --> 00:26:50,310 그래서 null을 전달 원 직사각형 446 00:26:50,310 --> 00:26:53,426 내 전체 질감을 그리려는 대답. 447 00:26:53,426 --> 00:26:55,300 하지만 경우를 많이했다 게임의 텍스처 448 00:26:55,300 --> 00:26:59,120 그들은 하나의 큰 텍스처 맵의 모든 것 그것은 단지 하나 SDL에로드 된 449 00:26:59,120 --> 00:27:02,850 질감, 당신은 할 수 소스 사각형을 사용 450 00:27:02,850 --> 00:27:06,750 작은 텍스처 중 하나를 선택하고, 작은 스프라이트 하나, 451 00:27:06,750 --> 00:27:09,450 그 큰 텍스처 맵 중. 452 00:27:09,450 --> 00:27:14,740 >> 그래서 다시, 내 렌더링 전달하고있어, 내 질감, 현재 대상. 453 00:27:14,740 --> 00:27:18,320 이 곳에서 될 것입니다 창은이 그려 질 것입니다. 454 00:27:18,320 --> 00:27:21,390 그리고, 나는 애니메이션거야 때문에 뭔가, 나는 운동이 필요, 455 00:27:21,390 --> 00:27:25,150 나는를 업데이트 할거야 각 프레임에 스프라이트의 위치. 456 00:27:25,150 --> 00:27:30,190 그래서이 상수라는 스크롤이 초당 픽셀 단위의 속도입니다. 457 00:27:30,190 --> 00:27:34,320 이제, 우리는 이동을 할 때마다, 프레임은 1/60 초이다. 458 00:27:34,320 --> 00:27:36,740 그래서 나는 60 그 분할거야. 459 00:27:36,740 --> 00:27:42,350 그리고, 난, 어디 보자 y 위치에서 그것을 빼서. 460 00:27:42,350 --> 00:27:44,470 왜 뺀 거지? 461 00:27:44,470 --> 00:27:46,169 우리는 두 번째에 해당 얻을 수 있습니다. 462 00:27:46,169 --> 00:27:48,460 그럼 난 내 자원을 정리 프로그램은 끝났어. 463 00:27:48,460 --> 00:27:49,830 >> 그럼 그렇게합시다. 464 00:27:49,830 --> 00:27:52,450 465 00:27:52,450 --> 00:28:03,570 그럼 메이크업 SRCS = hello4로 가자 animation.c, 알았지? 466 00:28:03,570 --> 00:28:05,720 경기. 467 00:28:05,720 --> 00:28:06,770 거기 당신은 간다. 468 00:28:06,770 --> 00:28:12,690 그래서 나는 위로 스크롤해야 멋지다 창. 469 00:28:12,690 --> 00:28:17,110 하지만 차감 된, 잠깐만 y 위치마다에서. 470 00:28:17,110 --> 00:28:18,910 거기에 무슨 일이야? 471 00:28:18,910 --> 00:28:24,010 글쎄, 그 SDL에서 밝혀와 사실, 대부분의 컴퓨터 그래픽, 472 00:28:24,010 --> 00:28:28,890 좌표계의 원점 윈도우의 왼쪽 상단입니다. 473 00:28:28,890 --> 00:28:34,960 >> 그래서 양의 X 방향으로 간다 오른쪽으로 당신의 창에서. 474 00:28:34,960 --> 00:28:38,110 그리고 양의 Y 방향 실제로 내려갑니다. 475 00:28:38,110 --> 00:28:40,470 그래서 다시 원점의에 당신의 창의 왼쪽 상단, 476 00:28:40,470 --> 00:28:46,190 양의 Y 방향은 아래로 및 양의 X는 우측이다. 477 00:28:46,190 --> 00:28:48,770 그래서에서 뺄 때 y 위치, 즉이다 478 00:28:48,770 --> 00:28:52,640 그것은 부정에 갈 수 있도록 진행 창 달려 y 방향. 479 00:28:52,640 --> 00:28:55,500 그래서 거기에 무슨 일이 일어나고 있는지입니다. 480 00:28:55,500 --> 00:28:56,510 시원한. 481 00:28:56,510 --> 00:28:59,240 >> 의 다음 파일을 살펴 보자. 482 00:28:59,240 --> 00:29:05,700 여기의 일부입니다 여기서 마지막으로 보여 483 00:29:05,700 --> 00:29:08,920 윈도우의 모서리에 그 X를 얻을 수 즉 창을 닫습니다하기로했다 484 00:29:08,920 --> 00:29:10,660 일하다. 485 00:29:10,660 --> 00:29:12,800 그래서 무슨 일이야? 486 00:29:12,800 --> 00:29:17,520 우리는 윈도우를 생성, SDL을 초기화 , 렌더러를 만들 이미지를로드, 487 00:29:17,520 --> 00:29:19,770 텍스처를 만들 같은 우리는 전에 본 적이. 488 00:29:19,770 --> 00:29:26,850 우리는 같은 대상 사각형이 이전과 같은 호출은 텍스처를 조회 할 수 있습니다. 489 00:29:26,850 --> 00:29:29,780 하지만이 시간, 우리는 그 다음이야 폭을 분할 예정 490 00:29:29,780 --> 00:29:33,110 4에 의해 우리의 목적지의 높이입니다. 491 00:29:33,110 --> 00:29:36,430 이것 만의 효과를 갖는다 우리의 이미지를 때 확장 492 00:29:36,430 --> 00:29:39,884 우리는 네 가지가 창에 표시됩니다. 493 00:29:39,884 --> 00:29:40,800 그래서 꽤 깔끔한입니다. 494 00:29:40,800 --> 00:29:42,770 우리는 그냥 그런 확장 할 수 있습니다. 495 00:29:42,770 --> 00:29:45,970 우리는 스프라이트를 시작하는거야 화면 중앙. 496 00:29:45,970 --> 00:29:49,410 그리고 지금 우리는 x와 y 속도와가 그들은 모두 제로에서 시작하는 것입니다. 497 00:29:49,410 --> 00:29:53,740 498 00:29:53,740 --> 00:29:55,880 >> 이것은 잘못된 파일입니다. 499 00:29:55,880 --> 00:29:56,380 미안해. 500 00:29:56,380 --> 00:29:57,960 그래서 모든 사실을합니다. 501 00:29:57,960 --> 00:30:00,170 즉,이 파일의 모든 아직. 502 00:30:00,170 --> 00:30:03,210 우리는 4, 모든 의한 분할이있다. 503 00:30:03,210 --> 00:30:07,830 그래서 여기에 우리는 우리의 x와 y 위치를 창의 센터. 504 00:30:07,830 --> 00:30:12,480 그리고 우리는 그것을 초기 속도를 제공 이 등속의 어느 505 00:30:12,480 --> 00:30:15,180 나는 초당 300 픽셀 믿습니다. 506 00:30:15,180 --> 00:30:19,850 이제, 우리는이 INT는 단지뿐만 아니라 수 있습니다 가까운 요구라는 부울합니다. 507 00:30:19,850 --> 00:30:23,970 그리고 대신의 일을 여기에 타이머에 무한 루프, 508 00:30:23,970 --> 00:30:29,180 우리는 다음과 같이 애니메이션 될거야 가까운만큼이 요청되지 않습니다. 509 00:30:29,180 --> 00:30:30,960 >> 그래서 우리는 어떻게 이벤트를 처리합니까? 510 00:30:30,960 --> 00:30:35,600 음, SDL은 이벤트를 큐 무대 뒤에서 문자 큐. 511 00:30:35,600 --> 00:30:38,860 그리고 각 프레임, 우리는 이벤트를 대기열에서 제외 할 수 있습니다 512 00:30:38,860 --> 00:30:43,900 사용하여 해당 대기열에서 이 호출 SDL_PullEvent. 513 00:30:43,900 --> 00:30:46,730 그리고 또, 확실히 읽을 이동 문서에서이 약. 514 00:30:46,730 --> 00:30:50,450 더 많은 디테일이 많이있다 더 많은 기능이 사용하실 수 있습니다. 515 00:30:50,450 --> 00:30:54,750 우리는 주소 통과 이 일의, SDL_Event 516 00:30:54,750 --> 00:30:56,990 것을 우리는 여기에 스택에 있습니다. 517 00:30:56,990 --> 00:30:58,840 >> 이제 SDL_event은 무엇인가? 518 00:30:58,840 --> 00:31:02,356 SDL 때문에, 우리는에 보면 documentation--은하자 519 00:31:02,356 --> 00:31:07,580 분류, 입력에 의해, API를 참조 이벤트, 이벤트 처리, 520 00:31:07,580 --> 00:31:15,150 우리는 숫자를 볼 수 있습니다 여기의 다른 이벤트 521 00:31:15,150 --> 00:31:18,600 우리는 거기에 볼 수 있습니다 이들의 전체 톤. 522 00:31:18,600 --> 00:31:22,150 그래서이 SDL_Event 것은 무엇입니까? 523 00:31:22,150 --> 00:31:28,190 524 00:31:28,190 --> 00:31:31,107 SDL_Event는 노동 조합이다. 525 00:31:31,107 --> 00:31:31,940 와우, 노동 조합은 무엇인가? 526 00:31:31,940 --> 00:31:33,910 당신은 아마 적이 없습니다 그 전에 들어. 527 00:31:33,910 --> 00:31:35,610 그리고 괜찮아요. 528 00:31:35,610 --> 00:31:39,420 >> 노동 조합의 종류처럼 구조체를 제외한 구조체, 529 00:31:39,420 --> 00:31:41,960 모두를위한 공간이 해당 필드와 메모리, 530 00:31:41,960 --> 00:31:45,060 노조는이 반면 충분한 공간이 가장 큰 맞게 531 00:31:45,060 --> 00:31:49,660 그 수단의 필드 중 하나, 오직 하나의 필드를 저장할 수있다 532 00:31:49,660 --> 00:31:52,830 시간에 어떤 종류의 바로, 이벤트에 대한 의미가? 533 00:31:52,830 --> 00:31:55,810 우리는 키보드를 가질 수 있습니다 이벤트 또는 윈도우 이벤트, 534 00:31:55,810 --> 00:31:59,750 하지만 하나의 이벤트는 모두가 될 수 없습니다 키보드 이벤트와 윈도우 이벤트, 535 00:31:59,750 --> 00:32:05,450 그래서 공간을 가지고 어리석은 것 우리의 이벤트 노동 조합 내부의 사람들의 모두. 536 00:32:05,450 --> 00:32:07,770 그래서 당신이 원한다면 자신의 노동 조합을 만들 537 00:32:07,770 --> 00:32:10,020 정확히 동일한 보이는 구조체를 만드는 등, 538 00:32:10,020 --> 00:32:14,140 것을 제외하고 우리는 노동 조합의 키워드를 사용하여 대신 구조체 키워드. 539 00:32:14,140 --> 00:32:17,490 그리고 모두를 위해, 기억 노동 조합 내부의 일, 540 00:32:17,490 --> 00:32:22,020 노조가 실제 변수 단지 이들 값 중 하나를 가질 수있다 541 00:32:22,020 --> 00:32:24,780 시. 542 00:32:24,780 --> 00:32:29,940 >> 그렇다면 우리는 이벤트의 종류를 알 수 있습니다 우리는 단지이 큐 떨어져 튀어? 543 00:32:29,940 --> 00:32:33,370 음, 우리는 event.type을 테스트 할 수 있습니다. 544 00:32:33,370 --> 00:32:35,792 그리고 그와 같은 경우 SDL_Quit, 우리는 알고있다 545 00:32:35,792 --> 00:32:37,500 이 이벤트의 그 때를 생성 546 00:32:37,500 --> 00:32:39,510 윈도우의 모서리에 그 X를했다. 547 00:32:39,510 --> 00:32:44,270 그리고 가까운 요청 설정할 수 있습니다 우리는 1과 같다. 548 00:32:44,270 --> 00:32:47,230 나머지는 그냥 애니메이션입니다 당신은 전에 본 적이있다. 549 00:32:47,230 --> 00:32:52,802 그럼 가서 만들어 보자 이과는 어떻게 작동하는지 잘 참조하십시오. 550 00:32:52,802 --> 00:32:55,135 그래서 화장을 입력거야 및 다음 SRCS = hello5_events.c. 551 00:32:55,135 --> 00:33:03,760 552 00:33:03,760 --> 00:33:04,770 우리는 거기에 갈. 553 00:33:04,770 --> 00:33:05,780 계략. 554 00:33:05,780 --> 00:33:08,920 >> 이제, 우리는 그것이 볼 수 있습니다 참으로 네 가지로 축소. 555 00:33:08,920 --> 00:33:10,360 그리고 지금은 주위에 튀는입니다. 556 00:33:10,360 --> 00:33:14,630 나는 약간의 충돌 감지가 창의면과 일 557 00:33:14,630 --> 00:33:16,840 우리는 한 번 봐 걸릴 수 있습니다. 558 00:33:16,840 --> 00:33:21,190 나는 그것을 닫 갈 때 어떻게됩니까? 559 00:33:21,190 --> 00:33:22,120 그것은 닫습니다. 560 00:33:22,120 --> 00:33:22,740 환상적인. 561 00:33:22,740 --> 00:33:24,290 우리는 그 사건을 받았다. 562 00:33:24,290 --> 00:33:26,630 그리고 우리는 그것을 처리. 563 00:33:26,630 --> 00:33:30,730 >> 그럼 코드를 다시 살펴 보자. 564 00:33:30,730 --> 00:33:33,020 그래서 나는 그것을 어떻게 얻었 는가 그렇게 주위에 튀는? 565 00:33:33,020 --> 00:33:37,200 기억 나는 두 x 및 초기 속도에 Y. 566 00:33:37,200 --> 00:33:39,260 속도는 양수 상수, 그래서 그건 567 00:33:39,260 --> 00:33:42,680 이 것을 시작 얻을 수 아래 오른쪽에 가고. 568 00:33:42,680 --> 00:33:45,680 569 00:33:45,680 --> 00:33:50,310 >> 이제, 처리 이외에 각 프레임, 발생할 수있는 이벤트, 570 00:33:50,310 --> 00:33:57,520 내 스프라이트 여부를 감지하는거야 창 밖으로 이동하려고합니다. 571 00:33:57,520 --> 00:34:03,610 그래서 우리는 단지 확인하여 해당 작업을 수행 할 수 있습니다 0 X_POS, Y_POS 후 0, 및 572 00:34:03,610 --> 00:34:07,370 또한 X_POS 및 Y_POS와 윈도우 폭 및 높이 창. 573 00:34:07,370 --> 00:34:11,010 내가 차감 한 주목 스프라이트의 폭입니다. 574 00:34:11,010 --> 00:34:14,090 내가하지 않았다 경우 때문에이다 스프라이트의 폭을 빼, 575 00:34:14,090 --> 00:34:17,760 그것은 단지 것을 확인 할 스프라이트의 기원 576 00:34:17,760 --> 00:34:19,690 창 밖에 가지 않았다. 577 00:34:19,690 --> 00:34:21,480 그러나 우리는 전체를 원한다 스프라이트의 폭 578 00:34:21,480 --> 00:34:24,030 항상 창 내부에하고 스프라이트의 전체 높이 579 00:34:24,030 --> 00:34:25,321 항상 창 내부합니다. 580 00:34:25,321 --> 00:34:27,429 그래서 빼기가 무엇인지입니다. 581 00:34:27,429 --> 00:34:30,080 여기에 기하학의 많은 수 그것을 밖으로 끌어 도움이 될 582 00:34:30,080 --> 00:34:33,929 좌표 종이에 시스템은 무슨 일이 일어나고 있는지 볼 수 있습니다. 583 00:34:33,929 --> 00:34:38,090 >> 나는 충돌하는 경우에 그래서, 난 그냥 단순히 위치를 재설정 584 00:34:38,090 --> 00:34:41,400 이 가고되지 않도록 화면 밖으로. 585 00:34:41,400 --> 00:34:47,179 이 반사 만약 내가 갈거야 측벽들 중 하나에, 586 00:34:47,179 --> 00:34:51,469 나는 부정거야 X 속도 있도록 587 00:34:51,469 --> 00:34:53,210 다른 방향으로 튀는 시작합니다. 588 00:34:53,210 --> 00:34:56,210 그리고 마찬가지로, 안타 상단 또는 하단, 589 00:34:56,210 --> 00:34:59,820 나는 Y 속도를 설정하는거야 음의 Y 속도와 동일, 590 00:34:59,820 --> 00:35:01,690 있도록 다시 반송됩니다. 591 00:35:01,690 --> 00:35:03,860 그래서 우리가 여기 있다는있어 얼마나이다. 592 00:35:03,860 --> 00:35:07,560 >> 및 위치 갱신 다만, 우리가 전에 본 적이처럼 593 00:35:07,560 --> 00:35:12,510 우리가이기 때문에, (60)에 의해 분할 단지 1/60 초 운반. 594 00:35:12,510 --> 00:35:15,750 그리고 렌더링, 이전과 동일. 595 00:35:15,750 --> 00:35:19,810 그리고 그 모든 것을입니다 즉,이 파일에 가고 있었다. 596 00:35:19,810 --> 00:35:22,490 우리는 이벤트를 어떻게 그래서입니다. 597 00:35:22,490 --> 00:35:29,260 중요한 것은 여기 빼앗아 이 SDL_PullEvent 함수이다. 598 00:35:29,260 --> 00:35:33,020 그리고 당신은 확실히을 읽어야 SDL_Event에 대한 설명서 더 599 00:35:33,020 --> 00:35:38,630 연합,이 데이터 형식이기 때문에 아주 중요한, 우리는 그것을 사용하기 때문에 600 00:35:38,630 --> 00:35:40,690 모든 종류의 이벤트에 대한. 601 00:35:40,690 --> 00:35:46,539 >> 예를 들어, 우리는 키보드에 사용할 이벤트, 이는이 파일을위한 것입니다. 602 00:35:46,539 --> 00:35:47,330 그래서 우리는 무엇을해야합니까? 603 00:35:47,330 --> 00:35:50,180 우리는 이전과 같은 일이 , SDL을 초기화 윈도우를 생성, 604 00:35:50,180 --> 00:35:55,260 이미지를로드, 렌더러를 만들 메모리에 텍스처를 만듭니다. 605 00:35:55,260 --> 00:36:00,530 다시 말하지만, 우리는 갈거야 이 DEST 사각형을 가지고, 606 00:36:00,530 --> 00:36:04,890 우리는 이미지의 크기를 조절하는거야 네함으로써, 조금 작게. 607 00:36:04,890 --> 00:36:08,000 이제, 우리는 시작 예정 화면의 중앙에 스프라이트. 608 00:36:08,000 --> 00:36:12,090 하지만이 시간, 우리는을 설정하는거야 초기 X 0으로 Y 속도, 609 00:36:12,090 --> 00:36:15,140 키보드이기 때문에 이들을 제어하는​​ 것. 610 00:36:15,140 --> 00:36:18,900 그리고 또한, 우리는 갈거야 이러한 변수를 추적 611 00:36:18,900 --> 00:36:20,450 상하 좌우. 612 00:36:20,450 --> 00:36:23,090 그리고는 계속 것 우리가했는지 추적 613 00:36:23,090 --> 00:36:27,370 키보드 버튼을 누르면 그 위, 아래, 왼쪽에 대응 614 00:36:27,370 --> 00:36:28,460 오른쪽. 615 00:36:28,460 --> 00:36:32,440 >> 이제이 멋진 가지입니다 우리는 W, A, S를 사용할 수 있기 때문에, 616 00:36:32,440 --> 00:36:35,480 여기서 D, 또는 실제의 화살표 키. 617 00:36:35,480 --> 00:36:38,590 우리는 두 번째에 해당를 볼 수 있습니다. 618 00:36:38,590 --> 00:36:41,140 그래서 우리는 처리 할거야 직전 같은 이벤트. 619 00:36:41,140 --> 00:36:42,530 우리는 이벤트를 당깁니다. 620 00:36:42,530 --> 00:36:45,840 하지만 지금 우리는 갈거야 이벤트 형으로 전환합니다. 621 00:36:45,840 --> 00:36:47,710 이 SDL_Quit 있다면, 우리는있어 가까운 설정하는 것 622 00:36:47,710 --> 00:36:49,990 직전처럼, 하나에 요청했다. 623 00:36:49,990 --> 00:36:52,315 즉,있는 X를 처리 창의 코너 624 00:36:52,315 --> 00:36:55,050 우리의 윈도우가 실제로 닫도록. 625 00:36:55,050 --> 00:37:00,110 >> 그렇지 않으면, 우리는 SDL 키를 얻는 경우에 아래로 우리는 키 누름 이벤트 수단, 626 00:37:00,110 --> 00:37:04,470 그 다음 우리가 할 거 야 우리가 것입니다 여기에이 일에 전환 할 것, 627 00:37:04,470 --> 00:37:11,370 어느 그래서 event.key means-- 우리의 이벤트 노동 조합을 치료하는 의미, 628 00:37:11,370 --> 00:37:15,490 가서 열쇠를 가져와 거기에 이벤트 구조. 629 00:37:15,490 --> 00:37:18,810 그래서이 밝혀 노동 조합은 키 이벤트 구조입니다. 630 00:37:18,810 --> 00:37:22,820 그리고 키로 이동 이벤트의 구조의 필드 631 00:37:22,820 --> 00:37:26,140 라는 keysym에 다음 스캔 코드. 632 00:37:26,140 --> 00:37:29,480 그리고 또, 확실히 읽기 이에 대한 설명서를 참조하십시오. 633 00:37:29,480 --> 00:37:31,220 키워드 입력 매우 흥미 롭군요. 634 00:37:31,220 --> 00:37:34,020 당신은 스캔 코드 또는 키 코드를 얻을 수 있습니다. 635 00:37:34,020 --> 00:37:38,590 그리고 그것은, 조금 미묘하지만 설명서는 아주 좋은 것입니다. 636 00:37:38,590 --> 00:37:43,380 >> 우리는 스캔 코드를 볼 수 있다면 인 W 또는 최대 우리의 키 누름, 637 00:37:43,380 --> 00:37:45,450 우리는 1과 동일한 설정하는 것입니다. 638 00:37:45,450 --> 00:37:47,240 그리고 우리는 스위치에서 휴식. 639 00:37:47,240 --> 00:37:52,980 그것은 또는 왼쪽의 경우, 우리는 등, 1 왼쪽 세트 시저 나, 등등, 아래로 권리를. 640 00:37:52,980 --> 00:37:57,080 자,이 외부 스위치에 밖으로, 우리는 이벤트를 키를 참조하는 경우, 641 00:37:57,080 --> 00:38:00,730 그것은 우리가 키를 해제 한 의미 우리는 더 이상 눌러 없습니다 것입니다. 642 00:38:00,730 --> 00:38:05,380 그래서 0에 해당까지 말할거야, 왼쪽, 오른쪽, 아래, 0과 동일 0과 동일 643 00:38:05,380 --> 00:38:08,260 0과 동일, 등등. 644 00:38:08,260 --> 00:38:12,070 >> 그리고 우리는 이들 각각에있는 알 두 가지 경우 서로 바로 옆에 넣어 645 00:38:12,070 --> 00:38:14,490 별도의 코드 첫 번째 경우에 대한 어떤 646 00:38:14,490 --> 00:38:18,180 그것의 여부를 의미합니다 S 또는 바로 여기 아래로, 647 00:38:18,180 --> 00:38:20,520 그것은이 코드를 실행하는 것입니다. 648 00:38:20,520 --> 00:38:22,090 그래서 아주 편리합니다. 649 00:38:22,090 --> 00:38:24,830 그것은 우리가 더 많은 일을 할 필요가 없습니다 조건 IFS 물건 650 00:38:24,830 --> 00:38:26,980 그런. 651 00:38:26,980 --> 00:38:29,420 >> 그래서 우리는 갈거야 속도를 결정합니다. 652 00:38:29,420 --> 00:38:31,020 우리는 0으로 속도를 설정합니다. 653 00:38:31,020 --> 00:38:33,910 그리고 최대 누르면 아니라 아래로, 우리 654 00:38:33,910 --> 00:38:37,450 음의 속도로 Y 속도를 설정합니다. 655 00:38:37,450 --> 00:38:42,930 부정적인 기억 때문에 음의 Y 방향은 업입니다. 656 00:38:42,930 --> 00:38:45,540 그리고 양의 Y 방향은 아래입니다. 657 00:38:45,540 --> 00:38:47,510 아래로 누르면 하지까지, 우리는있어 658 00:38:47,510 --> 00:38:53,860 긍정적 인 속도로 설정하는 것, 어떤 화면을 아래로가는 것을 의미한다. 659 00:38:53,860 --> 00:38:55,460 왼쪽과 오른쪽과 같은 것. 660 00:38:55,460 --> 00:38:58,200 >> 그리고 우리는 업데이트 할거야 직전 같은 위치. 661 00:38:58,200 --> 00:39:00,740 우리는 충돌을 할거야 범위와 감지, 662 00:39:00,740 --> 00:39:04,290 그러나 우리는을 다시하지 않을거야 속도, 속도 단지 때문에 663 00:39:04,290 --> 00:39:06,780 키보드로 제어. 664 00:39:06,780 --> 00:39:11,230 그러나 우리는을 재설정하려고 위치는 창에 보관합니다. 665 00:39:11,230 --> 00:39:14,400 그리고 우리를 설정하는거야 구조체에 위치 666 00:39:14,400 --> 00:39:17,400 다음 모든 작업을 수행 앞에서 물건을 렌더링. 667 00:39:17,400 --> 00:39:20,750 그래서 그것이 무엇을 보자. 668 00:39:20,750 --> 00:39:25,460 그래서 SRCS--가 보자 확인 이 hello6_keyboard.c입니다. 669 00:39:25,460 --> 00:39:38,140 670 00:39:38,140 --> 00:39:38,820 >> 아니, 오. 671 00:39:38,820 --> 00:39:40,150 그래서 우리는 여기에 몇 가지 경고를 받았습니다. 672 00:39:40,150 --> 00:39:43,840 그리고 그것은 단순히 우리가하지 않았다 말하는 모든 단일 가능한 종류를 확인 673 00:39:43,840 --> 00:39:45,610 이벤트. 674 00:39:45,610 --> 00:39:49,470 그 때문에, 괜찮아요 그 중 236 정도가있다. 675 00:39:49,470 --> 00:39:51,760 그래서 나는 그 경고를 무시하는거야. 676 00:39:51,760 --> 00:39:53,530 그것은 여전히​​ 잘 컴파일합니다. 677 00:39:53,530 --> 00:39:56,100 그래서 게임을하는거야. 678 00:39:56,100 --> 00:39:57,590 그것은 움직이지 않고있다. 679 00:39:57,590 --> 00:40:04,150 그러나 지금, 나는 내 키보드에 매쉬 때, 나는, 여기에 몇 가지 WASD 이동을 할 수 680 00:40:04,150 --> 00:40:06,870 나뿐만 아니라 내 화살표 키를 사용합니다. 681 00:40:06,870 --> 00:40:10,070 그리고 난에도 불구하고, 통지 바로 지금 누르면, 682 00:40:10,070 --> 00:40:13,804 그것은, 창 밖으로 않을거야 나는 모든 프레임에 재설정 때문이다. 683 00:40:13,804 --> 00:40:14,720 그래서 꽤 깔끔한입니다. 684 00:40:14,720 --> 00:40:19,420 당신과 마리오 주위를 이동 상상할 수 일부 화살표 키 또는 그런 일. 685 00:40:19,420 --> 00:40:22,880 그리고 네, X가 작동 않습니다. 686 00:40:22,880 --> 00:40:26,900 >> 우리는거야 그래서 최종 파일 hellow7_mouse, 보는. 687 00:40:26,900 --> 00:40:29,600 이 마우스 입력을 얻기에 관하여이다. 688 00:40:29,600 --> 00:40:34,790 우리는 이것에 따라서 수학 헤더를 가져, 689 00:40:34,790 --> 00:40:38,100 우리가 할 겁니다 때문에 여기에 수학의 약간. 690 00:40:38,100 --> 00:40:45,260 동일한 오래된, 동일한 오래된 물건, 대상, 전에 알, 이전과 동일합니다. 691 00:40:45,260 --> 00:40:46,910 음,이 흥미 롭다. 692 00:40:46,910 --> 00:40:51,730 그래서 우리는 검사에 돌아온다 SDL에 대한 이벤트를 종료합니다. 693 00:40:51,730 --> 00:40:52,460 그 이유는 무엇입니까? 694 00:40:52,460 --> 00:40:55,110 그래서 당신은 이벤트에서 마우스 입력을받을 수 있습니다. 695 00:40:55,110 --> 00:40:57,670 마우스가 움직일 때처럼, 당신은에 대한 이벤트를 얻을. 696 00:40:57,670 --> 00:41:00,520 마우스 버튼이 눌려지면, 당신은에 대한 이벤트를 얻을 수 있습니다. 697 00:41:00,520 --> 00:41:05,760 >> 그러나, 약간 간단한 다른있다 아마도, 마우스 입력을 얻기를위한 API. 698 00:41:05,760 --> 00:41:09,500 그리고 단순히 SDL GET 마우스 상태입니다. 699 00:41:09,500 --> 00:41:14,370 그래서 x의 지능과 커서 위치에 대한 Y. 700 00:41:14,370 --> 00:41:18,910 나는 SDL_GetMouseState로 전달 어떤이를 설정합니다. 701 00:41:18,910 --> 00:41:22,200 그리고이있는 위치입니다 윈도우의 좌표계. 702 00:41:22,200 --> 00:41:25,520 그래서 질량은 왼쪽 상단에있는 경우 창, 즉 0, 0을 것이다. 703 00:41:25,520 --> 00:41:28,040 704 00:41:28,040 --> 00:41:33,380 >> 자, 내가 할거야 것은 내가 갈거야입니다 벡터 수학의 조금 할 수 있습니다. 705 00:41:33,380 --> 00:41:36,910 난 당신이하지 생각했던 내기 CS50에서 그것을 볼 수 있지만, 여기 있습니다. 706 00:41:36,910 --> 00:41:40,720 나는 약간의 벡터를 할거야 수학은 벡터를 얻을 수 있습니다 707 00:41:40,720 --> 00:41:43,840 커서를 이미지에서. 708 00:41:43,840 --> 00:41:53,280 그래서 내가 왜해야합니까 여기 빼기? 709 00:41:53,280 --> 00:42:01,350 글쎄, 난 그냥 DEST를 사용한 경우 .- 그래서 나는 마우스 X를 번역해야 710 00:42:01,350 --> 00:42:05,166 반 폭으로 y를 화상의 높이 711 00:42:05,166 --> 00:42:08,040 난의 중심을 원하기 때문에 이미지, 마우스 향해 수 712 00:42:08,040 --> 00:42:10,160 화상의 기원하지. 713 00:42:10,160 --> 00:42:15,650 >> 그래서 내가 이야기하고 있는지 확인하기 위해 단지 여기에서 이미지의 중앙에 대한. 714 00:42:15,650 --> 00:42:19,510 그 다음 우리는 델타 x와 y를 얻을 수있는 타겟으로부터의 차이다 715 00:42:19,510 --> 00:42:23,430 이미지의 실제 위치이다. 716 00:42:23,430 --> 00:42:25,690 그리고 우리를 얻을 수 있습니다 여기에 거리있는 717 00:42:25,690 --> 00:42:29,140 피타고라스가 될 것입니다 정리, X의 제곱근 718 00:42:29,140 --> 00:42:32,720 배 X 더하기 Y 시간은 Y. 719 00:42:32,720 --> 00:42:38,400 >> 지금 지터를 방지하기 위해, 내가 표시 할 수 있습니다 당신 내가 이렇게하지 ​​않으면이 무엇을, 720 00:42:38,400 --> 00:42:45,830 경우 커서 사이의 거리 이미지 센터가 5 개 미만이고 721 00:42:45,830 --> 00:42:48,730 난 그냥 이미지를 이동하지 않을거야. 722 00:42:48,730 --> 00:42:52,900 그렇지 않으면, 우리는 속도를 설정합니다. 723 00:42:52,900 --> 00:42:55,960 그리고 우리가 있도록 설정 속도는 항상 일정 할 것이다. 724 00:42:55,960 --> 00:42:58,770 그리고 모든의 최종 결과 이 수학 이미지이다 725 00:42:58,770 --> 00:43:01,660 커서를 향해 이동하는 것입니다. 726 00:43:01,660 --> 00:43:08,470 >> 지금, 그것은 밝혀 SDL_GetMouseState, 727 00:43:08,470 --> 00:43:14,490 설정 이외에 x와 여기에 y를 인수, 728 00:43:14,490 --> 00:43:21,340 또한 해당하는 int를 돌려줍니다 마우스 버튼의 상태. 729 00:43:21,340 --> 00:43:24,600 그래서 우리는 그것을 읽을 수 없습니다 직접, 그러나 우리는 할 수 730 00:43:24,600 --> 00:43:29,090 하나의 이러한 매크로를 사용 비트 연산자, 그 무서운, 731 00:43:29,090 --> 00:43:30,650 단지 비트합니다. 732 00:43:30,650 --> 00:43:38,320 그래서 우리는 결과 인 버튼 말 우리 SDL_GetMouseState의, 그 경우 733 00:43:38,320 --> 00:43:43,990 비트와,이 매크로 여기에, SDL_BUTTON_LEFT. 734 00:43:43,990 --> 00:43:47,680 >> 그래서 간단하게 해결하는 것입니다 해당 비트 맵 735 00:43:47,680 --> 00:43:51,090 마우스 왼쪽 버튼을 누르면된다. 736 00:43:51,090 --> 00:43:55,470 그리고 비트 경우 및 발생 그건 737 00:43:55,470 --> 00:43:59,340 의미하지 제로, 왼쪽 버튼을 누르면했다, 738 00:43:59,340 --> 00:44:04,320 우리는 실제로 부정거야 두 X 및 Y 속도, 739 00:44:04,320 --> 00:44:06,700 이는 단지 이미지 폭주를 만들 것입니다. 740 00:44:06,700 --> 00:44:07,980 업데이트 위치. 741 00:44:07,980 --> 00:44:10,920 충돌 탐지는, 그것을 본 모든 전에, 렌더링, 모든 권리. 742 00:44:10,920 --> 00:44:11,510 현실을 만들어 보자. 743 00:44:11,510 --> 00:44:14,200 744 00:44:14,200 --> 00:44:16,050 그래서 당신은 SRCS = hello7_mouse.c을 얻었다. 745 00:44:16,050 --> 00:44:21,720 746 00:44:21,720 --> 00:44:22,220 큰. 747 00:44:22,220 --> 00:44:23,490 오류가 없습니다. 748 00:44:23,490 --> 00:44:24,900 그리고 게임. 749 00:44:24,900 --> 00:44:26,440 >> 그래서 여기 내 마우스가 있습니다. 750 00:44:26,440 --> 00:44:29,000 그리고 이미지가 참 내 마우스를 쫓는. 751 00:44:29,000 --> 00:44:33,140 이제 게임에서 당신은 아마 만들 이 적의 추격처럼 752 00:44:33,140 --> 00:44:35,240 당신의 작은 문자 또는 무엇이든. 753 00:44:35,240 --> 00:44:37,440 그러나 여기에서 우리는이 이미지는 마우스를 쫓는. 754 00:44:37,440 --> 00:44:41,000 그리고 클릭, 마우스 이미지를 쫓는 시작 755 00:44:41,000 --> 00:44:42,860 화상은 멀리 마우스에서 실행. 756 00:44:42,860 --> 00:44:43,810 그래서 꽤 멋지다. 757 00:44:43,810 --> 00:44:47,770 그리고주의 사항을 다시 거기 여기에 여전히 충돌 감지. 758 00:44:47,770 --> 00:44:53,930 >> 그래서 마지막 작은입니다 데모 여기 설정했습니다. 759 00:44:53,930 --> 00:44:58,870 그리고 이제 한 가지 더 살펴 보자. 760 00:44:58,870 --> 00:45:02,970 그래서 다시 여기에,이 지터를 언급했다. 761 00:45:02,970 --> 00:45:05,000 괜찮아. 762 00:45:05,000 --> 00:45:12,890 거리가 5 개 미만의 픽셀한다면, 나는 0으로 x와 y 속도를 설정했다. 763 00:45:12,890 --> 00:45:15,960 우리가 제거하면 어떻게됩니까? 764 00:45:15,960 --> 00:45:19,070 그래서 난 그냥 이렇게하는거야. 765 00:45:19,070 --> 00:45:23,820 766 00:45:23,820 --> 00:45:30,150 이 끔찍한 스타일을 용서하십시오, 그러나 우리는 올바른 코드를 댓글을 달았습니다. 767 00:45:30,150 --> 00:45:38,080 그래서 그 내용을 저장하고 할거야 그것을 확인하기 전에에서 동일한 명령. 768 00:45:38,080 --> 00:45:38,785 >> 괜찮아. 769 00:45:38,785 --> 00:45:39,660 그리고 지금은 어떻게됩니까? 770 00:45:39,660 --> 00:45:43,260 771 00:45:43,260 --> 00:45:43,760 좋다. 772 00:45:43,760 --> 00:45:45,801 우리는 여전히 다음과 같은 것 직전 같은 마우스, 773 00:45:45,801 --> 00:45:49,310 그러나 우리가 마우스에 도착하면, 우리는이 총 지터를 가지고있다. 774 00:45:49,310 --> 00:45:50,320 거기에 무슨 일이야? 775 00:45:50,320 --> 00:45:52,600 글쎄, 우리의 벡터 수학, 우리가 있었던 기억 776 00:45:52,600 --> 00:45:57,540 사이의 거리를 고려 커서 이미지의 중심? 777 00:45:57,540 --> 00:46:00,710 글쎄, 그건 접근로 0, 우리는 점점 시작 778 00:46:00,710 --> 00:46:06,280 미친 행동의 종류 등 여기서 이미지가 일종의입니다 779 00:46:06,280 --> 00:46:08,910 커서 주위에 진동 등을들 수있다. 780 00:46:08,910 --> 00:46:12,000 그리고이 지터를 생성합니다. 781 00:46:12,000 --> 00:46:13,020 그리고 정말 추한. 782 00:46:13,020 --> 00:46:15,103 그리고 당신은 아마하지 않습니다 당신의 게임이 그 일을 할, 783 00:46:15,103 --> 00:46:17,350 그것을하지 않는 특수 효과의 일종이다. 784 00:46:17,350 --> 00:46:21,960 >> 우리가 왜 그렇게 그건 그냥이 임의 785 00:46:21,960 --> 00:46:27,150 우리가 어디라고, 다섯 픽셀의 차단 이 다섯 픽셀 내에 있다면, 우리는 좋은입니다. 786 00:46:27,150 --> 00:46:29,560 우리는 더 이상 이미지를 이동할 필요가 없습니다. 787 00:46:29,560 --> 00:46:32,260 그래서 거기에 무슨 일이 일어나고 있는지입니다. 788 00:46:32,260 --> 00:46:37,390 789 00:46:37,390 --> 00:46:40,870 >> 그래서 꽤 많이 있습니다. 790 00:46:40,870 --> 00:46:44,390 이제 만드는 방법을 알고 창에서 이미지를로드, 791 00:46:44,390 --> 00:46:49,330 창에 이미지를 그릴 수 키보드 입력, 마우스 입력을 얻을, 792 00:46:49,330 --> 00:46:52,190 다른 한 무리가있다 입력 당신은 않을 것 793 00:46:52,190 --> 00:46:56,070 당신은 단지를 보낼 경우 얻을하는 방법을 알고 설명서를보고 몇 분 거리에 있습니다. 794 00:46:56,070 --> 00:46:59,670 그래서 당신이 실제로이 꽤 지금 귀하의 처분에 몇 가지 도구 795 00:46:59,670 --> 00:47:01,650 본격적인 게임을 작성합니다. 796 00:47:01,650 --> 00:47:05,030 >> 이제 모든 게임은 어떤 오디오를 필요 하지만 오디오 설명서 797 00:47:05,030 --> 00:47:06,460 또한 아주 좋은 것입니다. 798 00:47:06,460 --> 00:47:09,200 그리고 만약 내기 기꺼이 당신은 모든 일을 이해 799 00:47:09,200 --> 00:47:14,560 우리는 오늘에 대해 이야기 이미지, 표면, 800 00:47:14,560 --> 00:47:18,370 다음 창 및 모든, 알아내는 오디오 API는 아니다 801 00:47:18,370 --> 00:47:21,170 가는 나쁜합니다. 802 00:47:21,170 --> 00:47:27,420 그래서 뵙기를 기대합니다 당신은 SDL로 무엇을 만들 수 있습니다. 803 00:47:27,420 --> 00:47:31,595