0

我正在为我的简单游戏中的商店部分制作按钮。当按钮被点击时,我想将它短暂地突出显示一段时间。我正在使用 SKActions 来完成此操作。以下是我的代码的相关部分:

@interface TheScene()
{
    ...
    SKAction *visualFeedbackSequence;
    SKSpriteNode *buttonForFeedback;
    CGRect orangeCheckboxRect;

    ...
}
...
@implementation TheScene
...
-(void)initWithSize:(CGSize)size {
    ...
    buttonForFeedback = [SKSpriteNode spriteNodeWithImageNamed:@"button"];
    SKAction *makeItWhite = [SKAction colorizeWithColor:[SKColor whiteColor] colorBlendFactor:0.8 duration:0.85];
    SKAction *andBackAgain = [SKAction colorizeWithColor:[SKColor whiteColor] colorBlendFactor:0.0 duration:0.01];
    visualFeedback = [SKAction sequence:@[makeItWhite, andBackAgain]];
    orangeCheckboxRect = buttonForFeedback.frame;

...
return self;
}
...
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
...
if(CGRectContainsPoint(orangeCheckboxRect, location) ) {
        NSLog(@"Running vis feedback on orange check"); //Inserted for debugging
        [orangeCheckbox runAction:visualFeedback];
        if([shopController hasUpgrade:@"theupgrade"]) {
            [shopController setCurrentUpgrade:@"theupgrade"];

        }
...

注意:shopController 所做的所有事情都是返回 YES 或 NO,如果他们有选择的升级。

我遇到的问题是,当我第一次点击我在这里使用的按钮时,效果就会出现。但是随后的任何点击都不会显示效果。我放在 if 语句中的调试 NSLog 确实执行了,表明操作应该直接在它之后运行。我想我需要更改此处使用的 SKActions,但我已经尝试了许多相关操作的组合,但均未成功。这是 SKActions 的一个已知错误,还是我只是做错了什么?

4

1 回答 1

1

由于您保留了对反馈操作的引用,因此每次运行时都需要制作一份副本:

[orangeCheckbox runAction:[visualFeedback copy]];
于 2014-03-21T14:21:57.363 回答