2016-08-23 4 views
1

私はラケットで画面の上から落ちてくるオブジェクトを打つことができるゲームを作成しています。ユーザーはラケットを連続的に動かすことができますが、最小速度であるか静止している場合は、オブジェクトに当たってはいけません。私はそれを達成しましたが、ユーザーが連続して動いているラケットにユーザーが触れ始めると、速さのバリエーションは同じ速度で始まりませんし、タッチがその時間に動いている間にも何度かの速度は非常に小さい動きが速いにもかかわらず。ここでタッチの速さはシーン上のオブジェクトの数によって変わります

-(void)didMoveToView:(SKView *)view { 
self.physicsWorld.contactDelegate = (id)self; 
racketNode = [SKSpriteNode spriteNodeWithImageNamed:@"racket"]; 
racketNode.size = CGSizeMake(50,50); 
racketNode.position = CGPointMake(self.frame.origin.x + self.frame.size.width - 50,50); 
racketNode.name = @"racket"; 
[self addChild:racketNode]; 
} 
-(void) didBeginContact:(SKPhysicsContact *)contact { 
SKSpriteNode *nodeA = (SKSpriteNode *)contact.bodyA.node ; 
SKSpriteNode *nodeB = (SKSpriteNode *) contact.bodyB.node; 
if (([nodeA.name isEqualToString:@"racket"] && [nodeB.name isEqualToString:@"fallingObject"])) { 
    if (racketNode.speed > kMinSpeed) 
     [nodeB removeFromParent]; 
    else { 
     nodeB.physicsBody.contactTestBitMask = 0; 
     [self performSelector:@selector(providingCollsion:) withObject:nodeB afterDelay:0.1]; 
    } 
} 
} 
-(void) providingCollsion:(SKSpriteNode *) node { 

node.physicsBody.contactTestBitMask = racketHit; 
} 

-(void) touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent  *)event { 
for (UITouch *touch in touches) { 
    CGPoint location = [touch locationInNode:self]; 
    start = location; 
    startTime = touch.timestamp; 
    racketNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:racketNode.frame.size]; 
    racketNode.physicsBody.categoryBitMask = racket; 
    racketNode.physicsBody.contactTestBitMask = HitIt; 
    racketNode.physicsBody.dynamic = NO; 
    racketNode.physicsBody.affectedByGravity = NO; 
    [racketNode runAction:[SKAction moveTo:location duration:0.01]]; 
} 
} 

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
racketNode.physicsBody = nil; 
racketNode.speed = 0; 
} 

-(void) touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent    *)event { 
UITouch *touch = [touches anyObject]; 
CGPoint location = [touch locationInNode:self]; 
CGFloat dx = location.x - start.x; 
CGFloat dy = location.y - start.y; 
CGFloat magnitude = sqrt(dx*dx+dy*dy); 
// Determine time difference from start of the gesture 
CGFloat dt = touch.timestamp - startTime; 
// Determine gesture speed in points/sec 
CGFloat speed = magnitude/dt; 
racketNode.speed = speed; 
[handNode runAction:[SKAction moveTo:[touch locationInNode:self] duration:0.01]]; 
} 

が同じオブジェクトが高速だけではないの低速とも安定した状態での無衝突と衝突させるように自分のコードが間違っている部分を教えてくださいコードの私の作品です。

答えて

0

手動で行う代わりに、UIPanGestureRecognizerを使用してスワイプを処理します。それには、速度が所定の値よりも大きいかどうかを確認するために使用できる速度プロパティがあります。ここで

はそれを行うための素晴らしいチュートリアルです: https://www.raywenderlich.com/76020/using-uigesturerecognizer-with-swift-tutorial

+0

が、ラケットが頻繁 –

+0

パンがいることを可能に移動できるように、私はまた、連続的な動きを必要とします – Knight0fDragon

関連する問題