Wye*_*tro 7 objective-c ios uicollisionbehavior uikit-dynamics tvos
在iOS中9苹果推出了collisionBoundsType到UIKit-Dynamics.
设置此项UIDynamicItemCollisionBoundsTypeRectangle或将其设置为时,我没有任何问题UIDynamicItemCollisionBoundsTypeEllipse.
下面的屏幕截图来自我正在制作的游戏,其中collisionBoundsType玩家设置为矩形并且球被设置为椭圆:
但是,当我将玩家设置collisionBoundsType为路径时,我会看到奇怪的行为:
视图看起来比它应该高,碰撞体位于它应该的位置.
目前我已经collisionBoundingPath设定了这个:
- (UIBezierPath *)collisionBoundingPath
{
maskPath = [[UIBezierPath alloc] init];
[maskPath addArcWithCenter:CGPointMake(SLIME_SIZE, SLIME_SIZE) radius:SLIME_SIZE startAngle:0*M_PI endAngle:M_PI clockwise:NO];
return maskPath;
}
Run Code Online (Sandbox Code Playgroud)
另外,我的drawRect函数如下所示:
- (void) drawRect:(CGRect)rect
{
if (!_color){
[self returnDefualtColor];
}
if (!maskPath) maskPath = [[UIBezierPath alloc] init];
[maskPath addArcWithCenter:CGPointMake(SLIME_SIZE, SLIME_SIZE) radius:SLIME_SIZE startAngle:0*M_PI endAngle:M_PI clockwise:NO];
[_color setFill];
[maskPath fill];
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?如何将碰撞体的路径设置为与视图中的图形相同?
另外,红色只是视图的背景(即view.backgroundColor = [UIColor redColor];).
从 UIDynamicItem 的文档中,以下关于路径坐标系的陈述似乎代表了错误所在:
\n\n\n\n\n您创建的路径对象必须表示逆时针或顺时针缠绕的凸多边形,并且路径不得与自身相交。路径的 (0, 0) 点必须位于相应动态项的中心点。如果中心点与路径\xe2\x80\x99s 原点不匹配,碰撞行为可能无法按预期工作。
\n
这里它指出(0,0)路径必须是中心点。
我认为你的弧线路径的中心应该是(0,0)而不是(SLIME_SIZE/2,SLIME_SIZE/2)。您是否可能将 UIView 框架的宽度和高度设置为 SLIME_SIZE 而不是SLIME_SIZE*2?
SLIME_SIZE似乎确实定义了半径,所以框架宽度应该是SLIME_SIZE*2。如果它设置为SLIME_SIZE,那么这就解释了为什么您需要翻译为SLIME_SIZE/2作为更正。
| 归档时间: |
|
| 查看次数: |
1214 次 |
| 最近记录: |