Tip:
Highlight text to annotate it
X
>> DAVID MALAN: Lad os skrive et program involverer et vindue og en cirkel med
cirklen hoppe frem og tilbage fra venstre og højre
kanter af vinduet.
For at gøre det, så lad os bruge The Stanford Bærbare Bibliotek, og lad os først
omfatte gevents.h så vi kan lyt efter musebevægelser.
Lad os da indeholde gobjects.h så vi kan erklære ting som ovaler eller
cirkler, virkelig.
Og så lad os inkludere gwindow.h så vi har et grafisk vindue for
alt.
>> Lad os erklære vigtigste på den sædvanlige måde.
Og lad os nu erklære og instantiere eller oprette det vindue, GWindow -
og vi vil kalde den variable vindue -
får newGWindow.
Og vi vil vilkårligt gøre det 320 pixels med 240 pixels.
>> Lad os næste instantiere en cirkel.
Men at instantiere denne cirkel, vi nødt til at gøre lidt mere arbejde.
I særdeleshed, lad os udfylde denne cirkel således at hele ting er
sort og ikke kun den skitsere herom.
GOval -
vi vil kalde det cirkel -
får newGOval.
Vi vil sætte dette oval ved 0, 110, og vi vil at de ovale 20 pixel bred
20 pixels høj - med andre ord, en diameter på 20 eller en radius på 10.
>> Lad os nu sætte farven af denne cirkel at være citat, citat ***, "sort". Lad os
nu sat det blive fyldt ved at angive sandt.
Og nu endelig, lad os tilføje cirklen til vinduet som følger, hvorved
Sidstnævnte tilsættes til førstnævnte.
>> Lad os nu erklære en dobbelt.
Vi kalder det hastighed.
Og noget vilkårligt, lad os sige det hastigheden af denne cirkel vil blive
2.0, med andre ord, 2 pixels for hver tidsenhed.
Og lad os nu bevidst inducere en uendelig løkke.
>> Så hvordan man kan gøre denne cirkel hoppe frem og tilbage?
Jamen lad os antage inden for denne løkke, for hver tidsenhed, er vi
kommer til at bevæge cirklen lidt bit baseret på dens hastighed på 2 pixels
tidsenhed.
Men hele tiden, vi nødt til at kontrollere, om cirklen rører
højre kant af skærmen eller venstre kanten af skærmen, for hvis så, vi
har brug for det til at hoppe, så at sige.
>> Hvordan til at gennemføre den begrebet hoppe?
Tja, hvis vi går på 2 pixels til ret per tidsenhed, at prelle
den højre kant, kan vi simpelthen vende at for at være negativ 2 pixels per enhed
tid, hvilket ødelægger hastigheden.
Så i virkeligheden, hoppende er relativt ligetil.
>> Lad os først flytte cirklen ved dette mange pixel langs x-aksen, af denne
mange pixels langs y-aksen.
Med andre ord, vi ikke ønsker, at det bevæger sig langs y-aksen på alle.
Vi ønsker kun det at hoppe tilbage og tilbage til venstre og højre.
>> Og lad os nu tjekke inden for denne løkke, hvis x-koordinaten af cirklen plus
bredden af cirklen er større end eller lig med
bredden af vinduet -
med andre ord, hvis cirklen placering plus bredden af cirklen
i sig selv er nu forbi kanten af vinduet, ville vi
bedre vende vores hastighed -
hastighed får negativ hastighed, hvorved spejlvende en positiv til en
negativ eller en negativ til en positiv.
Men hvad hvis cirklen bevæger sig fra højre til venstre og derfor rammer
venstre kant?
Med andre ord, hvis x-koordinat cirklen er nu mindre end eller lig
til 0, så lad os gå videre og igen invertere vores hastighed.
>> Så hvorfor har jeg ikke tilsættes i bredde af cirklen denne
tid, som jeg gjorde før?
Nå, huske på, at koordinaterne af et objekt er defineret
af dets øverste venstre hjørne, ikke ved sin midten.
Og så når cirklen flytter fra venstre til højre, er vi nødt til at tjekke
hvorvidt den højre kant cirkel har bestået
højre kant af vinduet.
Så for at regne ud, hvad det er, vi har at få x-koordinaten af cirklen
plus bredden af cirklen til at flytte os fra øverste venstre
hjørne, effektivt til øverste højre hjørne.
Når kredsen bevæger sig fra højre til venstre, i mellemtiden, vi behøver ikke at
gider med sådan kommer, fordi den øverste venstre hjørne af cirklen er
allerede den værdi, vi får får fra get x.
>> Lad os nu flytte bolden.
Lad os nu gemme, kompilere og køre dette program, skal bounce. / bounce.
Og der har vi et program.
>> Men cirklen bevæger sig så pokkers hurtigt, det er næsten umuligt at se, hvad der er
faktisk foregår.
Så lad os helt program med magt ved at klikke på X i øverste højre
hjørne her.
Lad os nu gå tilbage til kildekoden og langsom ting ned en lille smule.
>> Med andre ord, i denne uendelige loop, snarere end blot og flytte og
flytte og igen, ad nauseum, lad os dvæle for blot et par millisekunder
før man går videre til at flytte igen.
I særdeleshed, lad os gå til bunden af den uendelig løkke her og simpelthen
pause, siger, 10 millisekunder på hver iteration.
Lad os nu genkompilere og re-run bounce.
Og nu ser vi en meget mere rimelig implementering, hvor vi kan se det
cirkel virkelig hoppe på den venstre og højre kant.