ios - 如何在 spriteKit 中进行相机移动

标签 ios objective-c sprite-kit

我为物理主体尺寸为 0.0 的相机创建了一个 SKSpriteNode,以避免不必要的碰撞和一个世界节点:

    -(void)createSceneContents {

SKNode *world = [SKNode node];
world.name = @"world";
self.anchorPoint = CGPointMake(0.1, 0);
SKSpriteNode *camera = [SKSpriteNode spriteNodeWithColor:[UIColor redColor] size:CGSizeMake(300, 300)];
camera.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(0, 0)];
camera.physicsBody.affectedByGravity = NO;
camera.physicsBody.usesPreciseCollisionDetection = NO;
camera.physicsBody.categoryBitMask = noColisions;
camera.alpha = 0.5;
camera.zPosition = 1;
camera.name = @"cam";
[self addChild:world];
[world addChild:camera];

我尝试了一个小教程来在 spriteKit 平台游戏中添加相机,但我什至无法移动 View ,我不知道如何访问移动 View 的属性。有人知道我做错了什么吗? 这是我的代码:

-(void)didSimulatePhysics
{
    //I've tried with @"cam" and @"hero"
    [self centerOnNode: [self childNodeWithName:@"world"]];
}
-(void)centerOnNode:(SKNode *) camera {
    CGPoint cameraPositionInScene = [camera.scene convertPoint:camera.position fromNode:camera.parent];

    [self.parent setPosition:CGPointMake(
        camera.parent.position.x - cameraPositionInScene.x,
        camera.parent.position.y - cameraPositionInScene.y
    )];
}

最佳答案

在来自 Apple's Documentation 的示例中,您跟随的相机节点不是 SKSprite,它是 SKNode。我认为这会解决您的问题。

要回答标题中的问题,您实际上是在将世界节点附加到场景。在此节点内,放置了所有 Sprite 。作为世界节点的子节点,您可以为相机添加另一个节点。

这为您提供了三个不同的坐标系。想象一下,三张纸,最下面的一张是你的世界,即所有 Sprite 的图层。最上面是一张代表相机的小纸片。最重要的是,您有一个代表您的查看区域的透明框。

它的设置方式不可能移动顶部最透明的查看层。相反,您正在做的是移动位于世界层顶部的点,然后将世界层滑动到该点。

现在想象一下,在纸上场景中,这是一个只能左右移动的 2D 滚动世界。现在获取相机点并将其一直放置到查看区域的最右侧。现在,将世界层拖动到左侧,直到相机位于不可移动的查看区域的中心。这或多或少是正在发生的事情。

关于ios - 如何在 spriteKit 中进行相机移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20492862/

相关文章:

ios - objective-c: ScrollView 滚动到左右方向

iphone - ComboBox 在 UIScrollView 中不起作用

swift - SKPhysics 触点无法正常工作

ios - SKScene 如何与其容器 SKView 通信?

ios - Facebook 与 Xamarin.Social 的集成

ios swift - 如何在浏览应用程序时保持视频播放

iphone - 提交按钮的长度与 iPhone 模拟器中的输入字段的长度不同

javascript - 检测滑动手势 iOS - Cordova/Phonegap Javascript

objective-c - 不能从另一个类访问静态变量

Swift 音频播放速度