2009-03-27 37 views
19

Tôi đang cố gắng nắm bắt được Cocos2d bằng cách cố gắng thực hiện những điều đơn giản. Tại thời điểm này, tôi có một cảnh, cảnh đó có một hình nền và một lớp. Tôi đang cố gắng vẽ lên Layer bằng cách sử dụng drawLine. Đây là nỗ lực hiện tại của tôi.Làm thế nào để vẽ một đường với Cocos2d-iPhone

@implementation MyLayer 
-(id)init{ 
    self = [super init]; 
    if(self != nil){ 
     glColor4f(0.8, 1.0, 0.76, 1.0); 
     glLineWidth(2.0f); 
     CocosNode *line = drawLine(10.0f, 100.0f,400.0f,27.0f); 
     [self addChild:line z:1]; 
    } 
    return self; 
} 
@end 

Lỗi tạo ra "lỗi giá trị không bị bỏ qua vì nó phải là". Vì vậy, rõ ràng tôi đang làm điều đó sai, nhưng hy vọng bạn có thể thấy lý do của tôi.

Tôi cũng đã cố gắng này

-(id)init{ 
    self = [super init]; 
    if(self != nil){ 
     glColor4f(0.8, 1.0, 0.76, 1.0); 
     glLineWidth(2.0f); 
     drawLine(10.0f, 100.0f,400.0f,27.0f); 
    } 
    return self; 
} 

Mà không cho tôi một lỗi, nhưng nó không hoạt động nữa. Tôi nhận ra rằng tôi không hiểu điều gì đó cơ bản, nhưng liệu có ai có thể chỉ đạo tôi đi đúng hướng không?

Trả lời

22

Từ cocos2d drawPrimitivesTest.m:

- (void)draw { 
    // ... 

    // draw a simple line 
    // The default state is: 
    // Line Width: 1 
    // color: 255,255,255,255 (white, non-transparent) 
    // Anti-Aliased 
    glEnable(GL_LINE_SMOOTH); 
    ccDrawLine(ccp(0, 0), ccp(s.width, s.height)); 

    // ... 
} 
+0

Tôi không thấy bất cứ điều gì khi tôi dán 2 dòng đó vào tệp HelloWorldLayer.m của tôi. Gợi ý? – quantumpotato

+0

Ah, đặt chúng vào phương thức vẽ của lớp, hoạt động tốt. Cảm ơn! – quantumpotato

+2

GL_LINE_SMOOTH không được hỗ trợ trong iOS OpenGL 2. http://www.cocos2d-iphone.org/forum/topic/31940 –

14

Ok, tôi đã tìm ra cho bất kỳ ai quan tâm. Đây là mã với chú thích giải thích việc cần làm.

@implementation GameLayer 
-(id)init{ 
    self = [super init]; 
    if(self != nil){ 
     // init stuff here  
    } 
    return self; 
} 

// You have to over-ride this method 
-(void)draw{ 
    glColor4f(0.8, 1.0, 0.76, 1.0); 
    glLineWidth(2.0f); 
    drawLine(10,100,50,79); 
}  
@end 

Vì vậy, tôi giả sử, phương thức vẽ được gọi ở mọi khung hình.

+0

Không làm việc cho tôi. drawLine (10,100,50,79); không được xác định trong CCLayer, sẽ không liên kết ứng dụng Bất kỳ ý tưởng nào? Cảm ơn. –

+9

FYI - ví dụ này đã lỗi thời cho phiên bản v1.0 của Cocos2D. "drawLine" không tồn tại nữa. Sử dụng "ccDrawLine" từ CCDrawingPrimitives với cùng các đối số. – Shakakai

+0

Để thêm vào nhận xét của Shakakai: hãy xem 'ccDrawPoly' trong cocos2d nếu bạn muốn vẽ nhiều hơn một đoạn thẳng. – MechEthan

8

Bạn cũng có thể sử dụng lớp CCRibbon để vẽ phù hợp với kết cấu của bạn. Dưới đây là một ví dụ:

Trước tiên, bạn tạo CCRibbon với chiều rộng, hình ảnh, độ dài, màu sắc và mờ dần các thông số

ccColor4B myColor = ccc4(255, 255, 255, 150); 

CCRibbon *ribbon = [CCRibbon ribbonWithWidth:10 image:@"green.png" length:10.0 color:myColor fade:0.7f]; 

Sau đó chúng ta thêm nó như một đứa trẻ:

[self addChild:ribbon z:8]; 

Nếu bạn chạy ứng dụng bây giờ bạn sẽ không thấy bất kỳ điều gì vì bạn chưa thêm bất kỳ điểm nào vào CCRibbon để cho phép thêm 2 điểm

[ribbon addPointAt:ccp(10,10) width:10]; 

[ribbon addPointAt:ccp(15,15) width:10]; 

Bạn không thể xóa điểm cá nhân nhưng bạn có thể loại bỏ các CCRibbon từ mẹ

[self removeChild:ribbon cleanup:YES]; 

Source code từ: http://www.ccsprite.com/cocos2d/using-ccribbon-example.html

Các vấn đề liên quan