我试图通过尝试完成简单的事情来掌握Cocos2d。此时,我有一个场景,那个场景有一个背景精灵和一个图层。我正在尝试使用drawLine绘制图层。这是我目前的尝试。
@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
生成错误“无法忽略空值,因为它应该是”。显然我做错了,但希望你能看出我的推理。
我也试过这个
-(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;
}
哪个不会给我一个错误,但它也不起作用。我意识到我不理解一些基本的东西,但任何人都可以引导我朝着正确的方向前进吗?
答案 0 :(得分:22)
来自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) );
// ...
}
答案 1 :(得分:14)
好的,我想对任何有兴趣的人都知道了。这是代码,其中的注释解释了该怎么做。
@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
所以我假设,每个帧都会调用draw方法。
答案 2 :(得分:8)
您还可以使用CCRibbon类与纹理绘制线条。这是一个例子:
首先使用宽度,图像,长度,颜色和淡入淡出参数创建CCRibbon
ccColor4B myColor = ccc4(255, 255, 255, 150);
CCRibbon *ribbon = [CCRibbon ribbonWithWidth:10 image:@"green.png" length:10.0 color:myColor fade:0.7f];
然后我们将其添加为孩子:
[self addChild:ribbon z:8];
如果您现在运行该应用程序,您将看不到任何内容,因为您尚未向CCRibbon添加任何积分,所以我们添加2点
[ribbon addPointAt:ccp(10,10) width:10];
[ribbon addPointAt:ccp(15,15) width:10];
您无法删除单个点,但可以从其父
中删除CCRibbon[self removeChild:ribbon cleanup:YES];
源代码来自: http://www.ccsprite.com/cocos2d/using-ccribbon-example.html