Tip:
Highlight text to annotate it
X
>> DAVID MALAN: Låt oss skriva ett program involverar ett fönster och en cirkel med
cirkeln studsar fram och tillbaka av de vänstra och högra
kanterna av det fönstret.
För att göra detta, låt oss använda The Stanford Bärbar Bibliotek och låt oss först
omfatta gevents.h så att vi kan lyssna efter musrörelser.
Låt oss då inkludera gobjects.h så att Vi kan förklara saker som ovaler eller
cirklar, verkligen.
Och sedan ska vi inkludera gwindow.h så att Vi har ett grafiskt fönster för
allt.
>> Låt oss förklara huvud på vanligt sätt.
Och låt oss nu deklarera och instansiera eller skapa det fönstret, GWindow -
och vi kallar den rörliga fönstret -
blir newGWindow.
Och vi kommer godtyckligt göra det 320 pixlar med 240 pixlar.
>> Låt oss nästa initiera en cirkel.
Men för att exemplifiera denna cirkel, vi behöver göra lite mer arbete.
Framför allt, låt oss fylla i denna cirkel så att hela saken är
svart och inte bara den beskriva detta.
GOval -
vi kallar den cirkel -
blir newGOval.
Vi kommer att sätta denna oval vid 0, 110, och vi kommer gör de ovala 20 pixlar bred och
20 pixlar hög - med andra ord, en diameter på 20 eller en radie av 10.
>> Låt oss nu ställa in färgen på denna cirkel vara citat, unquote, "svart." Låt oss
nu ställa in den att fyllas genom att ange sant.
Och nu slutligen, låt oss lägga cirkeln till fönstret som följer, varvid
senare tillsätts till den förra.
>> Låt oss nu förklara en dubbel.
Vi kallar den hastigheten.
Och något godtyckligt, låt oss säga det hastigheten för denna krets blir
2.0, med andra ord, 2 pixlar för varje tidsenhet.
Och nu ska vi medvetet framkalla en oändlig loop.
>> Så hur man gör denna cirkel studsa fram och tillbaka?
Nåväl låt oss anta inom denna slinga som för varje tidsenhet, vi är
kommer att flytta cirkeln bara lite bitars baserat på dess hastighet av 2 pixlar
per tidsenhet.
Men hela tiden, vi kommer att behöva kontrollera om den cirkel som vidrör
högra kanten av skärmen eller vänster kanten av skärmen, eftersom i så fall, vi
behöver det för att studsa, så att säga.
>> Så för att genomföra begreppet studsande?
Tja, om vi ska på 2 pixlar till rätt per tidsenhet, för att studsa
den högra kanten, kan vi helt enkelt vända att vara negativ 2 pixlar per enhet
av tiden, vilket motverkar hastigheten.
Så i själva verket är studsande relativt okomplicerad.
>> Låt oss först flytta cirkeln genom detta många bildpunkter längs x-axeln, genom detta
många bildpunkter längs y-axeln.
Med andra ord, vill vi inte att det röra sig utmed y-axeln på alla.
Vi vill bara att det att studsa tillbaka och tillbaka till vänster och höger.
>> Och låt oss nu kolla i denna slinga om x-koordinat för cirkel plus
bredden på cirkeln är större än eller lika med det
bredden på fönstret -
med andra ord, om cirkelns läge plus bredden av cirkeln
själv är nu förbi kanten i fönstret, skulle vi
bättre omvänd vår velocity -
hastighet blir negativ hastighet, och därigenom vända en positiv till en
negativt eller negativt till positivt.
Men vad händer om cirkeln rör sig från höger till vänster och det därför träffar
den vänstra kanten?
Med andra ord, om x-koordinat cirkeln är nu mindre än eller lika
till 0, låt oss gå vidare och igen invertera vår hastighet.
>> Så varför har jag inte lagt i bredd av cirkeln här
tid, som jag gjorde tidigare?
Tja, tänk på att koordinaterna av ett objekt är definierade
av dess övre vänstra hörnet, inte på mitten.
Och så när cirkeln rör sig från vänster till höger, måste vi kontrollera
huruvida den högra kanten av cirkel har passerat
högra kanten av fönstret.
Så att räkna ut vad det är, vi har att få x-koordinat för cirkel
plus bredden av cirkeln för att flytta oss från det övre vänstra
hörn, effektivt till övre högra hörnet.
När kretsen är i rörelse från höger till vänster, under tiden, vi behöver inte
bry sig om ett sådant tillägg, eftersom övre vänstra hörnet av cirkeln är
redan det värde vi ska får från get x.
>> Låt oss nu flytta bollen.
Låt oss nu spara, kompilera och köra program, gör studsa,. / studs.
Och det har vi ett program.
>> Men kretsen är i rörelse så allra snabb, det är nästan omöjligt att se vad som är
faktiskt pågår.
Så låt oss helt program med våld av klicka på X i det övre högra
hörnet här.
Låt oss nu gå tillbaka till källkoden och sakta ner saker lite.
>> Med andra ord, i denna oändliga slinga, snarare än bara och flytta och
flytta och åter, till leda, låt oss dröja kvar för bara några millisekunder
innan du fortsätter att röra sig igen.
Framför allt, låt oss gå till botten av oändlig loop här och helt enkelt
pausa för, säg, 10 millisekunder på varje iteration.
Låt oss nu kompilera och repris studs.
Och nu ser vi en mycket mer rimlig genomförande, där vi kan se
cirkel verkligen studsar på vänster och höger kant.