Вращение спрайта с касанием с cocos2d для iphone - PullRequest
0 голосов
/ 20 марта 2011

Я чрезвычайно новичок в программировании и заранее прошу прощения за любые неудобства, которые мое невежество может причинить кому-либо.Также заранее спасибо.У меня есть спрайт, представляющий кобуру от пули на револьвере. Эффект, которого я хочу добиться, - это прикосновение к повороту кобуры.Я все триггера разобрался и почти достиг желаемого результата.В самом первом случае ccTouchMoved кобура пули перепрыгивает, чтобы согласовать ее вращение с касанием, почти как на кобуре есть точка, синхронизированная с касанием.После этого он вращается, как и следовало ожидать.Как заставить его вращаться относительно того места, где я остановился на последнем касании?Я видел других людей, у которых есть подобные проблемы.Я также видел ответы ответы на проблему.Я просто не знаю, о чем говорил этот ответ, потому что, похоже, он предназначен для более опытного программиста, чем я.

Вот моя собственная сцена, которая содержит всю мою логику

#import "MainScene.h"

@implementation MainScene

+(id) scene
{
  CCScene *scene = [CCScene node];
  MainScene *layer = [MainScene node];
  [scene addChild: layer];

  return scene;
}

-(id) init
{
  if ((self=[super init])) {

    CGSize size = [[CCDirector sharedDirector] winSize];

    dial = [CCSprite spriteWithFile:@"dial.png"];
    dial.position = ccp(size.width/2, dial.contentSize.height/2);
    [self addChild:dial];
    self.isTouchEnabled = YES;

    [self scheduleUpdate];
  }

  return self;
}

-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

  NSLog(@"Touch begun");

}

-(void)update:(ccTime) dt{

  dial.rotation = cocosAngle;
}

-(void) ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

  NSLog(@"Touch moved");

  UITouch *touch = [touches anyObject];
  CGPoint touchLocation = [touch locationInView:[touch view]];

  CGPoint touchingPoint = [[CCDirector sharedDirector] convertToGL:touchLocation];

  CGPoint vector = ccpSub(touchingPoint, dial.position);
  CGFloat rotateAngle = -ccpToAngle(vector);

  deltaAngle = CC_RADIANS_TO_DEGREES( rotateAngle);

}
...
@end

Это моя первая попытка игры.Я начал создавать прототипы некоторых интерфейсов и уже столкнулся со скоростью!Заранее еще раз спасибо!

1 Ответ

0 голосов
/ 21 марта 2011

Я не уверен, что понимаю, что вы имеете в виду, но вот предложение

эта проблема может быть связана с тем, что вы назначили свой sprite.rotation = someValue;это принудительно назначит определенный угол вашему спрайту, что вызовет «прыжок»

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

...