代码之家  ›  专栏  ›  技术社区  ›  pgb

CcsPrite跟随一系列cgPoints

  •  2
  • pgb  · 技术社区  · 14 年前

    我正在开发一个线条绘制游戏,类似于飞行控制,港口主人,和其他在应用商店,使用cocos2d。

    对于这个游戏,我需要一个ccsprite来跟随用户画的线。我在储存一系列 CGPoint 中的结构 NSArray ,基于我在 touchesBegin touchesMoved 信息。我现在有个问题,如何让我的精灵跟着他们。

    我有一个tick方法,它是以帧速率调用的。在滴答法中,根据精灵的速度和当前位置,我需要计算它的下一个位置。有什么标准的方法可以做到这一点吗?

    我现在的方法是计算最后一个“参考点”和下一个“参考点”之间的线,并计算该线中的下一个点。我遇到的问题是当精灵“旋转”(从线的一段移动到另一段)。

    任何暗示都将不胜感激。

    1 回复  |  直到 14 年前
        1
  •  6
  •   Jeff B    14 年前

    为什么要编写自己的tick方法?你为什么不使用内置的 CCMoveTo 方法?

    (void) gotoNextWayPoint {
        // You would need to code these functions:
        CGPoint point1 = [self popCurrentWayPoint];
        CGPoint point2 = [self getCurrentWayPoint];
    
        // Calculate distance from last way point to next way point
        CGFloat dx = point2.x - point1.x;
        CGFloat dy = point2.y - point1.y;
        float distance = sqrt( dx*dx + dy*dy );
    
        // Calculate angle of segment
        float angle = atan2(dy, dx);
    
        // Rotate sprite to angle of next segment
        // You could also do this as part of the sequence (or CCSpawn actually) below
        // gradually as it approaches the next way point, but you would need the
        // angle of the line between the next and next next way point
        [mySprite setRotation: angle];
    
        CCTime segmentDuration = distance/speed;
    
        // Animate this segment, and afterward, call this function again
        CCAction *myAction = [CCSequence actions: 
              [CCMoveTo actionWithDuration: segmentDuration position: nextWayPoint], 
              [CCCallFunc actionWithTarget: self selector: @selector(gotoNextWayPoint)],
              nil];
    
        [mySprite runAction: myAction];
    }