cocos2dで塗りつぶした円を描くことは可能ですか? アウトラインサークルはdrawCircle()関数を使用して行うことができますが、特定の色で塗りつぶす方法はありますか?おそらく、純粋なOpenGLを使用して?iPhone用のcocos2dで円を描く方法
答えて
ルックへ:
- CGContextAddArc
- CGContextFillPath
これらは、私もこれを疑問に思うが、実際に達成していないあなたは、OpenGL
を必要とせずに円を埋めることができますしている。私はGrouchalが上でヒントしたCGContextを使ってみましたが、画面上に何かを描画することはできません。私がしようとしている :...
NOTE
-(void) draw
{
[self makestuff:UIGraphicsGetCurrentContext()];
}
-(void)makestuff:(CGContextRef)context
{
// Drawing lines with a white stroke color
CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);
// Draw them with a 2.0 stroke width so they are a bit more visible.
CGContextSetLineWidth(context, 2.0);
// Draw a single line from left to right
CGContextMoveToPoint(context, 10.0, 30.0);
CGContextAddLineToPoint(context, 310.0, 30.0);
CGContextStrokePath(context);
// Draw a connected sequence of line segments
CGPoint addLines[] =
{
CGPointMake(10.0, 90.0),
CGPointMake(70.0, 60.0),
CGPointMake(130.0, 90.0),
CGPointMake(190.0, 60.0),
CGPointMake(250.0, 90.0),
CGPointMake(310.0, 60.0),
};
// Bulk call to add lines to the current path.
// Equivalent to MoveToPoint(points[0]); for(i=1; i<count; ++i) AddLineToPoint(points[i]);
CGContextAddLines(context, addLines, sizeof(addLines)/sizeof(addLines[0]));
CGContextStrokePath(context);
// Draw a series of line segments. Each pair of points is a segment
CGPoint strokeSegments[] =
{
CGPointMake(10.0, 150.0),
CGPointMake(70.0, 120.0),
CGPointMake(130.0, 150.0),
CGPointMake(190.0, 120.0),
CGPointMake(250.0, 150.0),
CGPointMake(310.0, 120.0),
};
// Bulk call to stroke a sequence of line segments.
// Equivalent to for(i=0; i<count; i+=2) { MoveToPoint(point[i]); AddLineToPoint(point[i+1]); StrokePath(); }
CGContextStrokeLineSegments(context, strokeSegments, sizeof(strokeSegments)/sizeof(strokeSegments[0]));
}
をこれらの方法はココスノードクラスで定義されている、と私はコード例から借りmakestuff方法:これは私が試したものです形状やパスを描き、それを塗りつぶします。私は上のコードは線を引くだけであることを知っていますが、私はそれが動作するまで続けません。
EDIT: これはおそらくお粗末な解決策ですが、これは少なくともの仕事だと思います。
各CocosNodeにはテクスチャ(Texture2D *)があります。 Texture2Dクラスは、UIImageから初期化することができます。 UIImageはCGImageRefから初期化することができます。 quartz libのCGImageRefコンテキストを作成することは可能です。
だから、何をするだろうことは次のとおりです。
- はあるにTexture2Dを作成し、このCGImageRef
- でUIImageを初期化した石英
- でこのイメージに描画した石英
- ためCGImageRefコンテキストを作成します。その画像で初期化される
- CocosNodeのテクスチャをそのTexture2Dインスタンスに設定する
質問には、これができるだけ速いのが問題です。あなたがCGImageRefをCocosNodeから直接取得してこれらのすべてのステップを実行するのではなく描画することができれば好きですが、まだこれを行う方法は見つけられていません(そして、実際にどこかに入るのは難しいです)。
In DrawingPrimitives。メートル、drawCricleでこれを変更:
glDrawArrays(GL_LINE_STRIP, 0, segs+additionalSegment);
へ:
glDrawArrays(GL_TRIANGLE_FAN, 0, segs+additionalSegment);
あなたがここにOpenGLのプリミティブ詳細を読むことができます: http://www.informit.com/articles/article.aspx?p=461848
はここ(ccDrawCircleのわずかな修正です)を使用すると、円のスライスを描くことができます。 CCDrawingPrimitives.mこのスティックともCCDrawingPrimitives.hする方法ヘッダー情報を追加します。
パラメータ:a
:ラジアンで開始角度、d
:デルタまたはラジアン単位の角度の変化(完全な円のため2*M_PI
を使用)
変更は、私は以下のこの方法を使用
void ccDrawFilledCircle(CGPoint center, float r, float a, float d, NSUInteger totalSegs)
{
int additionalSegment = 2;
const float coef = 2.0f * (float)M_PI/totalSegs;
NSUInteger segs = d/coef;
segs++; //Rather draw over than not draw enough
if (d == 0) return;
GLfloat *vertices = calloc(sizeof(GLfloat)*2*(segs+2), 1);
if(! vertices)
return;
for(NSUInteger i=0;i<=segs;i++)
{
float rads = i*coef;
GLfloat j = r * cosf(rads + a) + center.x;
GLfloat k = r * sinf(rads + a) + center.y;
//Leave first 2 spots for origin
vertices[2+ i*2] = j * CC_CONTENT_SCALE_FACTOR();
vertices[2+ i*2+1] =k * CC_CONTENT_SCALE_FACTOR();
}
//Put origin vertices into first 2 spots
vertices[0] = center.x * CC_CONTENT_SCALE_FACTOR();
vertices[1] = center.y * CC_CONTENT_SCALE_FACTOR();
// Default GL states: GL_TEXTURE_2D, GL_VERTEX_ARRAY, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY
// Needed states: GL_VERTEX_ARRAY,
// Unneeded states: GL_TEXTURE_2D, GL_TEXTURE_COORD_ARRAY, GL_COLOR_ARRAY
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, vertices);
//Change to fan
glDrawArrays(GL_TRIANGLE_FAN, 0, segs+additionalSegment);
// restore default state
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D);
free(vertices);
}
をコメントしています。
glLineWidth(2);
for(int i=0;i<50;i++){
ccDrawCircle(ccp(s.width/2, s.height/2), i,0, 50, NO);
}
forループで複数の円を描き、塗りつぶされた円のように見えます。
と呼ばれる新しい機能がcocos2d CCDrawingPrimitives
にあります。これを見ている人には、代わりにこのメソッドを使用してください。次に、cocos2dコードを混乱させる必要はありません。ちょうどインポートします。CCDrawingPrimitives.h
- 1. 半円を描く方法
- 2. OpenGL ES 2.0/cocos2d 2.0で円を描く最も良い方法は?
- 3. キャンバスで円を描く方法は?
- 4. Cで楕円を描く方法は?
- 5. openglesで円を描く方法
- 6. Libgdxで円グラフを描く方法
- 7. iPhoneアプリでこの楕円を描く最善の方法は何ですか?
- 8. 円で円を描く
- 9. Cocos2dで長方形を描く
- 10. JUNG2:円を描く方法は?
- 11. 摂動円を描く方法は?
- 12. 透明円を描く方法は?
- 13. キャンバスを使用してJavaで円を描く方法
- 14. iphoneでカラーホイールを描く方法は?
- 15. 円を描く
- 16. CSSで円の円を描く
- 17. iPhone:円のアニメーションになるまで曲線を描く
- 18. 円グラフを円柱に描く方法は?
- 19. jsを使用して楕円形を描く方法は?
- 20. Cocos2d:描かれた円をスケーリングまたはアニメーションをフェードアウトする方法
- 21. libgdxで円と円弧を描く
- 22. iPhone用Cocos2d対Cocos2d-x
- 23. iphoneのMKMapViewの2つのアノテーションの間に円弧を描く
- 24. 円セクターを描く
- 25. アセンブリ - 円を描く
- 26. SVGで円を描く
- 27. Mapkitで円を描く
- 28. WPFで円を描く
- 29. SDL2で円を描く?
- 30. CSSで半円を描く