Tip:
Highlight text to annotate it
X
>> DAVID MALAN: Să scrie un program care implică o fereastră și un cerc cu
cercul rigidă și înapoi de pe stânga și dreapta
margini de fereastra.
Pentru a face acest lucru, hai să folosim Stanford Biblioteca portabil, și să primul
includ gevents.h astfel încât să putem asculta pentru mișcările mouse-ului.
Să se numără apoi gobjects.h astfel încât putem declara lucruri, *** ar fi ovale sau
cercuri, într-adevăr.
Și apoi să includă gwindow.h astfel încât avem o fereastră de grafic pentru
totul.
>> Să declare principal în mod obișnuit.
Si lasa acum de declara și instantia sau pentru a crea acea fereastră, GWindow -
și vom numi fereastra variabilă -
devine newGWindow.
Și vom face în mod arbitrar o 320 de pixeli pe 240 pixeli.
>> Să următor instantia un cerc.
Dar pentru a instantia acest cerc, avem nevoie pentru a face un pic mai mult de lucru.
În special, să umple în acest cerc astfel că întreaga lucru este
negru și nu doar schiță acestora.
Goval -
vom numi cerc -
devine newGOval.
Vom pune acest oval de la 0, 110, și vom face ovale 20 de pixeli lățime de
20 pixeli mare - cu alte cuvinte, o diametru de 20 sau o rază de 10.
>> Să acum seta culoarea de care cerc pentru a fi citat, citatul, "negru." Să
acum setați-l fi umplut prin specificarea adevărat.
Și acum în cele din urmă, să adăugăm cercul de Fereastra după *** urmează, prin care
din urmă se adaugă la prima.
>> Hai acum a declara o dublă.
Vom numi viteză.
Și oarecum arbitrar, să zicem viteza din acest cerc va fi
2,0, cu alte cuvinte, 2 pixeli pentru fiecare unitate de timp.
Și acum să în mod deliberat induce o buclă infinită.
>> Deci, *** a face acest cerc sări înainte și înapoi?
Ei bine, să presupunem că în această buclă, care pentru fiecare unitate de timp, suntem
va muta cercul doar un pic biți bazat pe viteza sa de 2 pixeli
pe unitate de timp.
Dar continuu, vom trebui să verificați dacă cercul atinge
marginea dreaptă a ecranului sau stânga margine a ecranului, pentru că dacă este așa, ne-am
nevoie de ea pentru a sări, ca să spunem așa.
>> *** să pună în aplicare noțiune de viguros?
Ei bine, dacă vom merge la 2 pixeli la dreapta pe unitatea de timp, pentru a sări de pe
marginea din dreapta, pur și simplu ne putem inversa care să fie negative, 2 pixeli per unitate
de timp, anulând astfel viteza.
Deci, în fapt, este relativ rigidă simplu.
>> Să trecem mai întâi cercul de această mulți pixeli de-a lungul axei x, prin aceasta
multi pixeli de-a lungul axei y.
Cu alte cuvinte, nu vrem să-l deplasa de-a lungul axei y deloc.
Vrem doar să sări înapoi și mai departe la stânga și la dreapta.
>> Și să verifice acum în această buclă, dacă X-coordonata cercului plus
lățimea cercului este mai mare decât sau egală cu
lățime a ferestrei -
cu alte cuvinte, în cazul în locația cercului plus lățimea de cerc
în sine este acum pe marginea a ferestrei, ne-ar
mai bine inversa viteza noastră -
viteza devine viteza negativ, astfel flipping o pozitiv la un
negativă sau un negativ pentru un pozitiv.
Dar ce se întâmplă dacă cercul se mișcă de la la dreapta la stânga și, prin urmare, hit-uri
marginea din stânga?
Cu alte cuvinte, dacă x coordonata cercul este acum mai mică sau egală
la 0, să mergem mai departe și din nou invertit viteza noastră.
>> Deci, de ce n-am adăugat în lățimea de cerc acestei
timp, așa *** am făcut-o înainte?
Ei bine, ține cont de faptul că coordonatele a unui obiect sunt definite
prin colțul din stânga-sus, nu de mijloc.
Și astfel, atunci când cercul este trecerea de la la stânga la dreapta, avem nevoie pentru a verifica
dacă marginea din dreapta a cerc a trecut
marginea din dreapta a ferestrei.
Deci, pentru a afla ce este că, ne-am pentru a obține x coordonata a cercului
plus lățimea de cerc pentru a muta ne din stânga-sus
colț, în mod eficient, catre colțul din dreapta sus.
Când cercul se deplasează de la dreapta la stânga, între timp, nu avem nevoie să
deranjez cu astfel de plus, pentru că colțul din stânga sus a cercului este
deja valoarea vom obține de la get x.
>> Să acum muta mingea.
Să acum salva, compila, și a alerga acest programul, face saritura,. / saritura.
Și acolo avem un program.
>> Dar cercul se mișcă al naibii de repede, este aproape imposibil pentru a vedea ce-i
de fapt se întâmplă.
Deci, hai sa destul de programul cu forța de faceți clic pe X din dreapta sus
colț aici.
Să ne întoarcem acum în codul sursă și lucrurile încetini un pic.
>> Cu alte cuvinte, în acest infinit buclă, mai degrabă decât doar și mișcare și
muta și din nou, ad nauseum, să leneviți pentru doar câteva milisecunde
înainte de a începe să se miște din nou.
În special, să mergem la partea de jos din bucla infinita aici și pur și simplu
pauză pentru, să zicem, 10 de milisecunde la fiecare iterație.
Hai acum recompilați și re-a alerga saritura.
Și acum vom vedea o mult mai rezonabil punerea în aplicare, unde putem vedea
cerc viguros cu adevărat pe de stânga și marginea din dreapta.