Objective c 使用alpha对PNG图像进行SKBlendModeMultiply
我对SpriteKit有意见。我有一个Objective c 使用alpha对PNG图像进行SKBlendModeMultiply,objective-c,sprite-kit,Objective C,Sprite Kit,我对SpriteKit有意见。我有一个.png,它是我的角色的阴影,是一个SKSpriteNode图像。当我将模式设置为SKBlendModeMultiply时,它将图像中的alpha视为黑色,使整个图像成为黑色正方形 有人知道如何解决这个问题吗?甚至当你同时将SKEmitterNode中的粒子设置为SKBlendNodeMultiply时,这种情况似乎也会发生。你遇到的问题是,如果你使用的图像带有内置alpha(如下面的苹果太空船或我的UFO),你就没有使用正确的混合模式您不需要将混合模式指定
.png
,它是我的角色的阴影,是一个SKSpriteNode
图像。当我将模式设置为SKBlendModeMultiply
时,它将图像中的alpha视为黑色,使整个图像成为黑色正方形
有人知道如何解决这个问题吗?甚至当你同时将
SKEmitterNode
中的粒子设置为SKBlendNodeMultiply
时,这种情况似乎也会发生。你遇到的问题是,如果你使用的图像带有内置alpha(如下面的苹果太空船或我的UFO),你就没有使用正确的混合模式您不需要将混合模式指定为[sprite setBlendMode:SKBlendModeAlpha]的默认值代码>对于嵌入alpha的图像是正确的
使用的图像
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
self.backgroundColor = [SKColor redColor];
}
return self;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
for (UITouch *touch in touches) {
CGPoint location = [touch locationInNode:self];
SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"TEST_0001"];
//[sprite setBlendMode:SKBlendModeAlpha]; // Default value
sprite.position = location;
SKAction *action = [SKAction rotateByAngle:M_PI duration:1];
[sprite runAction:[SKAction repeatActionForever:action]];
[self addChild:sprite];
}
}
尝试删除行[sprite setBlendMode:SKBlendModeMultiply];在您的代码中,或将其替换为[sprite setBlendMode:SKBlendModeAlpha];以获得正确的结果。这是我使用的代码
使用的代码
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
self.backgroundColor = [SKColor redColor];
}
return self;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
for (UITouch *touch in touches) {
CGPoint location = [touch locationInNode:self];
SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"TEST_0001"];
//[sprite setBlendMode:SKBlendModeAlpha]; // Default value
sprite.position = location;
SKAction *action = [SKAction rotateByAngle:M_PI duration:1];
[sprite runAction:[SKAction repeatActionForever:action]];
[self addChild:sprite];
}
}
以及模拟机显示comp的屏幕梯度
模拟器
您是否检查了alpha是否正确,我一直在使用alpha图像(在MODO中渲染),没有任何问题。你能发布一个你正在使用但不起作用的图像吗?请发布你正在使用的代码和一个指向你正在使用的图像的链接。否则,我们无法帮助您诊断问题,因为这里没有足够的信息。一个非常快速的测试方法是创建一个新的Sprite工具包项目。我所做的只是在SKSpriteNode*sprite=[SKSpriteNode SpriteNode spriteNodeWithImageNamed:@“Spaceship”之后加上一行:“[sprite setBlendMode:SKBlendModeMultiply]”;这是整个方法的图片:这是我得到的结果图片,我将背景颜色改为白色,以更好地显示问题