在cocos2d中限制精灵的移动范围

7
我正在制作一种能够发射物体的加农炮。在加农炮的后部连接了活塞。活塞用于设置速度和角度。加农炮可以旋转0-90度,而活塞可以前后移动以调整速度。当我通过触摸旋转加农炮时,它的工作良好。当通过触摸将活塞向后拉并旋转时,意味着活塞超出了加农炮的边界。 如何控制这个问题:我的代码是在触摸移动时控制活塞和加农炮旋转的(para3是加农炮,para6是我的活塞)。
    CGPoint touchLocation = [self convertTouchToNodeSpace:touch];
    CGPoint oldTouchLocation = [touch previousLocationInView:touch.view];
    oldTouchLocation = [[CCDirector sharedDirector] convertToGL:oldTouchLocation];
    oldTouchLocation = [self convertToNodeSpace:oldTouchLocation];
    if (CGRectContainsPoint(CGRectMake(para6.position.x-para6.contentSize.width/2, para6.position.y-para6.contentSize.height/2, para6.contentSize.width, para6.contentSize.height), touchLocation) && (touchLocation.y-oldTouchLocation.y == 0))
    {
        CGPoint diff = ccpSub(touchLocation, oldTouchLocation);
        CGPoint currentpos = [para6 position];
        NSLog(@"%d",currentpos);
        CGPoint destination = ccpAdd(currentpos, diff);
        if (destination.x < 90 && destination.x >70)
        {
            [para6 setPosition:destination];
            speed = (70 + (90-destination.x))*3.5 ;
        }

    }
if(CGRectIntersectsRect((CGRectMake(para6.position.x-para6.contentSize.width/8, (para6.position.y+30)-para6.contentSize.height/10, para6.contentSize.width, para6.contentSize.height/10)),(CGRectMake(para3.position.x-para3.contentSize.width/2, para3.position.y-para3.contentSize.height/2, para3.contentSize.width, para3.contentSize.height))))

            {

        [para3 runAction:[CCSequence actions:
                          [CCRotateTo actionWithDuration:rotateDuration angle:rotateDiff],
                          nil]];
        CGFloat plungrot = (rotateDiff);
        CCRotateTo *rot = [CCRotateTo actionWithDuration:rotateDuration angle:plungrot];
        [para6 runAction:rot];
    }
}
2个回答

2

你可以尝试使用[CCMoveTo actionWithDuration: position:]方法来实现,这个方法可以通过"actionWithDuration"参数轻松控制速度,该参数接受以秒为单位的整数值;而方向可以通过"position"参数进行调整,该参数接受ccp(x,y)作为移动到的目标位置。

你可以像这样使用它...

    CCSprite *plunger = [[CCSprite alloc] initWithFile:@"plunger.png"];
    plunger.position = ccp(240,240);
    [self addChild:plunger z:10];
    [plunger release];

    id = [CCMoveTo actionWithDuration:3 position:ccp(300,240)];

这里给出的数值是我选择的,您可以根据自己的需求使用它们。

希望这能对你有所帮助...


1
我希望我正确理解了问题: 如果问题是,炮筒和柱塞都围绕自己的中心点旋转,但你想让它们一起旋转,那么解决方案应该是将柱塞设置为炮筒的子精灵(这也使得柱塞的位置相对于炮筒)即可。
[para3 addChild:para6]

然后你只需要旋转大炮,活塞也将随之旋转。

如果我完全误解了你的问题,也许你可以发布一张截图 :-)


我将其作为子项添加了。但仍然会限制精灵的范围(活塞限制了大炮)。当触摸结束方法时,它将正常工作。在移动触摸时,即使添加了子项,它仍然会受到限制。 - Srinivas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接