标签: sklightnode

SKLightNode投射阴影问题

我没有成功地让SKSpriteNode投射阴影,并且在从同一光源进入阴影时也会消失.我可以做到两个中的一个但不是两个.

根据文档:如果精灵位于由光投射的阴影内并且精灵的z位置低于光,则阴影会影响精灵的点亮方式.我所做的一切.我的SKLightNode的zPosition为100,所有其他节点的zPosition都较低.

我已经尝试了lightingBitMask,shadowCastBitMask和shadowedBitMask的任何和所有设置组合,但没有任何效果.

我发布了孤立的代码,重现了我的问题.蓝色的盒子投下阴影但没有被墙影覆盖.紫色的盒子没有阴影,被墙影覆盖.

灯光响应触摸运动,因此可以随意在屏幕上移动.该项目处于横向模式.

我错过了什么或没看到什么?

#import "GameScene.h"

@implementation GameScene {
    SKSpriteNode *lightBulb;
}

-(void)didMoveToView:(SKView *)view {

    typedef NS_OPTIONS(uint32_t, Level1LightCategory)
    {
        CategoryLightPlayer            = 1 << 0,
    };

    SKSpriteNode *worldNode = [SKSpriteNode spriteNodeWithColor:[SKColor clearColor] size:CGSizeMake(1136, 640)];
    worldNode.zPosition = 10;
    //worldNode.position = CGPointMake(self.size.width/2, self.size.height/2);
    [self addChild:worldNode];

    lightBulb = [SKSpriteNode spriteNodeWithColor:[SKColor yellowColor] size:CGSizeMake(20, 20)];
    lightBulb.zPosition = 100;
    lightBulb.position = CGPointMake(50, 50);
    [worldNode addChild:lightBulb];

    SKLightNode *light = [[SKLightNode alloc] init];
    //light.zPosition = 100; // <- tried setting this again but to no …
Run Code Online (Sandbox Code Playgroud)

shadow sprite-kit skspritenode sklightnode

7
推荐指数
1
解决办法
1795
查看次数

SKLightNode性能问题

我一直在使用SKLightNodeSpriteKit(iOS8中的新功能)进行实验,即使是在一个非常简单的测试用例中,我的性能也非常糟糕.例如,在纯色单个光源上,我在第3代iPad上获得13.2 FPS.如果我添加第二个光源,它会下降到一个非常糟糕的7.7 FPS.SKSpriteNode

WWDC会话视频SpriteKit的新功能提到如果你在同一个精灵上有多个灯光,你可能会得到低于60 FPS,但我甚至不能得到60 FPS.这是相关部分.

这是我在swift中的测试场景(它从一个光源开始,可以通过点击添加更多):

class GameScene: SKScene {
    override func didMoveToView(view: SKView) {
        let center = CGPointMake(size.width / 2.0, size.height / 2.0)

        let background = SKSpriteNode(color: SKColor.lightGrayColor(), size: size)
        background.position = center
        background.lightingBitMask = 1
        addChild(background)

        let light = SKLightNode()
        light.position = center
        light.falloff = 1.0
        light.lightColor = SKColor(hue: 0.62 , saturation: 0.89, brightness: 1.0, alpha: 0.4) …
Run Code Online (Sandbox Code Playgroud)

ios sprite-kit swift ios8 sklightnode

6
推荐指数
1
解决办法
1987
查看次数

SKSpriteNode照明不适用于SKTextureAtlas的纹理

我遇到了SpriteKit的问题(在OS X 10.11 beta上尝试过Xcode 7 beta和Xcode 6.4),如果我从图像创建SKTextureAtlas并且单独使用时可以正常工作的普通文件,那么法线贴图会崩溃.看这个例子:

在此输入图像描述

从左到右:

  • 具有纹理+正常+光照的精灵(来自atlas的纹理)
  • 纹理+正常的精灵(来自atlas的纹理)
  • 带纹理的精灵(来自atlas的纹理)
  • 具有正常纹理的精灵(来自atlas的纹理)
  • 具有纹理+正常+光照的精灵(通过imageNamed从单个文件创建的纹理:)

该图集是在运行时使用SKTextureAtlas atlasWithDictionary创建的:它包含以下纹理:

creating atlas with files: {
    "shield-normal.png" = "shield-normal.png";
    "shield.png" = "shield.png";
    "swords-normal.png" = "swords-normal.png";
    "swords.png" = "swords.png";
}
Run Code Online (Sandbox Code Playgroud)

注意:如果我在Xcode中创建Atlas并通过atlasNamed加载它,我会得到完全相同的问题: - 所以问题肯定不在于如何或何时创建地图集,而是因为纹理是从第一个地图集中获得的地点.

如果我使用单个文件创建精灵,则照明工作(最右边的图像):

tex = [SKTexture textureWithImageNamed:@"shield.png"];
normal = [SKTexture textureWithImageNamed:@"shield-normal.png"];
test2 = [SKSpriteNode spriteNodeWithTexture:tex normalMap:normal];
test2.position = CGPointMake(580, 400);
test2.lightingBitMask = 0xffffffff;
[self addChild:test2];
Run Code Online (Sandbox Code Playgroud)

我对atlas文件执行完全相同的操作,上面的屏幕截图证明我确实为精灵纹理获取了正确的图像(左起第3和第4个),并且从图集中获得正常的纹理.然而结果是左边的第一个图像,一个没有法线贴图的点亮的精灵.

我想知道,普通纹理是否需要一种SKTextureAtlas不适用的后处理形式?或者其他人在地图集中是否有正常纹理问题?

或许这可能是一个错误?


更新:我已在一个新的SpriteKit应用程序(OS X,在此下载并自行尝试)中使用以下代码重现此行为:

-(void)didMoveToView:(SKView *)view {
    SKLightNode* light = [SKLightNode node];
    light.position = CGPointMake(0, …
Run Code Online (Sandbox Code Playgroud)

lighting bump-mapping sprite-kit sktextureatlas sklightnode

6
推荐指数
0
解决办法
547
查看次数

如何在 iOS 中增加 SKLightNode 的大小

我正在使用 SKLightNodes 并尝试让一个物体(太阳)照亮它周围的任何东西。问题是,当我将 SKLightNode 添加到太阳节点时,SKLightNode 仅出现在太阳的正中心。我尝试过缩放 SKLightNode,但它似乎对 SKLightNode 的大小或范围没有影响。以下是 SKLightNode 的实现方式。

  let light = SKLightNode()
                light.categoryBitMask = 1;
                light.falloff = 1;
                light.ambientColor = UIColor.whiteColor();
                light.setScale(50)
                star!.addChild(light)
Run Code Online (Sandbox Code Playgroud)

如果有人对我如何提高光源的效率有任何意见,我肯定会很感激。

ios swift sklightnode

5
推荐指数
1
解决办法
874
查看次数