CGContextRef buffer?
hoi,
ik heb al een tijdje op gezocht op google, maar ik kan niet echt iets vinden! ik ben dus bezig met een simpele game aan het maken, hierbij moet je lijnen trekken (meer wil ik er nog niet over vertellen :) ). Dit teken ik met CGContextRef, alleen loopt het niet heel soepel (lees: totaal niet soepel). Ik had dus bedacht dat ik het misschien eerst in een buffer moet tekenen, maar ik weet dus niet hoe dat moet! Misschien heeft iemand een tip voor me? Oja, ik gebruik geen xCode, misschien handig om te weten? |
Ik weet niet precies hoe je het doet, maar ik heb ook een app gemaakt waar je lijnen moet tekenen ("Huisje-kruisje" spelletje) en dat verloopt soepel genoeg. Dat doe ik ook met Quartz. Oke, het is eigenlijk "freehand" dat je tekent, maar ik verbind de losse punten met lijnen.
Als we het over heel veel lijnen hebben, dan kun je waarschijnlijk beter OpenGL gebruiken... |
nee, in de app wordt er van een punt een lijn getekent naar je vinger, bij elke beweging van je vinger wordt de lijn opnieuw getekend naar het nieuwe punt (setNeedsDisplay), maar het duurt heel lang totdat hij reageerd, ik had gehoopt dat dat met de dubbele buffer te maken had :)
anders moet ik hem gevoeliger maken, maar ik denk niet dat dat mogelijk is |
Dit is wat mijn View (min of meer) doet:
Code:
- (void)drawRect:(CGRect)rect |
Citaat:
is er een manier om te kijken hoe lang het uitvoeren van een bepaald stuk code duurt? |
Ik denk dat XCode (of anders Instruments) wel een profiler heeft. Alternatief is de tijd op te nemen aan het begin van je functie en nog een keer aan het eind en het verschil af te drukken. Neem daarvoor wel een timer die in milli- of microseconden kan rekenen, anders heeft het niet veel nut.
|
sorry voor de off-topic bump, maar ik zie vaker die 'context' tevoorschijn komen maar kan niet mijn vinger leggen op wat het precies is. ook bekijken van voorbeeld-code maakt me niets wijzer.
Ik bedoel dan niet alleen 'context' zoals in bovenstaande voorbeeld,maar in het algemeen (zoals bijvoorbeeld in: Code:
- (void)addObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context |
Citaat:
En xcode kan ik dus helaas niet gebruiken, omdat ik geen mac heb |
Oh, Instruments is een tool die bij XCode zit om dingen te meten, zoals processorgebruik, memory leaks, etc.
Als je geen Mac hebt, dan zul je handmatig de tijd moeten meten. Er zijn functies in de API die het aantal milli- of microseconden teruggeven die zijn verstreken sinds de start van je applicatie. Uit mijn hoofd weet ik zo niet hoe die functie heet. |
Citaat:
|
Heh ja dat had ik wel door ;) (beetje zoals (id)) maar als ik bijvoorbeeld die addObserver zou gebruiken, wat zou dan een mogelijke 'context' zijn die je meegeeft? Zoeits als bijvoorbeeld 'TouchUpInside' als je een observer maakt voor een UIButton?
|
Citaat:
maar verder over mijn probleem :) wat moet ik doen voor die milliseconden, hoe haal ik die op? |
Citaat:
|
Citaat:
Code:
- (void)drawRect:(CGRect)rect Citaat:
0 kan überhaupt niet, hij tekent altijd wel wat en het kost echt wel wat tijd... een negatieve tijd lijkt me niet erg waarschijnlijk de andere tijd klinkt ook niet erg logisch! edit ik heb het nog eens bestudeerd, maar het valt me op dat hij eigenlijk alleen opnieuw tekent als ik mijn vinger stil hou! dit is mijn code voor het opnemen van bewegingen: Code:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event |
Citaat:
(maw in jip-en-janneke taal...) Ik vraag het wel ergens anders als ik er te lang mee blijf lopen... Succes met jouw probleem in ieder geval. |
Citaat:
Citaat:
|
Citaat:
|
Citaat:
bedankt iig edit afgerond is het nu steeds 0.1, dit lijkt me niet heel veel toch? Volgens mij tekent hij het steeds pas als ik mijn vinger stil hou, hoe doen de teken apps het dan? Oftewel: hoe kan ik zorgen dat hij sneller achter elkaar mijn vingerpositie leest? |
Heeft iemand een idee hoe ik kan zorgen dat er vaker een event wordt gestuurd?
|
Doe je nog iets anders je in main run loop? Ik vind het maar raar dat hij zo langzaam hertekent bij jou. Heb je een timer die heel druk van alles aan het doen is of zo?
Je kunt proberen je tekencode weg te halen en kijken hoeveel events je dan binnenkrijgt. Als dat niets uitmaakt, in je touches handler alle code weghalen en kijken hoeveel events hij dan doorstuurt. Probeer het probleem te isoleren. |
mijn app bestaat uit meerdere view controllers, waaronder één navigationcontroller.. maar volgens mij gebeurt er voor de rest niet echt iets..
het deel dat op de aanrakingen reageert is trouwens een gameView : UIView hiervoor heb ik de volgende methods gebruikt: Code:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event |
Alle tijden zijn GMT +2. Het is nu 03:03. |