web-dev-qa-db-fra.com

Rendre le fond d'un SKScene transparent ne fonctionne pas ... est-ce un bug?

Existe-t-il un moyen de rendre l'arrière-plan d'un SKScene transparent et de présenter cette scène au-dessus d'une autre en passant par la transparence.

L'idée est d'avoir le fond de la scène présentée comme ceci:

self.backgroundColor = [SKColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.5f];

ce qui permettrait de voir la scène derrière s'assombrir. Mais cela ne fonctionne pas. Le fond est présenté complètement opaque.

Y-a-t-il un moyen de faire ça?

35
SpaceDog

Dans iOS 8, vous pouvez définir le SKView de la scène pour autoriser la transparence et définir la couleur d'arrière-plan de la scène pour qu'elle soit transparente. Ensuite, des vues derrière le SKView seront visibles.

UIView *parentView = ...;
[parentView addSubview:backgroundView];
[parentView addSubview:skViewWithScene];
skViewWithScene.allowsTransparency = YES;
scene.backgroundColor = [UIColor clearColor];
[skViewWithScene presentScene:scene];
75
Jeremy Conkin

La transparence ne fonctionne que pour iOS 8, il faut vérifier pour iOS 7

Dans ViewController, définissez la transparence sur:

SKView *skView = (SKView *)self.mySKView;
SKScene *skScene = [MyScene sceneWithSize:skView.bounds.size];
skScene.scaleMode = SKSceneScaleModeAspectFill;
skView.allowsTransparency = YES;
[skView presentScene: skScene];

Dans MyScene.m, définissez l'arrière-plan comme couleur claire:

self.scene.backgroundColor = [UIColor clearColor];

7
user1802778

Swift 3

@IBOutlet var gameScene: SKView!

func setupGameScene(){

    if let scene = SKScene(fileNamed: "GameScene") {
        scene.scaleMode = .aspectFill
        scene.backgroundColor = .clear
        gameScene.presentScene(scene)
        gameScene.allowsTransparency = true
        gameScene.ignoresSiblingOrder = true
        gameScene.showsFPS = true
        gameScene.showsNodeCount = true
    }
}
5
Ahmed Safadi

Vous ne pouvez pas rendre la scène transparente. Si quelque chose vous voudrez rendre la vue transparente.

Cependant, vous ne pouvez pas exécuter deux scènes en même temps (en effectuant uniquement la transition entre elles), et bien que vous puissiez ajouter plusieurs SKView à une page Storyboards, seule une des vues sera mise à jour à pleine vitesse, les autres contenus figés ou changeants ne quelques secondes.

2
LearnCocos2D

Je pense que ce n'est pas possible, puisque j'ai tout essayé dans la mesure de mes connaissances, il continue d'ignorer la valeur alpha.

Ce qui n'est pas logique car il fonctionne au-dessus d'OpenGL, mais le SKView est sous-classé depuis UIView, pas depuis GLKView.

1
Kex