Tôi đã không thành công trong việc có được một SKSpriteNode để đúc một bóng và cũng được thực hiện để biến mất khi đi vào một bóng tối từ cùng một nguồn ánh sáng. Tôi có thể làm một trong hai nhưng không phải cả hai.SKLightNode đổ bóng vấn đề
Theo tài liệu: Nếu sprite nằm trong bóng đổ bởi ánh sáng và sprite có vị trí z thấp hơn ánh sáng, bóng sẽ ảnh hưởng đến cách sprite sáng. Tất cả những gì tôi đã làm. SKLightNode của tôi có zPosition là 100 và tất cả các nút khác có zPosition thấp hơn.
Tôi đã thử bất kỳ và tất cả các kết hợp cài đặt cho chiếu sángBitMask, shadowCastBitMask và shadowedBitMask nhưng không có gì hoạt động.
Tôi đang đăng mã bị cô lập tái tạo sự cố của tôi. Hộp màu xanh tạo thành một cái bóng nhưng không bị che phủ bởi bóng của bức tường. Hộp màu tím không có bóng và được bao phủ bởi bóng tường.
Đèn phản ứng với cử động chạm để cảm thấy tự do di chuyển xung quanh màn hình. Dự án đang ở chế độ ngang.
Tôi đang thiếu gì hoặc không thấy?
#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 effect
light.categoryBitMask = CategoryLightPlayer;
light.falloff = 0.3;
light.ambientColor = [UIColor whiteColor];
light.lightColor = [[UIColor alloc] initWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];
light.shadowColor = [[UIColor alloc] initWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
[lightBulb addChild:light];
SKSpriteNode *wall = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(10, 300)];
wall.zPosition = 50;
wall.position = CGPointMake(500, 200);
wall.lightingBitMask = CategoryLightPlayer;
wall.shadowCastBitMask = CategoryLightPlayer;
wall.shadowedBitMask = 0x00000000;
[worldNode addChild:wall];
SKSpriteNode *box0 = [SKSpriteNode spriteNodeWithColor:[SKColor blueColor] size:CGSizeMake(30, 30)];
box0.zPosition = 40;
box0.position = CGPointMake(800, 200);
box0.lightingBitMask = CategoryLightPlayer;
box0.shadowCastBitMask = CategoryLightPlayer;
box0.shadowedBitMask = CategoryLightPlayer;
[worldNode addChild:box0];
SKSpriteNode *box1 = [SKSpriteNode spriteNodeWithColor:[SKColor purpleColor] size:CGSizeMake(30, 30)];
box1.zPosition = 40;
box1.position = CGPointMake(800, 300);
box1.lightingBitMask = CategoryLightPlayer;
//box1.shadowCastBitMask = CategoryLightPlayer;
//box1.shadowedBitMask = CategoryLightPlayer;
[worldNode addChild:box1];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint touchLocation = [touch locationInNode:self.scene];
lightBulb.position = touchLocation;
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint touchLocation = [touch locationInNode:self.scene];
lightBulb.position = touchLocation;
}
-(void)update:(CFTimeInterval)currentTime {
//
}
@end
Tôi đã thử nghiệm điều này bằng Xcode 8.3.2 và dường như đã được sửa. Tôi đặt mã của bạn vào một dự án mẫu và đúc một bóng từ bức tường trên hộp màu xanh ẩn nó như mong đợi. Hộp màu xanh dương vẫn tạo ra cái bóng của chính nó khi không được che phủ bởi bóng của bức tường. Có lẽ điều này đã được sửa trong bản cập nhật SK gần đây hoặc có thể tôi hiểu nhầm vấn đề của bạn. – Jonathan