用cocos2d触摸旋转精灵用于iphone

时间:2011-03-20 12:36:27

标签: cocos2d-iphone touch rotation

我对编程非常陌生,我提前道歉,因为我的无知可能会给某人造成任何不便。也提前谢谢你。我有一个精灵代表左轮手枪上的子弹皮套,我想要完成的效果是触摸皮套的旋转效果。我已经找到了所有的三角形,并且几乎完成了预期的结果。在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 :(得分:0)

我不确定我是否明白你的意思,但这是一个建议

这个问题可能是因为你分配了你的sprite.rotation = someValue;这将强制为你的精灵分配一个特定的角度,这将导致“跳跃”

相反,使用这个,sprite.rotation--;或者sprite.rotation ++;在你的touchMoved逐步移动它。在这种情况下,您可能需要更改计算角度旋转的方式。