【问题标题】:SKSpriteNode with Image will not colorize带有图像的 SKSpriteNode 不会着色
【发布时间】:2014-02-28 06:27:06
【问题描述】:

我已经像这样创建了一个 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 纹理着色?

【问题讨论】:

    标签: ios objective-c sprite-kit


    【解决方案1】:

    我认为您在 touches started 方法中缺少一个 for 循环。您的 touches started 方法应如下所示:

        - (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];
        } }
        }
    

    【讨论】:

      【解决方案2】:

      你可以这样做来设置颜色

      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)
      }
      

      它对我有用。祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-29
        • 2020-05-28
        • 1970-01-01
        • 2011-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多