【问题标题】:Cocos2D CCNode position in absolute screen coordinatesCocos2D CCNode 在屏幕绝对坐标中的位置
【发布时间】:2011-04-23 19:52:51
【问题描述】:

我已经四处寻找了一段时间,但由于某种原因我无法找到答案。看起来很简单,但也许我只是在库中找不到合适的函数。

我有一个包含一堆 CCNode 的层的场景,其中每个 CCSprite 都在其中。

在应用程序期间,我围绕主图层的位置移动,以便以某种方式围绕相机“平移”。 (即我翻译整个图层以便视口发生变化)。

现在我想确定 CCNode 在屏幕坐标中的绝对位置。 position 属性返回相对于父节点的位置,但我真的希望将其转换为它在屏幕上的实际位置。

另外,作为一个额外的好处,如果我可以将此位置表示为坐标系,其中 0,0 映射到屏幕的左上角,而 1,1 映射到屏幕的右下角,那就太棒了。 (所以我与所有设备保持兼容)

编辑:请注意,该解决方案最好适用于 CCNode 的任何层次结构。

【问题讨论】:

    标签: iphone objective-c cocos2d-iphone


    【解决方案1】:

    每个 CCNode 及其后代都有一个名为 convertToWorldSpace:(CGPoint)p 的方法

    这将返回相对于您的场景的坐标。

    获得此坐标后,翻转 Y 轴,因为您希望 0,0 位于左上角。

    CCNode * myNode = [[CCNode alloc] init];
    myNode.position = CGPointMake(150.0f, 100.0f);
    
    CCSprite * mySprite = [[CCSprite alloc] init]; // CCSprite is a descendant of CCNode
    [myNode addChild: mySprite];
    mySprite.position = CGPointMake(-50.0f, 50.0f);
    
    // we now have a node with a sprite in in. On this sprite (well, maybe
    // it you should attack the node to a scene) you can call convertToWorldSpace:
    CGPoint worldCoord = [mySprite convertToWorldSpace: mySprite.position];
    
    // to convert it to Y0 = top we should take the Y of the screen, and subtract the worldCoord Y
    worldCoord = CGPointMake(worldCoord.x, ((CGSize)[[CCDirector sharedDirector] displaySizeInPixels]).height - worldCoord.y);
    
    // This is dry coded so may contain an error here or there.
    // Let me know if this doesn't work.
    
    [mySprite release];
    [myNode release];
    
    

    【讨论】:

    • 啊,太棒了。我自己几乎到了那里,但愚蠢的错误:没有占据精灵本身的位置,而是占据了不起作用的节点的位置。显然。但这很棒,因为它还考虑了缩放等。伟大的。给你五颗星。
    • CCDirector 在 cocos2d 的最新版本中没有 displaySizeInPixels。有什么解决办法吗? (找到winSizeInPixels,可能是它。)
    • 我知道这是旧的,但我得到一个 worldCoord = (50, 200)(第 6 行)是否正确?我希望 worldCoord = (100, 150)。当我逐步完成时,我看到 tx = 100,并且 ty = 150 作为变换......轴被切换了?我错过了什么明显的东西吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多