Как сделать стрелку в определенном направлении, используя cocos2d?

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

                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

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

Спасибо


person Chatar Veer Suthar    schedule 11.11.2011    source источник
comment
@nikhildhamsaniya, я должен использовать эти сенсорные методы и жесты в проекте cocos2d, вы это имеете в виду?   -  person Chatar Veer Suthar    schedule 11.11.2011
comment
очевидно, вы можете использовать метод сенсорного перемещения, а также метод сенсорного жеста, также найдите ссылку для жеста raywenderlich.com/2343/   -  person NIKHIL    schedule 11.11.2011
comment
а для сенсорного перемещения найдите все руководства по методу на cocos2d-iphone. org/wiki/doku.php/   -  person NIKHIL    schedule 11.11.2011


Ответы (3)


Нет необходимости в нескольких изображениях.... просто поверните изображение стрелки в методе 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]];
person Anshul Jain    schedule 11.11.2011
comment
Можете ли вы предоставить небольшой код тела touchMove, а не только идею, - person Chatar Veer Suthar; 11.11.2011
comment
Ануш, я попробую это, и, поскольку это сработало, я проголосую за тебя :-) - person Chatar Veer Suthar; 11.11.2011
comment
Спасибо за ваше драгоценное время :-) - person Chatar Veer Suthar; 11.11.2011

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

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

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

person NIKHIL    schedule 11.11.2011
comment
Я видел это, но видите ли вы, что перемещается только направление стрелки, а не изображение, где бы я ни привел демонстрационный пример для этого Bubbleshooter.net - person Chatar Veer Suthar; 11.11.2011
comment
См. эту ссылку, и увидеть движение или стрелку, - person Chatar Veer Suthar; 11.11.2011
comment
вам нужно смешать логику перемещения стрелки в методе тика для анимации стрелки - person NIKHIL; 11.11.2011
comment
Спасибо за ваше время, я должен реализовать, чем проголосовать или сейчас :-P - person Chatar Veer Suthar; 11.11.2011
comment
это зависит от вас, когда вы получите результат своего желания, и если вы чувствуете, что ответ полезен и для других - person NIKHIL; 11.11.2011

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

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

Лучший,

person Loic Argelies    schedule 11.11.2011