在使用SpaceManager时如何使用cocos2D旋转精灵

时间:2010-04-22 14:16:06

标签: cocos2d-iphone chipmunk

我只有一个简单的精灵 - 我怎么能让它旋转?

一个好的答案将展示如何旋转动态精灵和static_mass精灵

2 个答案:

答案 0 :(得分:1)

如果精灵是动态/非静态的,就这样做:

 cpBodySetAngVel(ObjSmSprite.shape->body,0.25); 

对于静态身体,你可以这样做:

[ObjSmStaticSprite.shape runAction:[CCRepeatForever actionWithAction:
                         [CCSequence actions:
                          [CCRotateTo actionWithDuration:2 angle:180],
                          [CCRotateTo actionWithDuration:2 angle:360],
                          nil]

                         ]];


smgr.rehashStaticEveryStep = YES; //Setting this would make the smgr recalculate all static shapes positions every step

总结一下,这是一个旋转的静态精灵,然后是旋转动态精灵。

  // Add Backboard
    cpShape *shapeRect = [smgr addRectAt:cpvWinCenter mass:STATIC_MASS width:200 height:10 rotation:0.0f ];// We're upgrading this 
  cpCCSprite * cccrsRect = [cpCCSprite spriteWithShape:shapeRect file:@"rect_200x10.png"];
    [self addChild:cccrsRect];

  // Make static object update moves in chipmunk
  // Since Backboard is static, and since we're going to move it, it needs to know about spacemanager so its position gets updated inside chipmunk.
  // Setting this would make the smgr recalculate all static shapes positions every step
//  cccrsRect.integrationDt = smgr.constantDt;
//  cccrsRect.spaceManager = smgr;
  // Alternative method: smgr.rehashStaticEveryStep = YES;
  smgr.rehashStaticEveryStep = YES;

  // Spin the backboard
  [cccrsRect runAction:[CCRepeatForever actionWithAction:
                         [CCSequence actions:
                          [CCRotateTo actionWithDuration:2 angle:180],
                          [CCRotateTo actionWithDuration:2 angle:360],
                          nil]

                         ]];


  // Add the hoop
  cpShape *shapeHoop = [smgr addCircleAt:ccp(winSize.width/2.0f,winSize.height/2.0f - 55.0f) mass:1.0 radius: 50 ];
  cpCCSprite * cccrsHoop = [cpCCSprite spriteWithShape:shapeHoop file:@"hoop_100x100.png"];
    [self addChild:cccrsHoop];
  cpBodySetAngVel(cccrsHoop.shape->body,0.25); 

免责声明:我正在尝试回答我自己的问题,这个答案可能会遗漏重要的细微之处 - 它只是代表我所知道的,到目前为止。

答案 1 :(得分:1)

如果使用cocos2d

使用此代码在tick中更新positon所有时间_number1.position是你要更新的位置,所以当_number1移动时_logo2将旋转以面对它     _logo2.rotation = CC_RADIANS_TO_DEGREES(-ccpToAngle(ccpSub(_number1.position,_logo2.position)));

通过触摸更新_logo1旋转将此代码放入触摸事件处理程序

_logo2.rotation = CC_RADIANS_TO_DEGREES(-ccpToAngle(ccpSub(location, _logo2.position)));

将此用作动作

[_logo2 runAction:[CCRotateTo actionWithDuration:0.0 angle:CC_RADIANS_TO_DEGREES(-ccpToAngle(ccpSub(location, _logo2.position)))]];

希望这有助于有人花了我很多时间来解决这个问题