0

私はいくつかの物理ボディノードを持っています。Sprite Kit はすぐに didbegincontact メソッドを呼び出します。メソッドをすぐに呼び出すのではなく、クリックが離されたときにアクションを実行できるように、タッチを離したときにそのメソッドを呼び出す必要があります。これにより、アクション設定の問題が発生します。

- (void)didBeginContact:(SKPhysicsContact *)contact
{   NSLog(@"%hhd", _touching);
    if(_touching == NO)
     return;
something here
}

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
_touching = YES;
 NSLog(@"%hhd", _touching);

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
_touching = NO;
NSLog(@"%hhd", _touching);
something here
}
4

1 に答える 1

1
  1. グローバル変数を設定します。

    BOOL _touching;
    
  2. タッチ/リリース(タッチが終了して開始)すると、そのvarがYES / NOに設定されます。

  3. didbegincontact では、次のようなものを使用します

    if(_touching == YES) {
        // what I want to happen when I am touching
    } 
    else {
       // i must not be touching so do this
    }
    

これが基本的なセットアップです-しかし、問題はゲームロジックだと思います。問題を解決する別の方法を考えてみてください

@interface XBLMyScene()

@property (strong, nonatomic) SKNode *world;
@property (strong, nonatomic) SKSpriteNode *ball;
@property BOOL touching;
@end

@implementation XBLMyScene

-(id)initWithSize:(CGSize)size {    
if (self = [super initWithSize:size]) {

    self.world = [SKNode node];
    [self addChild:self.world];

    self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.3 alpha:1.0];

    self.physicsBody = [SKPhysicsBody bodyWithEdgeFromPoint:CGPointZero toPoint:CGPointMake(500, 0)];

    self.ball = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(40, 40)];
    self.ball.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(40, 40)];
    self.ball.position = CGPointMake(200, 300);
    [self.world addChild:self.ball];

    self.touching = NO;

}
return self;
}

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    self.touching = YES;
}

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

    self.touching = NO;
}

- (void) didSimulatePhysics
{
if (self.touching) {
    NSLog(@"I am touching");
}
else {
    NSLog(@"I am not touching");
}
}
于 2013-10-05T22:43:34.810 に答える