SpriteKit边界箱检测纹理变化



编辑:您好!(忘了打个招呼...)

我有一个非常烦人的问题。

我创建了一个小程序,到目前为止效果很好。但是,每当徘徊在另一个SKSpritenode上时,我都试图更改SKSpritenode纹理。为了测试实现,我添加了一个NSLOG()以打印悬停的节点来源。这样可行。但是,纹理变化仅在悬停在最后一个Itereat的节点上时起作用。复杂的。这是一些代码:

-(void)checkAimingHover{
for (SKSpriteNode *childSprite in [parentNode children]) {
        CGRect boundingBox =
        CGRectMake(childSprite.position.x-childSprite.size.width/2,
                   childSprite.position.y-childSprite.size.height/2,
                   childSprite.frame.size.width,
                   childSprite.frame.size.height);
        if (CGRectContainsPoint(boundingBox, aiming.position)) {
            // THIS works like a charm
            NSLog(@"%f/%f",boundingBox.origin.x, boundingBox.origin.y); 
            // THIS only works on the last created boundingBox
            [aiming setTexture:[SKTexture textureWithImageNamed:@"aim_hover"]]; 
        } else [aiming setTexture:aimDefault];

    }
}

AMING:SKSPRITENODE *AIMING;

和小更新():

-(void)update:(NSTimeInterval)currentTime {
    if (lastUpdateTime) {
        deltaTime = currentTime - lastUpdateTime;
    } else {
        deltaTime = 0;
    }
    lastUpdateTime = currentTime;
    [self checkAimingHover];
}

您在每个循环上重置纹理。改用此方法:

   BOOL hitTestDidHit = NO;
   for (SKSpriteNode *childSprite in [parentNode children]) {
    CGRect boundingBox =
    CGRectMake(childSprite.position.x-childSprite.size.width/2,
               childSprite.position.y-childSprite.size.height/2,
               childSprite.frame.size.width,
               childSprite.frame.size.height);
     if (CGRectContainsPoint(boundingBox, aiming.position)) {
        // THIS works like a charm
        NSLog(@"%f/%f",boundingBox.origin.x, boundingBox.origin.y); 
        // THIS only works on the last created boundingBox
        hitTestDidHit = YES;
     }
    }

    if(hitTestDidHit) {
        [aiming setTexture:[SKTexture textureWithImageNamed:@"aim_hover"]]; 
    } else {
        [aiming setTexture:aimDefault];
    }

我也应该告诉您有关超级酷的.calculatecumulatulyframe属性,该属性几乎可以完成您的边界框,但与孩子一起做。

最新更新