fuz*_*oat 36 ios7 sprite-kit sknode
我对SKNode方法convertPoint:fromNode:和convertPoint:ToNode:工作方式感到有些困惑,我看过文档,但不是很明显他们做了什么.例如,这个(见下图)是我用过的一个小测试convertPoint:fromNode:.黑色区域是SKScene背景,蓝色区域是一个SKSpriteNode父级SKScene,红色区域是另一个SKSpriteNode蓝色精灵的父级.两个精灵的锚点由小绿点表示.我想要做的是获取红色精灵的场景位置,我使用以下代码完成:
CGPoint positionInScene = [self convertPoint:[self position]
fromNode:[self redSprite]];
Run Code Online (Sandbox Code Playgroud)
结果是这样的
positionInScene = [105, 205]
Run Code Online (Sandbox Code Playgroud)
这是我所期望的,因为那将是场景空间中红色方块的起源.我很困惑的是争论.根据我的猜测:
[SKNode_A convertPoint: CGPoint_B toNode: SKScene_C]
Run Code Online (Sandbox Code Playgroud)
我最初的尝试是[self convertPoint:[redSprite position] fromNode:redSprite]因为我想将红色精灵原点转换为场景.如果有人能在这个和它的朋友身上投入一点点光明和逻辑,convertPoint:toNode:那将会非常感激,这似乎有点笨拙.

小智 49
这基本上是这样说:将在另一个节点的坐标系中表示的点转换为调用者的(自身)坐标系.关键是必须在节点的坐标系中表达该点才能使其工作.如果使用精灵的位置作为点,则需要将精灵的父节点作为最后一个参数传递.
示例:要获取场景坐标系中红色方块的位置:
CGPoint positionInScene = [self convertPoint:[redSprite position]
fromNode:[self blueSprite]];
Run Code Online (Sandbox Code Playgroud)
[5,5]在blueSprite的坐标系中 - > [ 105,205 ]在场景的坐标系中
你的例子:
CGPoint positionInScene = [self convertPoint:[self position]
fromNode:[self redSprite]];
Run Code Online (Sandbox Code Playgroud)
redSprite坐标系中的[0,0] - > 场景坐标系中的[ 105,205 ]
您最终得到了代码中的相同结果,只是因为[self position]是[0,0]并且您使用了redSprite的坐标系.你的初始尝试很接近,你只需要提供redSprite的位置表示的坐标系,这是父精灵的坐标系; 在这种情况下,那是blueSprite.
这种方法与第一种方法完全相反.它会将调用者坐标系中的一个点转换为另一个节点的坐标系.这种方法的关键是给定的点必须在调用者的坐标系中表示.
示例:假设您的场景在[ 125,225 ]处收到了触摸,并且您想在该位置添加一个新的精灵,它恰好位于redSprite的边界框内.因此,要添加一个新的精灵作为redSprite的子项,您需要在redSprite的坐标系中获取触摸的位置.为此:
CGPoint positionInRedSprite = [self convertPoint:touchLocation
toNode:[self redSprite]];
Run Code Online (Sandbox Code Playgroud)
[ 125,225 ]在场景的坐标系中 - > [20,20]在redSprite的坐标系中
| 归档时间: |
|
| 查看次数: |
6495 次 |
| 最近记录: |