Как сделать стрелку в определенном направлении, используя cocos2d? - PullRequest
2 голосов
/ 11 ноября 2011

Мне нужны два объекта в одном ряду, как показано ниже, и объект, стреляющий в них снизу, как показано ниже

                0 0 0 0 0 0 




                     0

Нижняя всегда будет на своей позиции, и будет стрелять до первой, Я хочу сделать стрелку, так как пользователь будет двигать пальцем по экрану iPhone, как показано ниже

                 0 0 0 0 0 0 

                   \
                    \
                     \
                      0

если двигать пальцем, то

                  0 0 0 0 0 0                             
                      |
                      |
                      | 
                      0

При перемещении одного пальца на экране больше вправо, стрелка должна двигаться соответственно как

                  0 0 0 0 0 0                             
                          /
                         /
                        /
                      0

Как я могу реализовать эту логику, если у меня есть несколько изображений массивов и использовать их в соответствии с углом или чем-то другим, но я хочу, чтобы в этом была точность.

Спасибо

Ответы [ 3 ]

4 голосов
/ 11 ноября 2011

Нет необходимости в нескольких изображениях .... просто поверните изображение стрелки в методе touchesMoved

Попробуйте этот код.

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


// Set up initial location of projectile
CGSize winSize = [[CCDirector sharedDirector] winSize];

// Rotate player to face shooting direction
CGPoint shootVector = ccpSub(location, sprite.position);
CGFloat shootAngle = ccpToAngle(shootVector);
CGFloat cocosAngle = CC_RADIANS_TO_DEGREES(-1 * shootAngle);

CGFloat curAngle = _player.rotation;
CGFloat rotateDiff = cocosAngle - curAngle;    
if (rotateDiff > 180)
    rotateDiff -= 360;
if (rotateDiff < -180)
    rotateDiff += 360;    

CGFloat rotateSpeed = 360; // degrees per second
CGFloat rotateDuration = fabs(rotateDiff / rotateSpeed);

[yoursprite runAction:[CCSequence actions:
                    [CCRotateTo actionWithDuration:rotateDuration angle:cocosAngle],
                    [CCCallFunc actionWithTarget:self selector:@selector(finishShoot)],
                    nil]];
1 голос
/ 11 ноября 2011

проверьте следующую ссылку, чтобы повернуть изображение при сенсорном перемещении

здесь вы должны ограничить угол между желаемыми углами

повернуть изображение

0 голосов
/ 11 ноября 2011

Как заявили Аншул и Никхил, вращение стрелки должно адекватно решить вашу проблему.

Кроме того, обратите внимание, что вам, вероятно, потребуется создать спрайт со стрелкой с якорем, установленным в его нижнем центре (0,5, 0,5), чтобы не замечать смещения стрелки влево и вправо, в зависимости от настроек.

Best

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...