【问题标题】:Bezier curve sample code on touches moved贝塞尔曲线示例代码触摸移动
【发布时间】:2012-08-30 09:23:08
【问题描述】:

我正在寻找使用触摸绘制贝塞尔曲线的示例代码,如果有人有链接或示例代码,请帮助我。我正在开发飞行控制游戏,我必须沿着用户用手指绘制的路径移动我的 ccsprite

编辑:感谢您的建议,现在我正在使用 CAShapeLayer 和 CAKeyframeAnimation 制作曲线。现在我需要删除一个用户通过我们的曲线。如果 ccsprite 沿着路径移动,则背面路径被删除,就像在飞行控制应用程序中一样那个,非常感谢

【问题讨论】:

    标签: iphone ios cocoa-touch cocos2d-iphone bezier


    【解决方案1】:

    贝塞尔曲线是使用两个端点和两个锚点绘制的。使用此信息绘制贝塞尔曲线非常容易。从手绘曲线中获取这些点称为矢量化(图像跟踪)。我是一个相当复杂的任务。

    我认为使用这样的简单算法可以获得更好的结果:

    1. 将所有坐标存储在 FIFO 列表中
    2. 将您的精灵移动到列表的下一个点的方向
    3. 一旦 sprite 子句足够到该点丢弃该点并继续下一个点
    4. 使用简单的平滑算法(xSpeed、ySpeed、阻尼)来简化运动,如果您需要帮助,请询问我

    编辑:

    我刚看了飞行控制视频,我会这样做。一旦用户按下一个,它就会选择它。然后用户开始绘图,尽可能靠近用户手指绘制点(移动受平面转弯半径限制)。这将记录一系列步骤。每一步都由它的角度定义(我认为速度是恒定的),这个角度必须等于前一个 +/- 转动能力。

    使用简单的三角函数计算 x,y 坐标。

    看看这个: How to make a sprite point at the mouse. XNA C#

    您会在https://gamedev.stackexchange.com/ 上找到更好的帮助,确保有人准备好粘贴类似于您需要的代码。几年前我在 Amiga 上的 Amos 做过,但我无法将代码粘贴到这里,抱歉 :)

    【讨论】:

    • 博坎您好,感谢您的回复。是的,我需要帮助,但在此之前,如果我们这样移动,我们可以获得像飞行控制一样的效果?任何方式请帮助我,非常感谢
    【解决方案2】:
    #include <math.h>
    
        CGFloat radius = 100;
        //CGFloat pi = 3.1415927; //comes for free in math.h
    
        UIBezierPath *basecircle = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0,0,radius*2,radius*2)];
        [[UIColor blackColor] set];
        [basecircle fill];
    

    这是绘制bezierPath的代码,需要在drawRect方法中实现。 希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-12-06
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多