Tip:
Highlight text to annotate it
X
>> DAVID Malan: Laten we een programma schrijven met een raam en een cirkel met
de cirkel stuitert heen en weer van de linker en rechter
randen van dat venster.
Om dit te doen, laten we gebruik The Stanford Draagbare Bibliotheek, en laten we eerst
omvatten gevents.h zodat we kunnen luister naar muisbewegingen.
Laten we dan onder gobjects.h zodat kunnen we dingen als ovalen verklaren of
cirkels, echt.
En dan laten we onder andere gwindow.h zodat We hebben een grafisch venster voor
alles.
>> Laten we verklaren belangrijkste op de gebruikelijke manier.
En laten we nu verklaren en instantiëren of maak dat venster, GWindow -
en we zullen de variabele venster noemen -
krijgt newGWindow.
En we zullen willekeurig maken 320 pixels bij 240 pixels.
>> Laten we volgende instantiëren een cirkel.
Maar om deze cirkel instantiëren, we moeten een beetje meer werk te doen.
In het bijzonder, laten we in deze cirkel te vullen zodat het gehele ding
zwart en niet alleen de schetsen daarvan.
Goval -
we noemen het cirkel -
krijgt newGOval.
We zullen dit ovaal zetten op 0, 110, en we zullen breed maken van de ovale 20 pixels door
20 pixels hoog - met andere woorden, een diameter van 20 of een straal van 10.
>> Laten we nu de kleur van die cirkel citaat, unquote, worden "zwart." Laten we
nu ingesteld worden gevuld onder vermelding van waar.
En nu tot slot, laten we voegen de cirkel te Venster als volgt, waarbij de
deze wordt toegevoegd aan de eerste.
>> Laten we nu verklaren een dubbele.
We noemen het de snelheid.
En enigszins arbitrair, laten we zeggen de snelheid van deze cirkel wordt
2.0, dat wil zeggen, 2 pixels voor elke eenheid van tijd.
En laten we nu bewust induceren een oneindige lus.
>> Dus hoe je deze cirkel maken stuiteren heen en weer?
Nou laten we aannemen dat binnen deze lus die voor elke eenheid van tijd, we zijn
gaat de cirkel een beetje bewegen bits gebaseerd op de snelheid van 2 pixels
per tijdseenheid.
Maar voortdurend, we gaan moeten controleren of de cirkel raakt de
rechterrand van het scherm of de linker rand van het scherm, omdat zo ja, we
nodig hebben om te stuiteren, zo te zeggen.
>> Hoe de uitvoering van de notie van stuiteren?
Nou als we gaan op 2 pixels aan de recht per tijdseenheid, stuiteren
de rechterrand, kunnen we gewoon omkeren dat is dat het negatief 2 pixels per eenheid
van de tijd, waardoor ontkennen de snelheid.
Dus in feite, stuiteren relatief eenvoudig.
>> Laten we eerst gaan de cirkel door deze vele pixels langs de x-as van deze
veel pixels langs de y-as.
Met andere woorden, we willen niet dat het bewegen langs de y-as helemaal.
We willen alleen het weer aan te trekken en weer links en rechts.
>> En laten we nu controleren binnen deze lus als de x-coördinaat van de cirkel plus
de breedte van de cirkel groter dan of gelijk aan de
breedte van het venster -
met andere woorden, als de locatie van het cirkel plus de breedte van de cirkel
zelf is nu voorbij de rand van het raam, zouden we
beter achteruit onze snelheid -
snelheid krijgt negatieve snelheid, waardoor opgooien van een positieve naar een
negatief of een negatieve naar een positieve.
Maar wat als de cirkel zich van rechts naar links en het raakt dus
de linkerrand?
Met andere woorden, als de x-coördinaat van de cirkel is nu minder dan of gelijk
naar 0, laten we verder gaan en weer omkeren onze snelheid.
>> Dus waarom heb ik niet toegevoegd in de breedte van de cirkel deze
tijd, zoals ik deed voordat?
Nou ja, in gedachten houden dat de coördinaten van een object gedefinieerd
bij de bovenste linker hoek, niet door het midden.
En dus als de cirkel zich van van links naar rechts, we moeten controleren
of de rechterrand van het cirkel is geslaagd voor de
rechterkant van het venster.
Dus om erachter te komen wat dat is, hebben we de x-coördinaat van de cirkel te krijgen
plus de breedte van de cirkel verplaatsen ons van de linker
hoek, effectief, het top rechterbovenhoek.
Wanneer de cirkel beweegt van rechts naar links, ondertussen, hoeven we niet te
moeite met deze toevoeging, omdat de linkerbovenhoek van de cirkel is
al de waarde we zullen krijgen van get x.
>> Laten we gaan nu de bal.
Laten we nu nog redden, compileren en uitvoeren van deze programma, zorg bounce,. / bounce.
En daar er een programma.
>> Maar de cirkel beweegt zo verdraaid snel, het is bijna onmogelijk om te zien wat
eigenlijk aan de hand.
Dus laten we heel het programma met geweld door klikken op de X in de rechterbovenhoek
hoek hier.
Laten we nu terug in de broncode en langzaam de dingen een beetje naar beneden.
>> Met andere woorden, in deze oneindige lus, in plaats van alleen en bewegen en
bewegen en weer, tot vervelens toe, laten we hangen voor slechts een paar milliseconden
alvorens weer in beweging.
In het bijzonder, laten we naar de bodem van de oneindige lus hier en eenvoudig
pauzeren voor, zeg, 10 milliseconden op elke iteratie.
Laten we nu opnieuw compileren en re-run bounce.
En nu zien we een veel redelijker implementatie, waar we kunnen zien de
cirkel echt stuiteren op de links en rechts rand.