Spritekit场景锚点影响子节点的位置

乌伯斯纳克

我创建了我的SKScene子类,该子类设置了锚点,然后为该世界添加了一个SKSpriteNode,该世界有多个用于障碍物,玩家等的SKSpriteNodes。我也将重点放在

我遇到的问题是,当我将场景的锚点设置为(0.5,0.5)时,我添加到世界上的任何子节点的位置都始于世界的中心。如何固定节点的位置,以便position =(0,0)将位于world节点的左下角,并向其中添加任何子节点而不是中心?

@implementation LevelScene

-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {

    NSLog(@"width:%f height:%f", self.view.bounds.size.width, self.view.bounds.size.height);


    // set the physics body
    self.physicsWorld.gravity = CGVectorMake(0,-5);
    self.physicsWorld.contactDelegate = self;
    self.anchorPoint = CGPointMake(0.5, 0.5);

    NSMutableDictionary *plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"LevelScene" ofType:@"plist"]];
    NSString *backgroundImage = [plistDict objectForKey:@"background"];

    // add a node that holds the background
    background = [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImageNamed:backgroundImage] size:CGSizeMake(1024, 768)];
    background.position = CGPointMake(0, 0);
    [self addChild:background];

    world = [SKSpriteNode spriteNodeWithColor:[SKColor brownColor] size:CGSizeMake(1024, 768)];
    world.position = CGPointMake(0, 0); // this should be bottom-left
    world.size = CGSizeMake(1024, 768);
    world.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:world.frame];
    world.physicsBody.categoryBitMask = worldCategory;
    [self addChild:world];

    // load in the game tiles (these are non-dynamic tiles the player can use)
    [self loadInTiles];

    // add in game object to the world skspritenode - this just creates a subclass of skspritenode and sets position to 0,0
    [self addGameObject:CGPointMake(0, 0)];

...
}

// ...setup functions, input handling, etc

-(void)didSimulatePhysics {

    // setup the player to move depending on their direction
    [player updatePosition];

    [self centreOnNode:player];
}

-(void)centreOnNode: (SKSpriteNode *)node {
    CGPoint cameraPositionInScene = [node.scene convertPoint:node.position fromNode:node.parent];

    CGFloat x = node.parent.position.x - cameraPositionInScene.x;
    CGFloat y = node.parent.position.y - cameraPositionInScene.y;
    NSLog(@"camera x:%f y:%f", x, y);

    NSLog(@"world frame origin x:%f y:%f", world.frame.origin.x, world.frame.origin.y);

    node.parent.position = CGPointMake(x, y);
}
泽蒙

如果要将世界精灵的原点设置在左下角,只需将其设置为锚点即可。

world.anchorPoint = CGPointMake(0,0);

这样,世界精灵的坐标系将与场景默认坐标系一样。

确保删除该行:

self.anchorPoint = CGPointMake(0.5, 0.5);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SpriteKit-更改节点上的锚点会更改所有子节点的位置

来自分类Dev

Swift:Spritekit:切换场景(锚点?)

来自分类Dev

使用ARKit锚点放置RealityKit场景

来自分类Dev

如何防止子div中的锚点链接影响主网址?

来自分类Dev

HTML锚点-位置错误

来自分类Dev

让我的粒子在SpriteKit中甚至在子节点中也让场景中的运动轨迹移动

来自分类Dev

固定标头影响锚点

来自分类Dev

如何控制锚点降落位置

来自分类Dev

jsPlumb-如何获取锚点的位置

来自分类Dev

如何控制锚点降落位置

来自分类Dev

仅更改锚点而不更改位置

来自分类Dev

jQuery滚动和锚点初始位置

来自分类Dev

替换锚点之间的子串

来自分类Dev

节点在场景中的位置

来自分类Dev

iOS spriteKit子节点相对于视图坐标的位置

来自分类Dev

SpriteKit Swift 2.0游戏:跨多个场景的按钮和节点

来自分类Dev

SpriteKit-节点微调位置

来自分类Dev

节点树中的 SpriteKit 精灵位置

来自分类Dev

如何使物理物体粘在节点的锚点上

来自分类Dev

jQuery菜单锚点onBlur事件禁用Div子锚点

来自分类Dev

在SpriteKit SWIFT中获取SKReferenceNode的子节点

来自分类Dev

滚动到固定标题的锚点位置

来自分类Dev

RealityKit是否可以为对象提供基于位置的锚点?

来自分类Dev

jQuery滚动到锚点页面上的位置

来自分类Dev

自动HTML页面刷新以保持滚动位置,并使用锚点

来自分类Dev

旋转 QML 文本:带有基线锚点的位置

来自分类Dev

具有指定锚点的动态列位置

来自分类Dev

jQuery在子元素中查找并替换锚点

来自分类Dev

保持旋转场景节点,直到设备回到起始位置