2

まず第一に、私は Cocos2D と Obj-C を初めて使用するので、このような単純な問題に遭遇することがあります。私の問題は次のようになります。画面にスプライトがあり、ユーザーはスプライトの上部に触れ、押したまま少し上に移動してから離す必要があります。帽子をかぶったプレイヤー スプライトを想像してみてください。帽子に触れて指を少し上に動かし、帽子をその方向に飛ばす必要があります。これを実現する最良の方法は何ですか?

私がこれまでに得たものはこれです:

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

    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:[touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];
        //other stuff
}

CCTouchesBegan の位置を特定する別のメソッドを作成し、その値を CCTouchesEnded メソッドに渡して、角度を計算し、帽子を飛ばす必要がありますか? または、上記の方法自体でタッチが開始された位置を特定できますか?

回答ありがとうございました:)

4

2 に答える 2

1

あなたが投稿したその方法は、タッチが終了したときにのみカバーします。これは、ユーザーが画面から指を離したときにのみトリガーされることを意味します。それがあなたが望むものなら、それは問題ありません。CGPoint変数「場所」はあなたが望むあなたのポイントです。

CGPointは2つのfloat値です。あなたが持っているでしょう:

location.x
location.y

これでは、タッチがどこから始まったかはわかりません。私が言ったように、それはユーザーが画面から指を離したときにのみトリガーされます。ユーザーが画面に触れた場所を知る必要がある場合は、別の方法があります。標準的なタッチ方法は次のとおりです。

// Touch first detected
-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
// Touches moved
-(void) ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
// User took finger off screen
- (void)ccTouchesEnded:(NSSet*)touches withEvent:(UIEvent*)event
// Touch was somehow interrupted
- (void)ccTouchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
于 2011-07-20T19:17:31.227 に答える
0
UITouch *touch = [ touches anyObject];

CGPoint new_location = [touch locationInView: [touch view]];
new_location = [[CCDirector sharedDirector] convertToGL:new_location];
NSLog(@"y: %1f", new_location.x);
NSLog(@"x: %1f", new_location.y);
于 2011-07-20T11:05:15.653 に答える