我创建了一个SKSpriteNode,如下所示:
//Easy Button Image
_easyImage = [[SKSpriteNode alloc]initWithImageNamed:@"smiley.png"];
_easyImage.position = CGPointMake(-20,screenHeight / 2);
_easyImage.name = easyBtnName;
_easyImage.physicsBody.affectedByGravity = NO;
_easyImage.zPosition = 10;
[self addChild:_easyImage];
我试图在触摸开始方法中点击后对图像进行着色。我有一个对SKSpriteNode属性的引用,所以一旦我看到它被单击,我执行此代码
SKAction *pulseRed = [self colorizeChoosenSpriteNodeWithColor:[SKColor redColor]];
[_easyImage runAction: pulseRed];
参考此方法
-(SKAction*)colorizeChoosenSpriteNodeWithColor:(SKColor*)color
{
SKAction *changeColorAction = [SKAction colorizeWithColor:color colorBlendFactor:1.0 duration:0.3];
SKAction *waitAction = [SKAction waitForDuration:0.2];
SKAction *selectAction = [SKAction sequence:@[changeColorAction, waitAction]];
return selectAction;
}
但是,我的图像颜色永远不会改变。我可以完全改变图像的纹理,但我不能只改变颜色。
编辑:我删除了一些分散注意力的代码。我调试了代码,它肯定正确执行,但我没有得到预期的结果。
更新:颜色出现在我发现的图像下方。
左侧图片显示缺失图像,右侧图片显示正确图像。仅在未显示图像时才显示颜色。我怎样才能真正着色spriteNode纹理?
答案 0 :(得分:1)
我认为你在触摸开始方法中缺少一个for循环。你的触摸开始方法应该是这样的:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
for (UITouch *touch in touches) {
if ([node.name isEqualToString:easyBtnName]){
_easyImage.color = [SKColor redColor];
_easyImage.colorBlendFactor = 1;
SKAction *pulseRed = [self colorizeChoosenSpriteNodeWithColor:[SKColor redColor]];
[_easyImage runAction: pulseRed];
} }
}
答案 1 :(得分:0)
您可以这样设置颜色
func changeColor() -> UIColor{
var color:UIColor
switch (arc4random_uniform(6)) {
case 0:
color = UIColor.purpleColor()
case 1:
color = UIColor.blueColor()
case 2:
color = UIColor.yellowColor()
case 3:
color = UIColor.magentaColor()
case 4:
color = UIColor.greenColor()
default:
color = UIColor.redColor()
}
return color
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent)
{
let colorAction = SKAction.colorizeWithColor(self.changeColor(), colorBlendFactor: 1, duration: 1)
SKSpriteNode.runAction(colorAction)
}
它对我有用。祝你好运!