2013-11-03 37 views
2

我开始使用新的Spritekit框架开发Xcode中的Tower防御项目,并且我想在玩家创建的任何塔上添加一个可见半径(圆圈)。CGContextAddArc:如何创建圈子?

因此,我创建了下面的代码:

// Place Towers 
-(void)mouseUp:(NSEvent *)theEvent { 
    /* Called when a mouse click occurs */ 

    CGPoint location = [theEvent locationInNode:self]; 

    SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"tower"]; 

    sprite.position = location; 
    sprite.scale = 1.5; 

    CGContextRef myContext = [[NSGraphicsContext currentContext] graphicsPort]; 
    CGContextAddArc(myContext, location.x, location.y, 10, 0, M_PI*2, YES); 
    CGContextSetRGBStrokeColor(myContext, 0, 0, 225, 0); 

    [self addChild:sprite]; 

} 

我不熟悉的角度和其他的东西,因为我做这行的第一次,所以我只是猜测,它应该像那。我很确定我错过了什么。

感谢您的任何建议(我等待一些伟大的批评)。

+1

它会产生预期的结果?如果不是,你会得到什么结果,你期望什么? - *“我只是猜测它应该是这样的”*根本不是问题! –

+0

它不产生任何东西,只是精灵本身,没有圈子..对不起,1,在这里发布时间.. – Ferologics

+1

为什么不使用SKShapeNode? https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKShapeNode_Ref/Reference/Reference.html – prototypical

回答

4

直接从SpriteKit编程指南:

SKShapeNode *ball = [[SKShapeNode alloc] init]; 

CGMutablePathRef myPath = CGPathCreateMutable(); 
CGPathAddArc(myPath, NULL, 0,0, 15, 0, M_PI*2, YES); 
ball.path = myPath; 

ball.lineWidth = 1.0; 
ball.fillColor = [SKColor blueColor]; 
ball.strokeColor = [SKColor whiteColor]; 
ball.glowWidth = 0.5; 
+0

我试过上面的代码(改变位置),sysnthetized myPath等。没有:/可能是我的背景图像叠加它? – Ferologics

+0

我试过NSLog(@“Ball created!”),如果函数运行了,它会,但它根本不显示任何东西。 – Ferologics

+3

我想通了:D忘了[self addChild:ball] – Ferologics

2

它可能会更容易使用CGContextStrokeEllipseInRect()。所以,如果你想半径为10的圆,在(X,Y)为中心将是:

const CGFloat color[] = { 0, 0, 1, 1 }; // Alpha should be 1, not 0! 
CGContextSetStrokeColor (myContext, color); 
CGContextStrokeEllipseInRect (myContext, CGRectMake(x - 10, y - 10, 20, 20)); 
+0

是的,它应该,我不知道我是否按照你的意思去得到它,所以如果你可以发布一些代码或任何东西?它会很棒 – Ferologics

+0

实际上,我只是意识到有一个'CGContextStrokeEllipseInRect()'它一次完成笔画! – user1118321