我为物理主体尺寸为 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/