0

私は次のものを持っています:

  1. 「_background」という背景スプライト
  2. 3 x スプライト「C4」、「D5」、「Hj」

3 つのスプライトが別々に背景に追加されます。次に、ダブルクリックで、それらを同じ順序と位置にとどめたまま、画面上の別の場所に同時にドラッグできるようにしたいと考えています。

私がそれをほぼ機能させる唯一の方法は、次のコードを使用することです。

- (void)tap2TouchesGesture:(UITapGestureRecognizer *)sender {
SKNode *removeNode = [_background childNodeWithName:@"C4"];
CGPoint aPos = removeNode.position;
[removeNode removeFromParent];


SKSpriteNode *topNode = [SKSpriteNode spriteNodeWithImageNamed:@"C4"];
topNode.position = aPos;
topNode.zPosition = 100;
topNode.name = @"C4";
[_background addChild:topNode];

removeNode = [_background childNodeWithName:@"D5"];
[removeNode removeFromParent];


SKSpriteNode *vv = [SKSpriteNode spriteNodeWithImageNamed:@"D5"];
vv.position = CGPointMake(-10, -10);
vv.zPosition = -10;
vv.userInteractionEnabled = NO; // just testing
vv.name = @"D5";
[topNode addChild:vv];

removeNode = [_background childNodeWithName:@"Hj"];
[removeNode removeFromParent];
vv = [SKSpriteNode spriteNodeWithImageNamed:@"Hj"];
vv.position = CGPointMake(-20, -20);
vv.zPosition = -50;
vv.userInteractionEnabled = NO; // just testing
vv.name = @"Hj";
[topNode addChild:vv];
}

上記のコードを処理した後、スプライトのパックを移動できますが、現在の問題は、親である C4 が一番上にないように見えることです。C4 を選択する唯一の方法は、_background を含まない他のスプライトの外側にある部分をクリックすることです。

これはこれを実行するための最良のアプローチではないと思うので、これを正しく行う方法について助けを求めたいと思います。また、スプライト全体をクリックして C4 を選択することもできます。

4

2 に答える 2

0

3 つのスプライトすべてを同時に同期してドラッグできるようにしたいということですか。互いの位置は常に同じままです。

そのような場合に私がいつも言うこと。複数のスプライト (または任意のノード) で何かを一緒に実行したい場合は、SKNode を追加し、3 つのスプライトすべてをその中に入れて、ノードをドラッグします。バム、超簡単!

于 2013-10-07T22:49:30.797 に答える
0

topNode(コンテナ)ではなく、選択したノードを移動しようとしたため、非常に単純な間違いを犯しました。信じられない、特にSteffensの提案の後、私はそれを見るべきだった:-(

ありがとう Steffen と Ben Stahl @ Apple SpriteKit フォーラム:-)

ただし、この例を機能させるために使用するコードは次のとおりです。

- (void)tap2TouchesGesture:(UITapGestureRecognizer *)sender {

_topNode = [SKNode node];
[_background addChild:_topNode];


SKSpriteNode *vv = [SKSpriteNode spriteNodeWithImageNamed:@"C4"];
[_topNode addChild:vv];

vv = [SKSpriteNode spriteNodeWithImageNamed:@"D5"];
[_topNode addChild:vv];

vv = [SKSpriteNode spriteNodeWithImageNamed:@"Hj"];
[_topNode addChild:vv];

_isThePackSelectedForAction = YES; // sprites are selected

}


- (void)handlePan:(UIPanGestureRecognizer *)sender {

_currentTouchLocationGlobal = [sender locationInView:sender.view];
_currentTouchLocationGlobal = [self convertPointFromView:_currentTouchLocationGlobal];


if (_isThePackSelectedForAction) {
    _topNode.position = CGPointMake(_currentTouchLocationGlobal.x, _currentTouchLocationGlobal.y);
} else {
    _currentNode.position = CGPointMake(_currentTouchLocationGlobal.x, _currentTouchLocationGlobal.y);
}
}
于 2013-10-09T09:28:43.827 に答える