调整大小时如何调整子节点的大小以适合 SKSpriteNode 的大小?

Posted

技术标签:

【中文标题】调整大小时如何调整子节点的大小以适合 SKSpriteNode 的大小?【英文标题】:How to resize the child node fit inside SKSpriteNode when resizing? 【发布时间】:2015-08-10 06:20:02 【问题描述】:

我正在为我的游戏创建一个虚拟游戏手柄,它有一个带有圆形图像的主 SKSpriteNode 和四个带有图像的子节点(上、下、左、右)。当我使用默认大小时,它看起来很完美,但它的大小很大,当我尝试调整主圆 SKSpriteNode 的大小时,它的所有子节点都比它的父节点大,我无法计算适合每个人的子节点的大小条件(主节点大小不同)。

-(id)initWithJoystickImage:(NSString *)baseImage
                   upImage:(NSString *)upImage downImage:(NSString *)downImage leftImage:(NSString *)leftImage rightImage:(NSString *)rightImage

    if((self = [super initWithImageNamed:baseImage]))
    
        SKSpriteNode *up = [[SKSpriteNode alloc] initWithImageNamed:upImage];
        up.position = CGPointMake(0, up.frame.size.height/2);
        [self addChild:up];

        SKSpriteNode *down = [[SKSpriteNode alloc] initWithImageNamed:downImage];
        down.position = CGPointMake(0, -down.frame.size.height/2);
        [self addChild:down];

        SKSpriteNode *right = [[SKSpriteNode alloc] initWithImageNamed:rightImage];
        right.position = CGPointMake(right.frame.size.width/2, 0);
self.size.height/2.5);
        [self addChild:right];

        SKSpriteNode *left = [[SKSpriteNode alloc] initWithImageNamed:leftImage];
        left.position = CGPointMake(-left.frame.size.width/2, 0);
 self.size.height/2.5);
        [self addChild:left];
    
    return self;

使用默认尺寸时

根据设备大小调整大小时

编辑1:添加操纵杆和调整大小代码

Joystick *joystick = [[Joystick alloc] initWithJoystickImage:@"cricle.png" upImage:@"up.png" downImage:@"down.png" leftImage:@"left.png" rightImage:@"right.png"];
    joystick.size=CGSizeMake(DeviceHeight/3, DeviceHeight/3);
    joystick.position=CGPointMake(DeviceWidth/2-joystick.frame.size.width/2, -DeviceHeight/2+joystick.frame.size.height/2);

【问题讨论】:

如何调整节点的大小? [SKAction scaleTo]? 【参考方案1】:

您只需更改父节点的大小 (joystick)。这将一起调整您的父节点和子节点的大小:

[joystick runAction:[SKAction scaleTo:2.0/3.0 duration:0.0]];  // Change scale value

【讨论】:

scaleTo:2/3 不起作用,但 scaleTo:.5 确实起作用,但是当缩放它的位置时也会发生变化,我不希望这样 @VarunNaharia 我的错,刻度应该是浮点数。您是否更改了操纵杆的锚点?如果锚点为(0.5, 0.5),则会从中心缩放,所以位置不会改变。

以上是关于调整大小时如何调整子节点的大小以适合 SKSpriteNode 的大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何调整 UIScrollView 的大小以适合子 UITextViews 的内容

如何调整 CTabCtrl 的大小以适合其内容

当添加子选项卡时,如何使 qtabwidget 实例自动调整大小?

使用故事板时需要以编程方式调整子视图的大小?

子节点的 JavaFX GridPane 动态调整大小以填充分配的区域

如何调整 UIView 的大小以获取大量 UILabel 并调整 UILabel 的大小以适合文本?