1

cocos2d でゲームを作ろうとしていますが、画面の上部からスプライトが落ちてきます。これで、スプライトがタップされると、元に戻るはずです。これは私にとっては問題なく機能しますが、スプライトが画面から消えた後に元に戻る場合があります。また、スプライトが画面上の特定の y 軸位置に到達しても消えません。ここに私のコードの一部があります

-(void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint loc = [[CCDirector sharedDirector]convertToGL:[touch locationInView:[touch view]]];

CGRect rect = CGRectMake(sprite.position.x - (sprite.contentSize.width/2), sprite.position.y - (sprite.contentSize.height/2), sprite.contentSize.width, sprite.contentSize.height);

if(CGRectContainsPoint(rect, loc))
{
    [sprite runAction:[CCCallFuncN actionWithTarget:self selector:@selector(spriteCaught)]];
}}

-(void)spriteCaught
{
//currentPos is an integer to get the current position of the sprite
id moveUp = [CCMoveTo actionWithDuration:1 position:ccp(currentPos, 500)];
[sprite runAction:[CCSequence actions:moveUp, nil]];
if(sprite.position.y >= 480)
{
    [self removeChild:sprite cleanup:YES];
}}

また、構文が正しいかどうかはわかりませんが、条件ステートメント (スプライトの y 軸の位置をチェックするステートメント) も機能しません。これを修正するにはどうすればよいですか?どんな助けや提案も大歓迎です

4

1 に答える 1

1

手動の rect の代わりに、スプライトのバウンディング ボックスを使用します。

         if(CGRectContainsPoint([sprite boundingBox], loc))

また、spriteCaught 関数を更新します。

-(void)spriteCaught
{
    CGSize s = [[CCDirector sharedDirector] winSize];

    float dest_y = s.height+sprite.contentSize.height*0.5f; //assumed ur sprite's anchor y = 0.5

    //currentPos is an integer to get the current position of the sprite
    id moveUp = [CCMoveTo actionWithDuration:1 position:ccp(sprite.position, dest_y)];
    id calBlokc = [CCCallBlockN actionWithBlock:^(CCNode *node)
    {
        //here node = sprite tht runs this action
        [node removeFromParentAndCleanup:YES];
    }];
    id sequence = [CCSequence actions:moveUp, calBlokc, nil];

    [sprite runAction:sequence];
}
于 2013-01-24T04:21:21.950 に答える