LUIDSPREKER 1: Laten we nu een programma schrijven dat omvat een venster, een cirkel, en mijn cursor. In het bijzonder, laten we instantiëren een zwarte cirkel op het scherm, en vervolgens laten we trainen om mijn cursor volgen. Dus als ik beweeg mijn muis omhoog, omlaag, naar links of rechts, de cirkel volgt samen. Laten we eerst onder gevents.h, zodat hebben we toegang tot grafische evenementen. Laten we het volgende omvatten gobjects, zodat we toegang hebben tot objecten zoals cirkels - of beter gezegd, ovalen, zoals we zullen zien. En dan laten we onder andere gwindow.h, zodat we toegang een grafisch venster. Vervolgens laten we verklaren belangrijkste op de gebruikelijke wijze. Int main leegte. Laten we nu een instantie, of maak, een venster met GWindow. En we zullen de variabele venster noemen. Krijgt newGWindow. En ik zal enigszins arbitrair maken de venster 320 pixels bij 240 pixels. Nu moeten we instantiëren die cirkel. Nou, het blijkt dat een cirkel is een speciaal geval van een ovaal. Het toeval wil dat de breedte en de hoogte van een cirkel gelijk. Dus laten we instantiëren een ovaal als volgt. Goval. We noemen het cirkel, dat wel. En dat gaat newGOval krijgen. En we gaan om aan te geven dat het zal beginnen in de linkerbovenhoek hoek, waarvan de coördinaten zijn 0 komma 0. En de breedte van de globale zullen worden 50 bij 50 - met andere woorden, een cirkel. Nu hebben we een raam, we hebben een cirkel. Maar we zijn nog niet toegevoegd dat cirkel naar het venster. Dus we moeten dat expliciet doen. Voeg venster, cirkel. Nog afgezien laatstgenoemde aan de voormalige. Nu laten we iets doen voor altijd. Laten we zitten in een oneindige lus, luisteren naar muisgebeurtenissen. Specifiek niet klikt, maar bewegingen van de muis. En reageren op die bewegingen door bewegen van de cirkel. Hier gaan we. Terwijl waar. Laten we eens kijken voor een evenement met Gevent, noemde het evenement. Krijgt getNextEvent. En laten we specifiek proberen te krijgen een muis bij een soort. Laten we het volgende te zorgen dat het event niet niet gelijk aan nul, zodat er daadwerkelijk iets te reageren. En laten we volgende controle indien getEventType, passeren in geval gelijk MOUSE_MOVED, dat een speciaal constant, verklaard de Stanford Portable Library, dat betekent dat de muis is inderdaad verplaatst. Dan laten we overgaan tot het volgende doen. Verklaren een dubbele. En ik noem het x. Specifiek opslag in dat de terugkeer waarde van getX van het evenement. Met andere woorden, geef me de x-coördinaat waar de muis werd verplaatst naar. Maar alleen maar om de cirkel line-up te maken precies boven mijn cursor, laat me nu aftrekken van de breedte van de cirkel zelf gedeeld door 2. Met andere woorden, laten we aftrekken uit haar straal. Laten we iets soortgelijks doen nu voor y. Y krijgt krijgt de y-coördinaat van die gebeurtenis - dat is, de muis verplaatst - minus getWidth van de cirkel. En deze keer zullen we het volledige doen diameter niet de straal. Laten we ten slotte stelt u de locatie van de cirkel naar die nieuwe x komma y zijn. Laten we nu nog redden, compileren, en uitvoeren van deze programma. Maak cursor. . / Cursor. Er is de cirkel in het linker bovenhoek. Nu wil ik mijn muis over die raam en kijk of de cirkel vergrendelingen op als verwacht. En inderdaad het doet. Merk op dat specifiek de cirkel is op de top van mijn cursor, perfect gecentreerd, als gevolg van de wiskunde we hebben met zijn diameter en de straal.