Xcode,SpriteKit:旋转整个场景,编辑数组内精灵的属性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Xcode,SpriteKit:旋转整个场景,编辑数组内精灵的属性相关的知识,希望对你有一定的参考价值。
我正在使用Xcode,SpriteKit来创建游戏。 2个问题:
1)每当调用函数时我都需要旋转整个场景:
- (void)mouseClick {
// RotateWholeScene somehow
}
我知道通过改变它的zrotation旋转精灵,但改变scene.zrotation不起作用。
此外,场景中的某些东西需要保持在相同的位置,如得分等。
我更喜欢它,如果有一种方法可以旋转整个场景,就像摄像机视图已经改变一样,因为有计算(如坠落的物体),如果不需要改变它们会更容易做在代码中。
2)现在程序每帧都创建一个精灵,并将精灵放入一个数组(我在开始时声明)。
NSMutableArray *SomeArray = [NSMutableArray arrayWithObjects: nil];
后来在代码中:
- (void)CalledEachFrame {
[self addChild: SomeSprite];
[SomeArray addObject: SomeSprite];
}
在代码的其他地方,我需要:
- (void)AlsoCalledEachFrame {
for (int i; i < X; i++) {
SomeArray[i].position = A;
}
}
这(和其他几个尝试)不起作用,我收到一个错误:
***编辑:我的坏。在图像中,我展示了,我将位置设置为整数而不是CGPoint。然而,即使我放了CGPoint而不是那些99,也会出现同样的错误。
你在这里一次问两个问题。我应该劝阻这一点。不过,这里有:
1)我遇到了类似的问题,我对这个问题的解决方案是将场景节点和hud节点分别放在SKScene子类的单独子节点中,如下所示:
@interface SKSceneSubclass : SKScene
// ...
@property (strong, nonatomic, readonly) SKNode *sceneContents;
@property (strong, nonatomic, readonly) SKNode *hud;
@end
在场景初始化器中,我将:
- (instancetype)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
self.sceneContents = [SKNode new];
[self addChild:self.sceneContents];
self.hud = [SKNode new];
[self addChild:self.hud];
self.hud.zPosition = 20.f; // ensures the hud on top of sceneContents
// your custom stuff
// ...
}
return self;
}
这要求您决定添加子节点哪个节点(sceneContents或hud)将是其父节点。
[self.sceneContents addChild:newSprite];
[self.hud addChild:someCoolHudButton];
然后,您可以在sceneContents节点上运行[SKAction rotateByAngle:angle duration:duration]
。 hud及其子女不会受到影响。我目前正在使用这种方法来移动和缩放sceneContents,同时拥有一个行为正常的静态HUD。
2)问题是您没有告诉编译器您正在访问的项目是SKNode对象,因此编译器不允许您访问position
属性。如果您确定只有数组只包含SKNodes或其子类,请使用forin
迭代器方法。
for (<#type *object#> in <#collection#>) {
<#statements#>
}
在你的情况下,它看起来像这样。
CGPoint newPosition = CGPointMake(x, y);
for (SKNode *node in SomeArray) {
node.position = newPosition;
}
您可以使用以下代码手动旋转视图:
CGAffineTransform transform = CGAffineTransformMakeRotation(-0.1); // change value to desires angle
self.view.transform = transform;
以上是关于Xcode,SpriteKit:旋转整个场景,编辑数组内精灵的属性的主要内容,如果未能解决你的问题,请参考以下文章
Sprite Kit 场景编辑器 GameScene.sks 场景宽度和高度
SpriteKit .sks文件在分配纹理时崩溃Xcode 10
子类化使用 SpriteKit .sks 场景文件创建的 SKNode