Tip:
Highlight text to annotate it
X
>> DAVID MALAN: Scriviamo un programma coinvolge una finestra e un cerchio con
il cerchio rimbalza avanti e indietro off sinistra e destra
bordi di quella finestra.
Per farlo, usiamo The Stanford Biblioteca portatile, e facciamo prima
includere gevents.h modo che possiamo ascoltare i movimenti del mouse.
Facciamo quindi includere gobjects.h in modo che possiamo dichiarare cose come ovali o
cerchi, davvero.
E poi cerchiamo di includere gwindow.h in modo che abbiamo una finestra grafica per
tutto.
>> Dichiariamo principale nel solito modo.
E andiamo ora dichiarare e creare un'istanza o creare quella finestra, GWindow -
e chiameremo la finestra variabile -
ottiene newGWindow.
E faremo arbitrariamente facciamo 320 pixel per 240 pixel.
>> Facciamo prossimo un'istanza di un cerchio.
Ma per un'istanza di questo cerchio, abbiamo bisogno di fare un po 'più di lavoro.
In particolare, cerchiamo di riempire in questo cerchio in modo che l'intera cosa è
nero e non solo la delineare stessa.
Goval -
che chiameremo cerchio -
ottiene newGOval.
Metteremo questo ovale di 0, 110, e ti rendere le ovali 20 pixel di larghezza per
20 pixel di altezza - in altre parole, un diametro di 20 o un raggio di 10.
>> Passiamo ora impostare il colore di quel cerchio essere citazione, unquote, "bianco". Diamo
ora impostarlo essere riempito specificando vero.
Ed ora, infine, aggiungiamo il cerchio per la finestra come segue, per cui il
Quest'ultimo è aggiunto al primo.
>> Vediamo ora dichiarare una doppia.
Ti chiamiamo velocità.
E un po 'arbitrariamente, diciamo che il velocità di questo cerchio sarà
2.0, in altre parole, 2 pixel per ogni unità di tempo.
E ora diamo deliberatamente indurre un ciclo infinito.
>> Così come fare questo cerchio rimbalzare avanti e indietro?
Beh, supponiamo che all'interno di questo ciclo che per ogni unità di tempo, siamo
andando a spostare il cerchio solo un po ' bit sulla base della sua velocità di 2 pixel
per unità di tempo.
Ma continuamente, stiamo andando ad avere per controllare se il cerchio sta toccando il
bordo destro dello schermo o sinistra bordo dello schermo, perché in tal caso, abbiamo
bisogno di riprendersi, per così dire.
>> Come implementare l' nozione di rimbalzare?
Beh, se stiamo andando a 2 pixel a destra per unità di tempo, a rimbalzare
il bordo destro, si può semplicemente invertire che, per essere negative 2 pixel per unità
di tempo, negando in tal modo la velocità.
Quindi, in realtà, rimbalzo è relativamente semplice.
>> Andiamo prima spostare il cerchio di questo molti pixel lungo l'asse x, di questo
molti pixel lungo l'asse y.
In altre parole, noi non vogliamo che spostare lungo l'asse y affatto.
Noi vogliamo solo di riprendersi e indietro a destra ea sinistra.
>> E diamo ora un'occhiata all'interno di questo ciclo se la coordinata x del cerchio più
la larghezza del cerchio è maggiore o uguale al
larghezza della finestra -
in altre parole, se la posizione del cerchio più la larghezza del cerchio
si è ora oltre il bordo della finestra, saremmo
meglio invertire la nostra velocità -
velocità ottiene velocità negativo, così lanciando una positiva a un
negativo o negativo a positivo.
Ma cosa succede se il cerchio si sta muovendo da da destra a sinistra e colpisce quindi
il bordo sinistro?
In altre parole, se l'ascissa del il cerchio è ora minore o uguale
a 0, andiamo avanti e di nuovo invertire la nostra velocità.
>> Allora perche 'non ho aggiunto nel larghezza del cerchio questa
tempo, come ho fatto prima?
Beh, tenete a mente che le coordinate di un oggetto sono definite
dal suo alto a sinistra, non dalla parte mediana.
E così quando il cerchio si sta muovendo da da sinistra a destra, abbiamo bisogno di controllare
se il bordo destro della cerchio ha superato la
bordo destro della finestra.
Quindi, per capire di cosa si tratta, abbiamo per ottenere la coordinata x del cerchio
più la larghezza del cerchio di muoversi noi stessi dalla sinistra in alto
angolo, in modo efficace, per la alto a destra.
Quando il cerchio si muove da destra verso di sinistra, nel frattempo, non abbiamo bisogno di
preoccuparsi di tale aggiunta, perché la nell'angolo superiore sinistro del cerchio è
già il valore faremo ottenere da ottenere x.
>> Vediamo ora passare la palla.
Vediamo ora Salvare, compilare ed eseguire questo programma, fare rimbalzo,. / rimbalzo.
E lì abbiamo un programma.
>> Ma il cerchio si muove così maledettamente in fretta, è quasi impossibile vedere cosa c'è
realmente accadendo.
Quindi cerchiamo di tutto il programma forzatamente da cliccando sulla X in alto a destra
angolo qui.
Vediamo ora torniamo nel codice sorgente e tutte le cose rallentare un po '.
>> In altre parole, all'interno di questo infinito loop, piuttosto che solo e movimento e
muovono e ancora, fino alla nausea, cerchiamo di soffermarsi solo per pochi millisecondi
prima di procedere a muoversi.
In particolare, andiamo a fondo del ciclo infinito qui e semplicemente
pausa per, diciamo, 10 millisecondi ad ogni iterazione.
Vediamo ora ricompilare e re-run rimbalzo.
E ora vediamo un ragionevole molto più attuazione, dove possiamo vedere il
cerchio veramente rimbalzare sul sinistro e destro.