1 00:00:00,000 --> 00:00:00,260 2 00:00:00,260 --> 00:00:03,010 >> DAVID Malan: Escriurem un programa la participació d'una finestra i un cercle amb 3 00:00:03,010 --> 00:00:05,820 el cercle rebotant fora de l'esquerra i dreta 4 00:00:05,820 --> 00:00:07,120 vores d'aquesta finestra. 5 00:00:07,120 --> 00:00:09,960 Per a això, farem servir l'Stanford Biblioteca Portable, i anem primer 6 00:00:09,960 --> 00:00:14,830 incloure gevents.h perquè puguem escoltar els moviments del ratolí. 7 00:00:14,830 --> 00:00:20,970 Anem a continuació inclouen gobjects.h perquè podem declarar coses com ovals o 8 00:00:20,970 --> 00:00:22,110 cercles, de veritat. 9 00:00:22,110 --> 00:00:26,090 I després anem a incloure gwindow.h perquè tenim una finestra gràfica per 10 00:00:26,090 --> 00:00:27,020 tot. 11 00:00:27,020 --> 00:00:30,390 >> Anem a declarar principal de la forma habitual. 12 00:00:30,390 --> 00:00:35,095 I ara anem a declarar i crear instàncies o crear aquesta finestra, GWindow - 13 00:00:35,095 --> 00:00:37,090 i anem a trucar a la finestra de variables - 14 00:00:37,090 --> 00:00:39,790 aconsegueix newGWindow. 15 00:00:39,790 --> 00:00:44,450 I arbitràriament ho aconseguirem 320 píxels per 240 píxels. 16 00:00:44,450 --> 00:00:46,190 >> Anem a la propera instància d'un cercle. 17 00:00:46,190 --> 00:00:48,740 Però per crear instàncies d'aquest cercle, hem de fer una mica més de treball. 18 00:00:48,740 --> 00:00:51,340 En particular, anem a omplir en aquest cercle de manera que la cosa sencera és 19 00:00:51,340 --> 00:00:53,910 negre i no només el resum d'elles. 20 00:00:53,910 --> 00:00:54,850 GOVAL - 21 00:00:54,850 --> 00:00:56,450 ho anem a anomenar el cercle - 22 00:00:56,450 --> 00:00:58,310 aconsegueix newGOval. 23 00:00:58,310 --> 00:01:04,810 Anem a posar aquest oval a 0, 110, i anem a fer els ovals 20 píxels d'amplada per 24 00:01:04,810 --> 00:01:09,070 20 píxels d'alt - en altres paraules, un diàmetre de 20 o d'un radi de 10. 25 00:01:09,070 --> 00:01:14,120 >> Ara anem a configurar el color d'aquest cercle ser cometes, tanca, "negre". Anem a 26 00:01:14,120 --> 00:01:19,030 estableix ara que s'omplirà especificant cert. 27 00:01:19,030 --> 00:01:24,100 I ara, finalment, anem a afegir el cercle per la finestra de la següent manera, mitjançant el qual el 28 00:01:24,100 --> 00:01:26,390 aquest últim s'afegeix a la primera. 29 00:01:26,390 --> 00:01:27,910 >> Ara anem a declarar un doble. 30 00:01:27,910 --> 00:01:29,200 L'anomenarem velocitat. 31 00:01:29,200 --> 00:01:32,380 I alguna cosa arbitrària, diguem que el velocitat d'aquest cercle serà 32 00:01:32,380 --> 00:01:36,290 2,0, en altres paraules, 2 píxels per a cada unitat de temps. 33 00:01:36,290 --> 00:01:39,380 I ara anem a deliberadament induir un bucle infinit. 34 00:01:39,380 --> 00:01:42,060 >> Llavors, com fer que aquest cercle van i tornen? 35 00:01:42,060 --> 00:01:45,190 Bé, anem a suposar que dins d'aquest bucle que per cada unitat de temps, que estem 36 00:01:45,190 --> 00:01:48,890 va a moure el cercle una mica bits basat en la seva velocitat de 2 píxels 37 00:01:48,890 --> 00:01:50,070 per unitat de temps. 38 00:01:50,070 --> 00:01:52,900 Però contínuament, haurem de comprovar si el cercle està en contacte amb la 39 00:01:52,900 --> 00:01:56,480 vora dreta de la pantalla o l'esquerra vora de la pantalla, ja que si és així, 40 00:01:56,480 --> 00:01:58,530 El necessitareu per recuperar-se, per dir-ho. 41 00:01:58,530 --> 00:02:00,380 >> Com implementar la noció de rebot? 42 00:02:00,380 --> 00:02:04,400 Bé, si anem a 2 píxels a la dret per unitat de temps, a rebotar 43 00:02:04,400 --> 00:02:08,259 la vora dreta, simplement pot revertir que per ser negatius 2 píxels per unitat 44 00:02:08,259 --> 00:02:10,400 de temps, negant així la velocitat. 45 00:02:10,400 --> 00:02:13,160 Així que de fet, el rebot és relativament senzill. 46 00:02:13,160 --> 00:02:19,260 >> Primer anem a moure el cercle per ella molts píxels al llarg de l'eix x, d'aquest 47 00:02:19,260 --> 00:02:21,040 el nombre de píxels al llarg de l'eix i. 48 00:02:21,040 --> 00:02:23,600 En altres paraules, nosaltres no volem que moure al llarg de l'eix i en absolut. 49 00:02:23,600 --> 00:02:25,950 Només volem que rebot de nou endavant i cap a l'esquerra i la dreta. 50 00:02:25,950 --> 00:02:31,910 >> I ara anem a comprovar dins d'aquest bucle si la coordenada x del cercle més 51 00:02:31,910 --> 00:02:36,515 l'amplada del cercle és més gran que o igual a la 52 00:02:36,515 --> 00:02:38,520 amplada de la finestra - 53 00:02:38,520 --> 00:02:42,180 En altres paraules, si la ubicació del cercle més l'amplada del cercle 54 00:02:42,180 --> 00:02:44,840 sí que és ara més enllà de la vora de la finestra, estaríem 55 00:02:44,840 --> 00:02:46,090 millor invertir nostra velocitat - 56 00:02:46,090 --> 00:02:49,080 57 00:02:49,080 --> 00:02:53,680 velocitat aconsegueix velocitat negativa, d'aquesta manera llançar una positiva a una 58 00:02:53,680 --> 00:02:56,090 negatiu o una negativa a una positiva. 59 00:02:56,090 --> 00:02:59,740 Però, i si el cercle s'està movent des de dreta a esquerra i, per tant, colpeja 60 00:02:59,740 --> 00:03:00,670 la vora esquerra? 61 00:03:00,670 --> 00:03:06,490 En altres paraules, si la coordenada x d' el cercle és ara menys de o igual 62 00:03:06,490 --> 00:03:12,530 a 0, seguirem endavant i de nou invertir la nostra velocitat. 63 00:03:12,530 --> 00:03:14,980 >> Així que per què no he afegit en el amplada del cercle aquesta 64 00:03:14,980 --> 00:03:16,410 temps, com ho vaig fer abans? 65 00:03:16,410 --> 00:03:19,050 Bé, tingui en compte que les coordenades d'un objecte es defineixen 66 00:03:19,050 --> 00:03:22,200 per la seva cantonada superior esquerra, no pel seu centre. 67 00:03:22,200 --> 00:03:25,810 I així, quan el cercle s'està movent des esquerra a dreta, hem de comprovar 68 00:03:25,810 --> 00:03:28,910 si la vora dreta de la cercle ha passat la 69 00:03:28,910 --> 00:03:30,200 vora dreta de la finestra. 70 00:03:30,200 --> 00:03:34,100 Així que per saber el que és això, tenim per obtenir la coordenada x del cercle 71 00:03:34,100 --> 00:03:38,080 més l'amplada del cercle per moure nosaltres mateixos a partir de l'esquerra superior 72 00:03:38,080 --> 00:03:40,650 cantonada, de manera efectiva, a la la cantonada superior dreta. 73 00:03:40,650 --> 00:03:43,700 Quan el cercle es mou de dreta a esquerra, per la seva banda, que no cal 74 00:03:43,700 --> 00:03:47,550 molestar amb l'addició, causa que el cantonada superior esquerra del cercle és 75 00:03:47,550 --> 00:03:50,700 ja el valor que anem a obtenir d'obtenir x. 76 00:03:50,700 --> 00:03:54,140 >> Ara anem a moure la pilota. 77 00:03:54,140 --> 00:04:00,900 Ara anem a guardar, compilar i executar aquest programa, fer rebotar,. / rebot. 78 00:04:00,900 --> 00:04:02,230 I aquí tenim un programa. 79 00:04:02,230 --> 00:04:05,760 >> Però el cercle s'està movent tan condemnadament ràpid, que és gairebé impossible veure el que hi ha 80 00:04:05,760 --> 00:04:07,060 realment està passant. 81 00:04:07,060 --> 00:04:10,620 Així que anem bastant el programa de la força per clic a la X a la part superior dreta 82 00:04:10,620 --> 00:04:11,720 cantonada aquí. 83 00:04:11,720 --> 00:04:15,300 Ara anem a tornar en el codi font i retardar les coses una mica. 84 00:04:15,300 --> 00:04:19,240 >> En altres paraules, dins d'aquesta infinita llaç, i no només ens movem i 85 00:04:19,240 --> 00:04:22,850 mouen una i altra vegada, fins a la sacietat, anem a persistir per uns pocs milisegons 86 00:04:22,850 --> 00:04:24,910 abans de procedir a moure de nou. 87 00:04:24,910 --> 00:04:28,480 En particular, anirem a la part inferior del bucle infinit aquí i simplement 88 00:04:28,480 --> 00:04:32,820 fer una pausa per, per exemple, 10 mil · lisegons en cada iteració. 89 00:04:32,820 --> 00:04:36,690 Ara anem a tornar a compilar i tornar a executar rebot. 90 00:04:36,690 --> 00:04:40,190 I ara veiem una molt més raonable posada en pràctica, en el qual podem veure el 91 00:04:40,190 --> 00:04:43,310 veritable cercle rebotar al esquerra i el costat dret. 92 00:04:43,310 --> 00:04:45,395