//

CGContextRef buffer?

CGContextRef buffer? discussie in Ontwikkelen voor iOS forum; ( verdwijnt na registratie ) 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 ...



Ga terug   iPhone, iPod touch, iPad en Apple TV forum > Development > Ontwikkelen voor iOS
Wachtwoord vergeten? Registreren!
Registreer FAQ Ledenlijst Kalender Berichten van vandaag

Reageren

 

Discussietools Weergave
  #1  
Oud 11-05-09, 16:35
libia's schermafbeelding
libia libia is offline
• iOS 4.2.1
• 4.3.5
• Besturingssysteem: Windows
 
Geregistreerd: Dec 2008
Berichten: 451
Standaard 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?
Advertentie
Advertentie Gesponsorde links (verdwijnt na registratie)

  #2  
Oud 11-05-09, 17:54
gekkepietje gekkepietje is offline
• iOS 4.1
• Besturingssysteem: Windows
 
Geregistreerd: Sep 2008
Berichten: 153
Standaard

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...
  #3  
Oud 11-05-09, 18:33
libia's schermafbeelding
libia libia is offline
• iOS 4.2.1
• 4.3.5
• Besturingssysteem: Windows
 
Geregistreerd: Dec 2008
Berichten: 451
Standaard

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
  #4  
Oud 11-05-09, 18:43
gekkepietje gekkepietje is offline
• iOS 4.1
• Besturingssysteem: Windows
 
Geregistreerd: Sep 2008
Berichten: 153
Standaard

Dit is wat mijn View (min of meer) doet:

Code:
- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetLineJoin(context, kCGLineJoinRound);
    CGContextSetLineCap(context, kCGLineCapRound);

    CGContextSetRGBStrokeColor(context, 0.0, 0.0, 1.0, 1.0);
    CGContextSetLineWidth(context, 16.0);

    CGPoint* strokePoints = gameModel.strokePoints;

    for (int t = 1; t < gameModel.numStrokePoints; ++t)
    {
        CGContextMoveToPoint(context, strokePoints[t - 1].x, strokePoints[t - 1].y);
        CGContextAddLineToPoint(context, strokePoints[t].x, strokePoints[t].y);
        CGContextStrokePath(context);
    }

    // Zo kan het ook:
    //CGContextAddLines(context, gameModel.strokePoints, gameModel.numStrokePoints);
    //CGContextStrokePath(context);
}
  #5  
Oud 11-05-09, 20:15
libia's schermafbeelding
libia libia is offline
• iOS 4.2.1
• 4.3.5
• Besturingssysteem: Windows
 
Geregistreerd: Dec 2008
Berichten: 451
Standaard

Citaat:
Oorspronkelijk geplaatst door gekkepietje Bekijk bericht
Dit is wat mijn View (min of meer) doet:

Code:
- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
 
    CGContextSetLineJoin(context, kCGLineJoinRound);
    CGContextSetLineCap(context, kCGLineCapRound);
 
    CGContextSetRGBStrokeColor(context, 0.0, 0.0, 1.0, 1.0);
    CGContextSetLineWidth(context, 16.0);
 
    CGPoint* strokePoints = gameModel.strokePoints;
 
    for (int t = 1; t < gameModel.numStrokePoints; ++t)
    {
        CGContextMoveToPoint(context, strokePoints[t - 1].x, strokePoints[t - 1].y);
        CGContextAddLineToPoint(context, strokePoints[t].x, strokePoints[t].y);
        CGContextStrokePath(context);
    }
 
    // Zo kan het ook:
    //CGContextAddLines(context, gameModel.strokePoints, gameModel.numStrokePoints);
    //CGContextStrokePath(context);
}
ik zie niet echt een verschil, alleen dat ik iets meer code heb.. maar dat zou het niet zo langzaam mogen maken!
is er een manier om te kijken hoe lang het uitvoeren van een bepaald stuk code duurt?
  #6  
Oud 11-05-09, 21:19
gekkepietje gekkepietje is offline
• iOS 4.1
• Besturingssysteem: Windows
 
Geregistreerd: Sep 2008
Berichten: 153
Standaard

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.
  #7  
Oud 11-05-09, 23:33
Malork's schermafbeelding
Malork Malork is offline
• iOS 5.1.1
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Landgraaf
Berichten: 178
Stuur een bericht via MSN naar Malork
Standaard

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
zou iemand mij daar eens een licht op kunnen schijnen? Alvast bedankt en sorry voor de OT (vond het onnodig om er een nieuw topic over te maken).
  #8  
Oud 12-05-09, 00:21
libia's schermafbeelding
libia libia is offline
• iOS 4.2.1
• 4.3.5
• Besturingssysteem: Windows
 
Geregistreerd: Dec 2008
Berichten: 451
Standaard

Citaat:
Oorspronkelijk geplaatst door gekkepietje Bekijk bericht
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.
Wat is instruments? En wat is de beste manier om de tijd te meten?
En xcode kan ik dus helaas niet gebruiken, omdat ik geen mac heb
  #9  
Oud 12-05-09, 09:50
gekkepietje gekkepietje is offline
• iOS 4.1
• Besturingssysteem: Windows
 
Geregistreerd: Sep 2008
Berichten: 153
Standaard

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.
  #10  
Oud 12-05-09, 09:52
gekkepietje gekkepietje is offline
• iOS 4.1
• Besturingssysteem: Windows
 
Geregistreerd: Sep 2008
Berichten: 153
Standaard

Citaat:
Oorspronkelijk geplaatst door Malork Bekijk bericht
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.
Dat ligt aan de API-call, want de ene keer betekent het iets anders dan de andere keer. Je doet met zo'n API-call steeds iets "in een bepaalde context". In het geval van Core Graphics geeft zo'n context bijvoorbeeld aan wat de huidige tekenkleur is en de huidige lijndikte.
  #11  
Oud 12-05-09, 12:36
Malork's schermafbeelding
Malork Malork is offline
• iOS 5.1.1
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Landgraaf
Berichten: 178
Stuur een bericht via MSN naar Malork
Standaard

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?
  #12  
Oud 12-05-09, 17:34
libia's schermafbeelding
libia libia is offline
• iOS 4.2.1
• 4.3.5
• Besturingssysteem: Windows
 
Geregistreerd: Dec 2008
Berichten: 451
Standaard

Citaat:
Oorspronkelijk geplaatst door Malork Bekijk bericht
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?
dan moet je ff in apple class reference kijken

maar verder over mijn probleem
wat moet ik doen voor die milliseconden, hoe haal ik die op?
  #13  
Oud 12-05-09, 17:46
ideveloper's schermafbeelding
ideveloper ideveloper is offline
• iOS 5.1
• 5.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Apr 2008
Locatie: Bodegraven
Berichten: 339
Standaard

Citaat:
Oorspronkelijk geplaatst door libia Bekijk bericht
maar verder over mijn probleem
wat moet ik doen voor die milliseconden, hoe haal ik die op?
Misschien heb je hier wat aan Determining Elapsed Time
  #14  
Oud 12-05-09, 18:10
libia's schermafbeelding
libia libia is offline
• iOS 4.2.1
• 4.3.5
• Besturingssysteem: Windows
 
Geregistreerd: Dec 2008
Berichten: 451
Standaard

Citaat:
Oorspronkelijk geplaatst door ideveloper Bekijk bericht
Misschien heb je hier wat aan Determining Elapsed Time
ik heb het geprobeerd:
Code:
- (void)drawRect:(CGRect)rect
{
    CFTimeInterval startTime = CFAbsoluteTimeGetCurrent();

    ...

    CFTimeInterval difference = CFAbsoluteTimeGetCurrent() - startTime;
    NSLog(@"Time: %d", difference);
}
en dit zijn de tijden die ik krijg:
Citaat:
Time: 0
Time: -2147483648
Time: 1073741824
Time: 0
Time: -2147483648
Time: 0
(bij een kleine test, wat aanrakingen gedaan (omdat het daardoor langer hoort te duren.))

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
{
    NSLog(@"touchesMoved");
    if([touches count] > 0)
    {
        UITouch* touch = [touches anyObject];
        curLineEnd = [touch locationInView:self];
        if([self indexOfObjectAtPoint:[touch locationInView:self]] >= 0)
        {
            if([objectsInLine indexOfObject:[NSNumber numberWithInt:[self indexOfObjectAtPoint:[touch locationInView:self]]]] == NSNotFound)
            {
                if([self indexOfObjectAtPoint:curLineEnd] != [self indexOfObjectAtPoint:curLineStart])
                {
                    [objectsInLine addObject:[NSNumber numberWithInt:[self indexOfObjectAtPoint:[touch locationInView:self]]]];
                    curLineStart = [self centerOfObjectAtIndex:[self indexOfObjectAtPoint:[touch locationInView:self]]];
                }
                
                lineIsWrong = NO;
            }
            else
            {
                lineIsWrong = YES;
            }
        }
        else
        {
            lineIsWrong = NO;
        }
        [self setNeedsDisplay];
    }
    NSLog(@"touchesMoved: done");
}

Laatst gewijzigd door libia; 12-05-09 om 18:13.
  #15  
Oud 12-05-09, 18:13
Malork's schermafbeelding
Malork Malork is offline
• iOS 5.1.1
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Landgraaf
Berichten: 178
Stuur een bericht via MSN naar Malork
Standaard

Citaat:
Oorspronkelijk geplaatst door libia Bekijk bericht
dan moet je ff in apple class reference kijken

maar verder over mijn probleem
wat moet ik doen voor die milliseconden, hoe haal ik die op?
Ik snap 'm; ik zal je topic niet vervuilen . Btw in de class reference wordt ik niet wijzer zoals aangegeven. Ik snap wel dat het wijzigt per methode maar ik krijg het begrip 'context' nog niet 'in een hokje geplaatst' en in mijn Cocoa-boeken staat het ook niet echt...
(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.
  #16  
Oud 12-05-09, 18:18
libia's schermafbeelding
libia libia is offline
• iOS 4.2.1
• 4.3.5
• Besturingssysteem: Windows
 
Geregistreerd: Dec 2008
Berichten: 451
Standaard

Citaat:
Oorspronkelijk geplaatst door Malork Bekijk bericht
Ik snap 'm; ik zal je topic niet vervuilen . Btw in de class reference wordt ik niet wijzer zoals aangegeven. Ik snap wel dat het wijzigt per methode maar ik krijg het begrip 'context' nog niet 'in een hokje geplaatst' en in mijn Cocoa-boeken staat het ook niet echt...
(maw in jip-en-janneke taal...)

Ik vraag het wel ergens anders als ik er te lang mee blijf lopen...
In de class reference staat precies uitgelegd wat je mee moet geven

Citaat:
Oorspronkelijk geplaatst door Malork Bekijk bericht
Succes met jouw probleem in ieder geval.
bedankt!
  #17  
Oud 13-05-09, 11:32
gekkepietje gekkepietje is offline
• iOS 4.1
• Besturingssysteem: Windows
 
Geregistreerd: Sep 2008
Berichten: 153
Standaard

Citaat:
Oorspronkelijk geplaatst door libia Bekijk bericht
NSLog(@"Time: %d", difference);
Tja, CFTimeInterval is een double en geen int. Je zal "Time: %f" moeten gebruiken om zinvolle output te krijgen.
  #18  
Oud 13-05-09, 16:22
libia's schermafbeelding
libia libia is offline
• iOS 4.2.1
• 4.3.5
• Besturingssysteem: Windows
 
Geregistreerd: Dec 2008
Berichten: 451
Standaard

Citaat:
Oorspronkelijk geplaatst door gekkepietje Bekijk bericht
Tja, CFTimeInterval is een double en geen int. Je zal "Time: %f" moeten gebruiken om zinvolle output te krijgen.
oke, das eigenlijk ook raar een b voor int!! maar ik zal het ff proberen (mn iPhone is net gecrasht, dus hij is ff aan het opstarten

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?

Laatst gewijzigd door libia; 13-05-09 om 16:49.
  #19  
Oud 14-05-09, 15:53
libia's schermafbeelding
libia libia is offline
• iOS 4.2.1
• 4.3.5
• Besturingssysteem: Windows
 
Geregistreerd: Dec 2008
Berichten: 451
Standaard

Heeft iemand een idee hoe ik kan zorgen dat er vaker een event wordt gestuurd?
  #20  
Oud 14-05-09, 19:09
gekkepietje gekkepietje is offline
• iOS 4.1
• Besturingssysteem: Windows
 
Geregistreerd: Sep 2008
Berichten: 153
Standaard

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.
Reageren



Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten)

 

Soortgelijke discussies

Discussie Auteur Forum Reacties Laatste bericht
Apple TV: Apple TV 2 XBMC buffer probleempje youri1311 Jailbreak 17 24-06-11 11:19
Windows: Potentiële buffer overflow in iTunes 7.6 + QuickTime O.G. iTunes 0 19-02-08 14:38

Regels voor berichten
Je mag geen nieuwe discussies starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit
Trackbacks are Aan
Pingbacks are Aan
Refbacks are Uit



Alle tijden zijn GMT +2. Het is nu 23:01.