Tip:
Highlight text to annotate it
X
>> DAVID Malan: Да се напише програма включващ прозорец и кръг с
кръга подскачащи назад и напред на разстояние от ляво и от дясно
ръбове на прозореца.
За да направите това, нека използваме Станфордския Portable Library, и нека първо
включва gevents.h, така че ние можем да слушате за движения на мишката.
Нека тогава се включва gobjects.h така че можем да твърдим, неща като овали или
кръгове, наистина.
И тогава нека да включва gwindow.h така че имаме графичен прозорец за
всичко.
>> Да декларират основната по обичайния начин.
И нека сега да декларира и конкретни примери или да създадете този прозорец, GWindow -
и ние ще се обадя на променлива прозореца -
получава newGWindow.
И ние ще го направи произволно 320 пиксела на 240 пиксела.
>> Нека следващия примери кръг.
Но конкретни примери този кръг, ние трябва да направим малко повече работа.
По-специално, да попълните в този кръг така че цялото нещо е
черен, а не само на очертае него.
Говал -
ние ще го наричаме кръг -
получава newGOval.
Ние ще поставим този овал на 0, 110, и ние ще направи овални 20 пиксела широчина от
20 пиксела високи - с други думи, диаметър 20 или радиус на 10.
>> Нека сега да зададете цвят на този кръг да цитирам, цитата, "черно." Списък
сега го настроите да бъде попълнено чрез определяне вярно.
И сега, накрая, нека добавим кръга на прозореца, както следва, при което
Последното се прибавя към първия.
>> Нека сега да декларира двойно.
Ние ще го наричаме скорост.
И до известна степен произволно, нека кажем, че скорост на този кръг ще бъде
2.0, с други думи, два пиксела за всяка единица време.
А сега нека умишлено предизвикване на един безкраен цикъл.
>> Е, как да направите този кръг скача напред-назад?
Ами нека да приемем, че в рамките на този цикъл за всяка единица от време, ние сме
ще се премести кръга само малко малко въз основа на неговата скорост на два пиксела
за единица време.
Но постоянно, ние ще трябва да проверите дали кръгът се докосвате
десния край на екрана или отляво край на екрана, защото ако е така, ние
се нуждаят от нея, за да скача, така да говори.
>> Как да се прилагат за понятие за подскачащи?
Ами ако ние отиваме в две пиксели, които да на полето за единица време, за да скача на разстояние
в десния край, ние можем просто да се обърне че за да бъде отрицателни 2 пиксела на единица
от време, като по този начин отрича скоростта.
Така че в действителност, подскачащи е относително прям.
>> Нека първо да преместите кръга от това много пиксела по оста х, от този
много пиксела по оста у.
С други думи, ние не искаме това да се движи по оста у изобщо.
Ние само искаме да скача назад и напред наляво и надясно.
>> И нека сега се покажат в рамките на този цикъл, ако х-координата на кръга плюс
ширината на кръга е по-голяма малка или равна на
ширина на прозореца -
С други думи, ако местоположението на кръга плюс широчината на кръга
сега се е покрай ръба на прозореца, ние бихме
по-добра обратна нашата скорост -
скорост получава отрицателен скорост, като по този начин Показваш положително към
отрицателен или отрицателни към положителни.
Но какво, ако кръгът се движи от дясно на ляво и затова го удари
левия край?
С други думи, ако на х-координатата на окръжността, сега е по-малко от или равно
0, да вървим напред и отново обърнете нашата скорост.
>> Така че, защо не съм добавени в широчина на окръжността този
време, както направих аз преди?
Е, не забравяйте, че координатите на обект са определени
с нейната максимална ляв ъгъл, не по средата.
И така, когато кръгът се движи от от ляво на дясно, ние трябва да се провери
дали десния край на кръг е преминал
десния край на прозореца.
Така че, за да разбера какво е това, ние имаме за да получите X-координата на кръга
плюс широчината на кръга да се движат себе си от горния ляв страна
ъгъл, ефективно, на горния десен ъгъл.
Когато кръгът се движи от дясно на лявата, междувременно, ние не трябва да
се занимавам с такава добавка, понеже горния ляв ъгъл на кръга е
вече стойността ние ще получите от GET х.
>> Нека сега се движи топката.
Нека сега спаси, компилирате и стартирате тази програма, направи скача. / скача.
И там имаме програма.
>> Но кръгът се движи толкова дяволски бързо, това е почти невъзможно да се види какво е
всъщност става.
Така че нека доста програмата насилствено от кликнете върху X в горния десен
ъглов тук.
Нека сега се върнем в изходния код и забавите темпото малко.
>> С други думи, в този безкраен контур, а не само и ход и
се движат и отново, реклама nauseum, нека да се бавим само за няколко милисекунди
преди да продължите да се движи отново.
По-специално, да вървим към дъното на Infinite Loop тук и просто
пауза за, да речем, 10 милисекунди на всяка итерация.
Нека сега компилирате и прегласуване скача.
И сега виждаме много по-разумен изпълнение, където можем да видим
кръг наистина подскачащи относно ляв и десен ръб.