【问题标题】:how to detect phyisic collision in different class Sprite Kit如何检测不同类 Sprite Kit 中的物理碰撞
【发布时间】:2015-07-27 09:19:36
【问题描述】:

我有一个名为 Blade.h 的类,我在上面创建了一个 SKSpriteNode! 现在我在 Main Class 上创建该类的新实例。

#import "Blade.h"

@implementation Blade

-(void) GenerateBalde
{
    SKSpriteNode *blade = [SKSpriteNode spriteNodeWithImageNamed:@"blade"];
    [blade runAction:[SKAction rotateByAngle:M_PI duration:1]];
    [self addChild:blade];
}

@end

现在,我想在我的主类中拥有这个对象的一个​​实例,并且我想检测 Blade 与我的主类中的另一个 Sprite 的物理碰撞! 我知道如何制作实例,但我想知道如何检测不同类+物理中不同对象的碰撞!

请指教!

【问题讨论】:

    标签: ios objective-c sprite-kit game-physics


    【解决方案1】:

    如果您的BladeSKSpriteNode 的子类,然后在其init 方法中使用会更好:

    if (self = [super initWithImageNamed:@"blade"]){
       //more code
    }
    return self;
    

    另一种解决方案是使用属性,因此不要在 generateBlade 方法中创建 SKSpriteNode,而是使用以下方法:

    在 Blade.h 中添加 @property (nonatomic, retain) SKSpriteNode *bladeSprite

    在你的 generateBlade 方法中,使用这个:

    self.bladeSprite = [SKSpriteNode spriteNodeWithImageNamed:@"blade"];
    [self.bladeSprite runAction:[SKAction rotateByAngle:M_PI duration:1]];
    [self addChild:self.bladeSprite];
    

    然后,在您的MainScene 中,在update: 方法中,您可以使用以下代码检查碰撞:

    -(void)update:(CFTimeInterval)currentTime {
        if (CGRectIntersectsRect(otherObject.frame, blade.bladeSprite.frame){
            //Collisioning!
        }
    }
    

    如果您使用第一行中提到的SKSpriteNode 子类,您可以只使用blade.frame 而不是blade.bladeSprite.frame(您不需要设置属性)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 1970-01-01
      相关资源
      最近更新 更多