Tip:
Highlight text to annotate it
X
>> DAVID MALAN: La oss skrive et program som omfatter et vindu og en sirkel med
sirkelen spretter frem og tilbake av venstre og høyre
kantene av vinduet.
For å gjøre dette, la oss bruke The Stanford Portable Library, og la oss først
inkludere gevents.h slik at vi kan lytte for musebevegelser.
La oss da inkludere gobjects.h slik at vi kan erklære ting som ovaler eller
sirkler, egentlig.
Og så la oss inkludere gwindow.h slik at vi har et grafisk vindu for
alt.
>> La oss erklære hoved på vanlig måte.
Og la oss nå erklærer og instantiate eller lage det vinduet, GWindow -
og vi ringer variabelvinduet -
får newGWindow.
Og vi vil vilkårlig gjøre det 320 x 240 piksler.
>> La oss neste instantiate en sirkel.
Men på å bruke denne sirkelen, vi trenger å gjøre litt mer arbeid.
Spesielt la oss fylle ut denne sirkelen slik at hele greia er
sort og ikke bare skissere disse.
Goval -
vi kaller det sirkel -
får newGOval.
Vi vil sette dette oval på 0, 110, og vi vil gjøre de ovale 20 piksler bred
20 piksler høyt - med andre ord, en diameter på 20 eller en omkrets på 10.
>> La oss nå sette farge av den sirkelen å være sitat, unquote, "svart". La oss
nå satt det fylles ved å spesifisere sant.
Og nå til slutt, la oss legge sirkelen til vinduet som følger, hvorved
Sistnevnte tilsettes til førstnevnte.
>> La oss nå erklære en dobbel.
Vi kaller det hastighet.
Og noe vilkårlig, la oss si den Hastigheten på denne sirkelen vil være
2,0, med andre ord, to piksler for hver tidsenhet.
Og nå la oss bevisst indusere en uendelig løkke.
>> Så hvordan å gjøre denne sirkelen sprette frem og tilbake?
Vel la oss anta innenfor denne sløyfen som for hver tidsenhet, er vi
kommer til å flytte sirkelen bare litt bit basert på dens hastighet på 2 piksler
per tidsenhet.
Men stadig er vi nødt til å sjekke om sirkelen berører
høyre kant av skjermen eller venstre kanten av skjermen, fordi i så fall, vi
trenger det til å sprette, så å si.
>> Hvordan implementere oppfatningen av spretter?
Vel, hvis vi skal på to piksler til rett per tidsenhet, å sprette av
høyre kant, kan vi rett og slett snu at for å være negative to piksler per enhet
tid, hvilket opphever hastigheten.
Så faktisk er hoppende relativt ukomplisert.
>> La oss først flytte sirkelen av dette mange piksler langs x-aksen, med dette
mange piksler langs y-aksen.
Med andre ord, ønsker vi ikke at det å bevege seg langs y-aksen i det hele tatt.
Vi ønsker bare det å sprette tilbake og tilbake til venstre og høyre.
>> Og la oss nå sjekke innenfor denne sløyfen hvis x-koordinat av sirkelen pluss
bredden av sirkelen er større enn eller lik
bredden på vinduet -
med andre ord, hvis sirkelen beliggenhet pluss bredden av sirkelen
selv er nå forbi kanten av vinduet, ville vi
bedre reversere vår hastighet -
hastighet blir negativ hastighet, og dermed bla en positiv til en
negativ eller en negativ til en positiv.
Men hva om sirkelen beveger seg fra høyre til venstre, og det derfor treffer
venstre kant?
Med andre ord, hvis x-koordinaten til sirkelen er nå mindre enn eller lik
til 0, la oss gå videre og igjen invertere vår hastighet.
>> Så hvorfor har jeg ikke lagt i Bredden av sirkelen dette
tid, som jeg gjorde før?
Vel, husk at koordinatene av et objekt defineres
ved sin øverste venstre hjørne, ikke av den på midten.
Og så når sirkelen beveger seg fra venstre til høyre, må vi sjekke
hvorvidt den høyre kant av sirkel har bestått
høyre kant av vinduet.
Så for å finne ut hva det er, vi har å få x-koordinat av sirkelen
pluss bredden av sirkelen til å bevege oss fra øverste venstre
hjørne, effektivt, til Øverst i høyre hjørne.
Når sirkelen beveger seg fra høyre til venstre, i mellomtiden, trenger vi ikke å
bry seg med en slik tillegg, fordi øverste venstre hjørne av sirkelen er
allerede verdien vi vil får fra get x.
>> La oss nå flytte ballen.
La oss nå lagre, kompilere og kjøre denne program, gjør sprett,. / sprett.
Og det har vi et program.
>> Men sirkelen beveger seg så darn fort, det er nesten umulig å se hva som er
faktisk skjer.
Så la oss ganske programmet med makt av klikke på X i øvre høyre
hjørne her.
La oss nå gå tilbake til kildekoden og langsom ting ned litt.
>> Med andre ord, i løpet av denne uendelige loop, snarere enn bare og flytte og
flytte og igjen, ad nauseum, la oss dvele for bare noen få millisekunder
før du fortsetter å bevege seg igjen.
Spesielt la oss gå til bunns av den uendelige sløyfen her, og bare
pause for, sier 10 millisekunder på hver iterasjon.
La oss nå rekompilere og re-run sprett.
Og nå ser vi en mye mer fornuftig gjennomføring, der vi kan se
sirkel virkelig spretter på venstre og høyre kant.