0

次のようなノードツリーがあります。

LayerWorld
     -> layerBackground  //contains the map tiles
     -> layerUnitSurface //contains all the sprite nodes moving around the map
     -> layerOverlay     //contains the huds, UI buttons etc

関連するかどうかはわかりませんが.zPosition、次の定義に従って使用して、いくつかのオブジェクトの配置も制御します。

#define UNITLAYER_ZPOS_PASSENGER    -10
#define UNITLAYER_ZPOS_GHOST        001
#define UNITLAYER_ZPOS_BACK         050
#define UNITLAYER_ZPOS_CITY         100
#define UNITLAYER_ZPOS_FRONT        200
#define UNITLAYER_ZPOS_SMOKE        300
#define UNITLAYER_ZPOS_BLAST        400
#define UNITLAYER_ZPOS_HUD          500
#define UILAYER_ZPOS_BUTTONS        1000

ユーザーが特定のスプライトに注目している特定の「検査」モードで、ビューを強調表示したいと考えています。このユニットは と呼ばれ、reconSpriteに追加されlayerUnitSurfaceます。スプライトのすぐ近くを除いて、背景マップ全体を暗くしたい。SKLightNode照らされたキャラクターが暗いダンジョンを動き回る様子を示す例は、まさに私が探しているものです。

どのレイヤーにもライティングの変化が見られないため、ライト ノードを正しく適用していないようです。ただし、何が間違っているのかわかりません。

layerBackground.lightingBitMask = 1;
layerBackground.shadowCastBitMask = 0;
layerBackground.shadowedBitMask = 1;

SKLightNode *intelLightSource = [[SKLightNode alloc] init];
intelLightSource.categoryBitMask = 1;
intelLightSource.falloff = 0.5;
intelLightSource.ambientColor = [SKColor colorWithRed:0.3 green:0.3 blue:0.3 alpha:0.25];
intelLightSource.lightColor = [SKColor colorWithRed:0.8 green:0.8 blue:0.4 alpha:0.8];
intelLightSource.shadowColor = [SKColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.9];

intelLightSource.zPosition = UNITLAYER_ZPOS_SMOKE;
intelLightSource.position = reconSprite.position;
[layerWorld addChild:intelLightSource];

これにより、マップ全体がぼんやりと表示され、明るい領域がreconSprite.position. しかし、目に見える変化はありません。シーン全体が完全に照らされたままです。

一時的に追加すると、光源が存在することがわかります。

reconSprite.lightingBitMask = 1;
reconSprite.shadowCastBitMask = 1;
reconSprite.shadowedBitMask = 1;

reconSprite が明るくなり、黒い影ができます。

質問:全体ではなく全体にSKLightNode影響を与えているのはなぜですか?reconSpritelayerBackground

4

1 に答える 1