1 00:00:00,000 --> 00:00:00,260 2 00:00:00,260 --> 00:00:03,010 >> DAVID Malan: Mari kita menulis sebuah program melibatkan jendela dan lingkaran dengan 3 00:00:03,010 --> 00:00:05,820 lingkaran memantul bolak-balik off kiri dan kanan 4 00:00:05,820 --> 00:00:07,120 tepi jendela itu. 5 00:00:07,120 --> 00:00:09,960 Untuk melakukannya, mari kita gunakan The Stanford Perpustakaan Portable, dan mari kita pertama 6 00:00:09,960 --> 00:00:14,830 termasuk gevents.h sehingga kita dapat mendengarkan gerakan mouse. 7 00:00:14,830 --> 00:00:20,970 Mari kita kemudian termasuk gobjects.h sehingga kita dapat mendeklarasikan hal-hal seperti oval atau 8 00:00:20,970 --> 00:00:22,110 lingkaran, benar-benar. 9 00:00:22,110 --> 00:00:26,090 Dan kemudian mari kita termasuk gwindow.h sehingga kita memiliki jendela grafis untuk 10 00:00:26,090 --> 00:00:27,020 semuanya. 11 00:00:27,020 --> 00:00:30,390 >> Mari kita mendeklarasikan utama dengan cara yang biasa. 12 00:00:30,390 --> 00:00:35,095 Dan mari kita menyatakan dan instantiate atau membuat jendela, GWindow - 13 00:00:35,095 --> 00:00:37,090 dan kami akan memanggil window variabel - 14 00:00:37,090 --> 00:00:39,790 mendapat newGWindow. 15 00:00:39,790 --> 00:00:44,450 Dan kita akan sewenang-wenang membuat 320 piksel oleh 240 piksel. 16 00:00:44,450 --> 00:00:46,190 >> Mari kita berikutnya instantiate lingkaran. 17 00:00:46,190 --> 00:00:48,740 Tetapi untuk instantiate lingkaran ini, kita perlu melakukan sedikit lebih banyak pekerjaan. 18 00:00:48,740 --> 00:00:51,340 Secara khusus, mari kita mengisi lingkaran ini sehingga seluruh hal yang 19 00:00:51,340 --> 00:00:53,910 hitam dan bukan hanya garis besar daripadanya. 20 00:00:53,910 --> 00:00:54,850 GOval - 21 00:00:54,850 --> 00:00:56,450 kita akan menyebutnya lingkaran - 22 00:00:56,450 --> 00:00:58,310 mendapat newGOval. 23 00:00:58,310 --> 00:01:04,810 Kami akan menempatkan oval ini pada 0, 110, dan kita akan membuat oval 20 pixel dan lebar 24 00:01:04,810 --> 00:01:09,070 20 piksel tinggi - dengan kata lain, diameter 20 atau radius 10. 25 00:01:09,070 --> 00:01:14,120 >> Sekarang mari kita mengatur warna lingkaran yang menjadi kutipan, tanda kutip, "hitam." Mari 26 00:01:14,120 --> 00:01:19,030 sekarang mengaturnya diisi dengan menentukan benar. 27 00:01:19,030 --> 00:01:24,100 Dan sekarang yang terakhir, mari kita tambahkan lingkaran untuk jendela sebagai berikut, dimana 28 00:01:24,100 --> 00:01:26,390 yang terakhir ditambahkan ke mantan. 29 00:01:26,390 --> 00:01:27,910 >> Mari kita sekarang menyatakan ganda. 30 00:01:27,910 --> 00:01:29,200 Kita akan menyebutnya kecepatan. 31 00:01:29,200 --> 00:01:32,380 Dan agak sewenang-wenang, katakanlah kecepatan lingkaran ini akan 32 00:01:32,380 --> 00:01:36,290 2.0, dengan kata lain, 2 piksel untuk setiap unit waktu. 33 00:01:36,290 --> 00:01:39,380 Dan sekarang mari kita sengaja menginduksi infinite loop. 34 00:01:39,380 --> 00:01:42,060 >> Jadi bagaimana membuat lingkaran ini bangkit kembali dan sebagainya? 35 00:01:42,060 --> 00:01:45,190 Nah mari kita asumsikan dalam lingkaran ini yang untuk setiap unit waktu, kami 36 00:01:45,190 --> 00:01:48,890 akan memindahkan lingkaran hanya sedikit bit berdasarkan kecepatannya dari 2 piksel 37 00:01:48,890 --> 00:01:50,070 per unit waktu. 38 00:01:50,070 --> 00:01:52,900 Tapi terus-menerus, kita akan harus memeriksa apakah lingkaran menyentuh 39 00:01:52,900 --> 00:01:56,480 tepi kanan layar atau kiri tepi layar, karena jika demikian, kita 40 00:01:56,480 --> 00:01:58,530 membutuhkannya untuk bangkit, sehingga untuk berbicara. 41 00:01:58,530 --> 00:02:00,380 >> Bagaimana menerapkan gagasan memantul? 42 00:02:00,380 --> 00:02:04,400 Nah jika kita akan pada 2 pixel ke tepat per unit waktu, terpental 43 00:02:04,400 --> 00:02:08,259 tepi kanan, kita hanya bisa membalikkan bahwa untuk menjadi negatif 2 pixel per unit 44 00:02:08,259 --> 00:02:10,400 waktu, sehingga meniadakan kecepatan. 45 00:02:10,400 --> 00:02:13,160 Jadi sebenarnya, memantul relatif mudah. 46 00:02:13,160 --> 00:02:19,260 >> Mari kita pertama memindahkan lingkaran dengan ini banyak piksel sepanjang sumbu x, dengan ini 47 00:02:19,260 --> 00:02:21,040 banyak piksel sepanjang sumbu y. 48 00:02:21,040 --> 00:02:23,600 Dengan kata lain, kita tidak ingin bergerak sepanjang sumbu y sama sekali. 49 00:02:23,600 --> 00:02:25,950 Kami hanya ingin untuk bangkit kembali dan sebagainya kiri dan kanan. 50 00:02:25,950 --> 00:02:31,910 >> Dan sekarang mari kita periksa dalam loop ini jika x-koordinat lingkaran ditambah 51 00:02:31,910 --> 00:02:36,515 lebar lingkaran lebih besar dari atau sama dengan 52 00:02:36,515 --> 00:02:38,520 lebar jendela - 53 00:02:38,520 --> 00:02:42,180 dengan kata lain, jika lokasi lingkaran ditambah lebar lingkaran 54 00:02:42,180 --> 00:02:44,840 sendiri kini melewati tepi jendela, kita lebih 55 00:02:44,840 --> 00:02:46,090 lebih baik membalikkan kecepatan kami - 56 00:02:46,090 --> 00:02:49,080 57 00:02:49,080 --> 00:02:53,680 kecepatan mendapatkan kecepatan negatif, sehingga membalik positif untuk 58 00:02:53,680 --> 00:02:56,090 negatif atau negatif ke positif. 59 00:02:56,090 --> 00:02:59,740 Tapi bagaimana jika lingkaran bergerak dari kanan ke kiri sehingga hits 60 00:02:59,740 --> 00:03:00,670 tepi kiri? 61 00:03:00,670 --> 00:03:06,490 Dengan kata lain, jika x-koordinat lingkaran sekarang kurang dari atau sama 62 00:03:06,490 --> 00:03:12,530 ke 0, mari kita pergi ke depan dan lagi membalikkan kecepatan kami. 63 00:03:12,530 --> 00:03:14,980 >> Jadi mengapa saya belum ditambahkan dalam lebar lingkaran ini 64 00:03:14,980 --> 00:03:16,410 waktu, seperti yang saya lakukan sebelumnya? 65 00:03:16,410 --> 00:03:19,050 Nah, perlu diingat bahwa koordinat suatu objek didefinisikan 66 00:03:19,050 --> 00:03:22,200 oleh sudut kiri puncaknya, bukan oleh tengahnya. 67 00:03:22,200 --> 00:03:25,810 Dan jadi ketika lingkaran bergerak dari kiri ke kanan, kita perlu memeriksa 68 00:03:25,810 --> 00:03:28,910 apakah tepi kanan lingkaran telah lulus 69 00:03:28,910 --> 00:03:30,200 tepi kanan jendela. 70 00:03:30,200 --> 00:03:34,100 Jadi untuk mencari tahu apa itu, kita harus untuk mendapatkan x-koordinat lingkaran 71 00:03:34,100 --> 00:03:38,080 ditambah lebar lingkaran bergerak diri dari atas kiri 72 00:03:38,080 --> 00:03:40,650 sudut, efektif, dengan pojok kanan. 73 00:03:40,650 --> 00:03:43,700 Ketika lingkaran bergerak dari kanan ke kiri, sementara itu, kita tidak perlu 74 00:03:43,700 --> 00:03:47,550 repot-repot dengan penambahan tersebut, karena sudut kiri atas lingkaran adalah 75 00:03:47,550 --> 00:03:50,700 sudah nilai kita akan dapatkan dari get x. 76 00:03:50,700 --> 00:03:54,140 >> Mari kita sekarang pindah bola. 77 00:03:54,140 --> 00:04:00,900 Sekarang mari kita simpan, kompilasi, dan menjalankan ini Program, membuat bounce,. / bouncing. 78 00:04:00,900 --> 00:04:02,230 Dan di sana kita memiliki program. 79 00:04:02,230 --> 00:04:05,760 >> Tapi lingkaran bergerak begitu darn cepat, itu hampir mustahil untuk melihat apa yang 80 00:04:05,760 --> 00:04:07,060 sebenarnya terjadi. 81 00:04:07,060 --> 00:04:10,620 Jadi mari kita cukup program secara paksa oleh mengklik X di kanan atas 82 00:04:10,620 --> 00:04:11,720 sudut sini. 83 00:04:11,720 --> 00:04:15,300 Sekarang mari kita kembali ke kode sumber dan memperlambat segalanya sedikit. 84 00:04:15,300 --> 00:04:19,240 >> Dengan kata lain, dalam hal ini tak terbatas lingkaran, bukan hanya dan bergerak dan 85 00:04:19,240 --> 00:04:22,850 bergerak dan lagi, nauseum iklan, mari kita berlama-lama untuk hanya beberapa milidetik 86 00:04:22,850 --> 00:04:24,910 sebelum melanjutkan bergerak lagi. 87 00:04:24,910 --> 00:04:28,480 Secara khusus, mari kita pergi ke bawah loop tak terbatas di sini dan hanya 88 00:04:28,480 --> 00:04:32,820 jeda untuk, katakanlah, 10 milidetik pada setiap iterasi. 89 00:04:32,820 --> 00:04:36,690 Sekarang mari kita ulang dan re-run bouncing. 90 00:04:36,690 --> 00:04:40,190 Dan sekarang kita melihat jauh lebih masuk akal implementasi, di mana kita bisa melihat 91 00:04:40,190 --> 00:04:43,310 lingkaran yang benar-benar memantul pada kiri dan tepi kanan. 92 00:04:43,310 --> 00:04:45,395