所以我有一个SKSpriteNode,它应该从屏幕中间拖动,放开,然后顺利地流到最近的角落(或者更确切地说,距离最近的角落每个轴上10个点)。
我使用的方法应该返回一个CGPathRef
,其原点位于节点的位置,以所提供的角度开始(节点偏离中心),然后向末端弯曲,结束于结束角(所有相对于节点的位置...),用于在用户的拖动和程序的拖动完成之间平滑过渡。方法如下:
-(CGPathRef)createPathToEndpoint:(int)end from:(CGPoint)start atAngle:(float)Angle{
UIBezierPath *path = [[UIBezierPath alloc]init];
[path moveToPoint:CGPointZero];
//Code to set up endPoint
CGPoint translatedEndPoint = CGPointMake(endPoint.x-start.x, endPoint.y-start.y);
CGPoint cP1;
/*
Code here to set cP1 for desired path attributes.
Not included for simplicity's sake, because what really seems to be the issue is
translatedEndPoint not seeming correct.
*/
[path addQuadCurveToPoint:translatedEndPoint controlPoint:cP1];
CGPathRef newPath = [path CGPath];
return newPath;
}
SKSpriteNode
通过以下代码遵循该路径:
CGPathRef rollPath = [self createPathToEndpoint:section
from:[touch locationInNode:self]
atAngle:angle];
NSTimeInterval timeMove = MIN((timePassed/[self distanceBetween:mainBall.position and:middle])*100,1);
SKAction *move = [SKAction followPath:rollPath
asOffset:YES
orientToPath:NO
duration:timeMove];
但是当代码运行时,精灵通常会在距离终点一定距离的地方结束,甚至可以从一对夫妇到可能超过30分的距离。是什么赋予了?
答案 0 :(得分:1)
当我打字这个问题时,最后,我看到了我的问题。我已经在程序中修复了它,但我认为可能会与社区分享其他人有同样问题的机会。 (因为我不希望这种打字浪费掉)
这里说:即使节点被告知在手指离开后开始跟随曲线,参考手指离开的位置(位置[touch locationInNode: self]
),节点的位置可能与触摸的位置略有不同即使-(void)touchesMoved
方法尝试将节点保持在指尖,也可以使用位置。
所以简单的解决方法是改变这一行:
CGPathRef rollPath = [self createPathToEndpoint:section
from:[touch locationInNode:self]
atAngle:angle];
到此:
CGPathRef rollPath = [self createPathToEndpoint:section
from:mainBall.location
atAngle:angle];
再次,简单的菜鸟错误回顾它,但是,嘿,我不能成为这里唯一的菜鸟,希望这能帮助别人!