>> DAVID Malan: Mari kita menulis sebuah program melibatkan jendela dan lingkaran dengan
lingkaran memantul bolak-balik off kiri dan kanan
tepi jendela itu.
Untuk melakukannya, mari kita gunakan The Stanford Perpustakaan Portable, dan mari kita pertama
termasuk gevents.h sehingga kita dapat mendengarkan gerakan mouse.
Mari kita kemudian termasuk gobjects.h sehingga kita dapat mendeklarasikan hal-hal seperti oval atau
lingkaran, benar-benar.
Dan kemudian mari kita termasuk gwindow.h sehingga kita memiliki jendela grafis untuk
semuanya.
>> Mari kita mendeklarasikan utama dengan cara yang biasa.
Dan mari kita menyatakan dan instantiate atau membuat jendela, GWindow -
dan kami akan memanggil window variabel -
mendapat newGWindow.
Dan kita akan sewenang-wenang membuat 320 piksel oleh 240 piksel.
>> Mari kita berikutnya instantiate lingkaran.
Tetapi untuk instantiate lingkaran ini, kita perlu melakukan sedikit lebih banyak pekerjaan.
Secara khusus, mari kita mengisi lingkaran ini sehingga seluruh hal yang
hitam dan bukan hanya garis besar daripadanya.
GOval -
kita akan menyebutnya lingkaran -
mendapat newGOval.
Kami akan menempatkan oval ini pada 0, 110, dan kita akan membuat oval 20 pixel dan lebar
20 piksel tinggi - dengan kata lain, diameter 20 atau radius 10.
>> Sekarang mari kita mengatur warna lingkaran yang menjadi kutipan, tanda kutip, "hitam." Mari
sekarang mengaturnya diisi dengan menentukan benar.
Dan sekarang yang terakhir, mari kita tambahkan lingkaran untuk jendela sebagai berikut, dimana
yang terakhir ditambahkan ke mantan.
>> Mari kita sekarang menyatakan ganda.
Kita akan menyebutnya kecepatan.
Dan agak sewenang-wenang, katakanlah kecepatan lingkaran ini akan
2.0, dengan kata lain, 2 piksel untuk setiap unit waktu.
Dan sekarang mari kita sengaja menginduksi infinite loop.
>> Jadi bagaimana membuat lingkaran ini bangkit kembali dan sebagainya?
Nah mari kita asumsikan dalam lingkaran ini yang untuk setiap unit waktu, kami
akan memindahkan lingkaran hanya sedikit bit berdasarkan kecepatannya dari 2 piksel
per unit waktu.
Tapi terus-menerus, kita akan harus memeriksa apakah lingkaran menyentuh
tepi kanan layar atau kiri tepi layar, karena jika demikian, kita
membutuhkannya untuk bangkit, sehingga untuk berbicara.
>> Bagaimana menerapkan gagasan memantul?
Nah jika kita akan pada 2 pixel ke tepat per unit waktu, terpental
tepi kanan, kita hanya bisa membalikkan bahwa untuk menjadi negatif 2 pixel per unit
waktu, sehingga meniadakan kecepatan.
Jadi sebenarnya, memantul relatif mudah.
>> Mari kita pertama memindahkan lingkaran dengan ini banyak piksel sepanjang sumbu x, dengan ini
banyak piksel sepanjang sumbu y.
Dengan kata lain, kita tidak ingin bergerak sepanjang sumbu y sama sekali.
Kami hanya ingin untuk bangkit kembali dan sebagainya kiri dan kanan.
>> Dan sekarang mari kita periksa dalam loop ini jika x-koordinat lingkaran ditambah
lebar lingkaran lebih besar dari atau sama dengan
lebar jendela -
dengan kata lain, jika lokasi lingkaran ditambah lebar lingkaran
sendiri kini melewati tepi jendela, kita lebih
lebih baik membalikkan kecepatan kami -
kecepatan mendapatkan kecepatan negatif, sehingga membalik positif untuk
negatif atau negatif ke positif.
Tapi bagaimana jika lingkaran bergerak dari kanan ke kiri sehingga hits
tepi kiri?
Dengan kata lain, jika x-koordinat lingkaran sekarang kurang dari atau sama
ke 0, mari kita pergi ke depan dan lagi membalikkan kecepatan kami.
>> Jadi mengapa saya belum ditambahkan dalam lebar lingkaran ini
waktu, seperti yang saya lakukan sebelumnya?
Nah, perlu diingat bahwa koordinat suatu objek didefinisikan
oleh sudut kiri puncaknya, bukan oleh tengahnya.
Dan jadi ketika lingkaran bergerak dari kiri ke kanan, kita perlu memeriksa
apakah tepi kanan lingkaran telah lulus
tepi kanan jendela.
Jadi untuk mencari tahu apa itu, kita harus untuk mendapatkan x-koordinat lingkaran
ditambah lebar lingkaran bergerak diri dari atas kiri
sudut, efektif, dengan pojok kanan.
Ketika lingkaran bergerak dari kanan ke kiri, sementara itu, kita tidak perlu
repot-repot dengan penambahan tersebut, karena sudut kiri atas lingkaran adalah
sudah nilai kita akan dapatkan dari get x.
>> Mari kita sekarang pindah bola.
Sekarang mari kita simpan, kompilasi, dan menjalankan ini Program, membuat bounce,. / bouncing.
Dan di sana kita memiliki program.
>> Tapi lingkaran bergerak begitu darn cepat, itu hampir mustahil untuk melihat apa yang
sebenarnya terjadi.
Jadi mari kita cukup program secara paksa oleh mengklik X di kanan atas
sudut sini.
Sekarang mari kita kembali ke kode sumber dan memperlambat segalanya sedikit.
>> Dengan kata lain, dalam hal ini tak terbatas lingkaran, bukan hanya dan bergerak dan
bergerak dan lagi, nauseum iklan, mari kita berlama-lama untuk hanya beberapa milidetik
sebelum melanjutkan bergerak lagi.
Secara khusus, mari kita pergi ke bawah loop tak terbatas di sini dan hanya
jeda untuk, katakanlah, 10 milidetik pada setiap iterasi.
Sekarang mari kita ulang dan re-run bouncing.
Dan sekarang kita melihat jauh lebih masuk akal implementasi, di mana kita bisa melihat
lingkaran yang benar-benar memantul pada kiri dan tepi kanan.