Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocos2d iphone 使用适用于iphone的cocos2d触摸旋转精灵_Cocos2d Iphone_Touch_Rotation - Fatal编程技术网

Cocos2d iphone 使用适用于iphone的cocos2d触摸旋转精灵

Cocos2d iphone 使用适用于iphone的cocos2d触摸旋转精灵,cocos2d-iphone,touch,rotation,Cocos2d Iphone,Touch,Rotation,我对编程非常陌生,对于我的无知可能给他人带来的不便,我提前表示歉意。也提前谢谢你。我有一个代表左轮手枪枪套的精灵,我希望实现的效果是枪套旋转时的触摸效果。我已经计算出了所有的三角,并且几乎达到了预期的结果。在ccTouchMoved的第一个实例中,子弹套会跳跃以使其旋转与触感一致,几乎就像枪套上有一个点与触感同步一样。在那之后,它会像你期望的那样旋转。如何使其相对于上次触摸时停止的位置旋转?我见过其他有类似问题的人。我也看到了这个问题的答案。我只是不知道这个答案在说什么,因为它看起来是为一个比我

我对编程非常陌生,对于我的无知可能给他人带来的不便,我提前表示歉意。也提前谢谢你。我有一个代表左轮手枪枪套的精灵,我希望实现的效果是枪套旋转时的触摸效果。我已经计算出了所有的三角,并且几乎达到了预期的结果。在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

这是我第一次尝试游戏。我开始制作一些界面的原型,并且已经遇到了一个减速带!提前再次感谢您

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

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


相反,请使用以下命令:sprite.rotation--;或者sprite.rotation++;在你的触碰下,慢慢地移动它。在这种情况下,您可能必须更改计算角度旋转的方式。

我已经计算出来了。Cocos 2d有一个“previousLocation in view”(视图中的previousLocation)。您可以将previousLocation in(视图中的位置)与视图中的location in(视图中的位置)一起输入,以获得角度距离(与刻度盘的中心)。然后取这个角距离,加上当前的旋转,我解决了它。很抱歉没有解释清楚。旋转的精灵有一个点,在CCtouch移动的第一个实例中,它总是面向我的手指,不管它要走多远才能到达那里。这就产生了一个快速的跳跃。不管怎么说,这是给比我不幸的人的密码。