如何使用 SpriteKit 绘制正弦线?

Posted

技术标签:

【中文标题】如何使用 SpriteKit 绘制正弦线?【英文标题】:How to draw a sine line using SpriteKit? 【发布时间】:2015-05-06 04:12:45 【问题描述】:

这个问题几乎不言自明:我需要使用 SpriteKit 来绘制一条看起来像正弦波的线,但稍后我还需要改变这条波的幅度。

【问题讨论】:

谷歌“ios 绘制正弦波”。 @sangony 让我想到了这个问题:***.com/questions/23985840/… 这不是我想要的。相反,我想画一个振幅可变的正弦波。这个问题已经回答了。 【参考方案1】:

基本步骤...1)创建SKShapeNode,2)生成正弦CGPath,3)将CGPath分配给形状节点的path属性

-(void)didMoveToView:(SKView *)view         
    self.scaleMode = SKSceneScaleModeResizeFill;

    // Create an SKShapeNode
    SKShapeNode *node = [SKShapeNode node];
    node.position = CGPointMake(300.0, 300.0);
    // Assign to the path attribute
    node.path = [self sineWithAmplitude:20.0 frequency:1.0 width:200.0
                               centered:YES andNumPoints:32];

    [self addChild:node];


// Generate a sinusoid CGPath
- (CGMutablePathRef)sineWithAmplitude:(CGFloat)amp frequency:(CGFloat)freq
                                width:(CGFloat)width centered:(BOOL)centered
                         andNumPoints:(NSInteger)numPoints 

    CGFloat offsetX = 0;
    CGFloat offsetY = amp;

    // Center the sinusoid within the shape node
    if (centered) 
        offsetX = -width/2.0;
        offsetY = 0;
    

    CGMutablePathRef path = CGPathCreateMutable();

    // Move to the starting point
    CGPathMoveToPoint(path, nil, offsetX, offsetY);
    CGFloat xIncr = width / (numPoints-1);

    // Construct the sinusoid
    for (int i=1;i<numPoints;i++) 
        CGFloat y = amp * sin(2*M_PI*freq*i/(numPoints-1));
        CGPathAddLineToPoint(path, nil, i*xIncr+offsetX, y+offsetY);
    

    return path;

【讨论】:

老兄......你摇滚。谢谢!

以上是关于如何使用 SpriteKit 绘制正弦线?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 在 SpriteKit 上绘制贝塞尔曲线?

如何在 SpriteKit 中使用 SKShapeNode 通过触摸特定路径来绘制路径

SpriteKit:如何在没有 SKShapeNode 的情况下绘制自定义形状?

如何在 SpriteKit 场景编辑器中访问导航图的对象

补充如何在WPF中绘制正弦曲线

一起Talk Android吧(第四百一十六回:绘制正弦波总结)