2012-12-11 2 views
0

아주 간단한 드로잉 애플리케이션을 만들고 있습니다. ccTouchMoved 이벤트를 사용하여 그릴 선이 있습니다. 모든 터치 이동 된 점을 배열에 넣은 다음 for 루프를 사용하여 모든 점 사이에 선을 그립니다. 이제는 손가락을 들고 새 라인 그리기를 시작할 때 포인트에 합류하고 싶지 않습니다. 그 부분도 작동하지만 이제는 새로운 그림을 시작할 때마다 전체 화면이 깜박입니다.Cocos2d 드로잉 앱 만들기 라인

// 
// HelloWorldLayer.mm 
// DrawPuppets 
// 
// Created by Mohammad Azam on 12/11/12. 
// Copyright __MyCompanyName__ 2012. All rights reserved. 
// 

// Import the interfaces 
#import "DrawPuppetLayer.h" 
#import "AppDelegate.h" 
#import "PhysicsSprite.h" 

enum { 
    kTagParentNode = 1, 
}; 


#pragma mark - HelloWorldLayer 

@interface DrawPuppetLayer() 
-(void) initPhysics; 
-(void) addNewSpriteAtPosition:(CGPoint)p; 
-(void) createMenu; 
@end 

@implementation DrawPuppetLayer 

+(CCScene *) scene 
{ 
    // 'scene' is an autorelease object. 
    CCScene *scene = [CCScene node]; 

    // 'layer' is an autorelease object. 
    DrawPuppetLayer *layer = [DrawPuppetLayer node]; 

    // add layer as a child to scene 
    [scene addChild: layer]; 

    // return the scene 
    return scene; 
} 

-(id) init 
{ 
    if((self=[super init])) { 

     // enable events 

     self.isTouchEnabled = YES; 
     self.isAccelerometerEnabled = YES; 
     index = -1; 

     canvas = [[NSMutableArray alloc] init]; 

     // init physics 
     [self initPhysics]; 

     [self scheduleUpdate]; 
    } 
    return self; 
} 


-(void) draw 
{ 

    if([lineDrawing.points count] > 1) 
    { 

    for(int i = 0; i<([canvas count]) ;i++) 
    { 
     LineDrawing *drawing = (LineDrawing *) [canvas objectAtIndex:i]; 

     for(int j=0;j<[drawing.points count] - 1;j++) 
     { 

     LinePoint *firstPoint = (LinePoint *) drawing.points[j]; 
     LinePoint *secondPoint = (LinePoint *) drawing.points[j + 1]; 

     CGPoint point1 = [[CCDirector sharedDirector] convertToGL:CGPointMake(firstPoint.x, firstPoint.y)]; 

     CGPoint point2 = [[CCDirector sharedDirector] convertToGL:CGPointMake(secondPoint.x, secondPoint.y)]; 

     ccDrawLine(point1, point2); 
     } 

    } 


    } 


    // 
    // IMPORTANT: 
    // This is only for debug purposes 
    // It is recommend to disable it 
    // 
    [super draw]; 

    ccGLEnableVertexAttribs(kCCVertexAttribFlag_Position); 

    kmGLPushMatrix(); 

    world->DrawDebugData(); 

    kmGLPopMatrix(); 
} 




-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 

    lineDrawing = [[LineDrawing alloc] init]; 
    lineDrawing.points = [[NSMutableArray alloc] init]; 

    [canvas addObject:lineDrawing]; 

} 

-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 

    UITouch *touch = [touches anyObject]; 
    CGPoint point = [touch locationInView: [touch view]]; 

    LinePoint *linePoint = [[LinePoint alloc] init]; 
    linePoint.x = point.x; 
    linePoint.y = point.y; 


    [lineDrawing.points addObject:linePoint]; 

} 

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    //Add a new body/atlas sprite at the touched location 
    for(UITouch *touch in touches) { 
     CGPoint location = [touch locationInView: [touch view]]; 

     location = [[CCDirector sharedDirector] convertToGL: location]; 


    } 
} 



@end 

누구든지 내 실수를 감지 할 수 있습니까?

답변

1

, 당신의 포인트 배열이

-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    // get the node space location of our touch 
    CGPoint location = [self getNodeSpaceTouchLocationFromUIEvent:event]; 

    // draw with our current location and a random colour 
    [_canvas begin]; // our rendertexture instance 

    // do your drawing here 
    [_pen drawPenWithPosition:location andColour:_colour]; 

    // end capturing the current pen state 
    [_canvas end]; 
} 

여기가적인 Cocos2D에서 GL_POINTS를 사용 iOSDevUK 2012 년 작성된 간단한 example project의 친절가 너무 커서 그릴 수 얻을 때 시간을있을거야 텍스처로 아래 모든를 방문하십시오 v1이며 개발할 때 취한 접근 방식을 기반으로합니다. SketchShare

+0

고마워요! 하지만 실제로 두 줄을 그릴지라도 실제로 깜박입니다! – azamsharp

+1

ccDrawLine에 제공하는 포인트에 문제가 있거나 OpenGL 상태가 변경 될 가능성이 있습니다. – abitofcode

관련 문제