2

次のコードを使用して、SKScene に画像を追加しました -

char1 = [[SKSpriteNode alloc] initWithImageNamed:@"CH_designb_nerd.png"];
    char1.position = CGPointMake(225.0, 65.0);
    char1.anchorPoint = CGPointMake(0, 0);
    [char1 setScale:0.35];
    [self addChild:char1];

次に、画像にタッチイベントを作成しようとしましたが、画像の CGRect が画面の反対側で完全に反転しているようです。次のコードを使用しました

(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint location = [touch locationInView:self.view];
    if (CGRectContainsPoint(char1.frame, location)) {
        NSLog(@"yaaa!!");

    }
    else{
        NSLog(@"%.2f",location.x);
        NSLog(@"%.2f",char1.position.x);

    }

}

画像は完全に配置されていますが、座標または CGRect が反転しているように見えるため、これで完全に失われました。画像は下部に配置されますが、画面の上部に触れたときにのみ、タッチが発生したと表示されます。

4

2 に答える 2

2

これは、クリック位置が間違っていることが原因だと思います。代わりにSKNode、ヒット テストに同等のものを使用することを検討します。このようなもの:

UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];
SKSpriteNode *char1 = (SKSpriteNode *)[self childNodeWithName:@"char1Name"];
if ([char1 containsPoint:location])
{
    ...
}

ここにはいくつかの構文エラーがあり、メモリから入力している可能性がありますが、要点はわかります。name注: ルックアップを実行するにはプロパティを設定する必要があります。または、そのノードしかない場合char1は単に列挙することもできます。self.children

于 2013-10-03T12:47:02.653 に答える
2

これを試して。

UITouch * touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];

spriteKitリンクの良い例

于 2013-10-03T13:06:07.353 に答える