Найти угол вектора с помощью Cocos2d - PullRequest
2 голосов
/ 12 января 2012

Не нахожу в чем проблема. Я использую ccpToAngle (), чтобы найти угол вектора, но не могу получить правильный угол. Мой мяч запущен / начальная позиция на cpp (170,40) и с помощью удара я хочу его бросить.
Я написал, чтобы найти угол,

 -(void) ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event {

    CGPoint location = [touch locationInView: [touch view]];
    CGPoint vector = ccpSub(location, ccp(170 ,40));
    normalVector = ccpNormalize(vector);
    float angleRads = ccpToAngle(normalVector);
    float angle = CC_RADIANS_TO_DEGREES(angleRads);
   }

но здесь, если я сильно ударил, угол увеличивается. Я думаю, проведите пальцем в одну линию / направление, угол должен быть одинаковым каждый раз. но здесь я получаю угол только от 70 до 90 градусов, если смахнуть больше, чем угол составляет около 60,66 градусов.

Я хочу угол от 0 до 180 градусов. возможно ли, что он может рассматривать ccp (170, 40) как начало оси и найти угол вектора в Cocos2d?

Заранее спасибо.

1 Ответ

1 голос
/ 13 января 2012

если вы хотите найти угол пролистывания, вы должны использовать здесь тригонометрию ..

Вот некоторые из них, которые могут вам помочь.

- ( void ) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
   locationTouchBegan = [touch locationInView: [touch view]];
    //location is The Point Where The User Touched
    locationTouchBegan = [[CCDirector sharedDirector] convertToGL:locationTouchBegan];
    //Detect the Touch On Ball
    if(CGRectContainsPoint([ball boundingBox], locationTouchBegan))
    {
        isBallTouched=YES;
    } 

}

это то, как вы обнаруживаете, что мяч коснулся

Теперь на сенсорном конце мы можем вычислить направление.

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

так мы вычисляем направление.

-(void)calculateDirections
{
    if (isBallTouched==YES )
    {
        perpendicularBig = screenSize.height - ball.position.x;
        baseSmall = screenSize.width/2 - locationTouchEnded.x; // if the ball is at center.
        perpendicularSmall=locationTouchEnded.y - ball.position.x;
        baseBig=(perpendicularBig*baseSmall)/perpendicularSmall;
        endPoint=ccp(screenSize.width/2 - baseBig,320); //320 can replace by the value of end point y where you want to end the ball run. 
        [self moveBall:3.0f];
    }
}
-(void)moveBall:(float)duration
{

    [ball runAction:[CCJumpTo actionWithDuration:duration position:ccp(endPoint.x,endPoint.y) height:20 jumps:1]];
    isBallTouched = NO;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...