如何在不使用SpriteKit中的操作的情况下更改节点的位置?

时间:2014-11-10 18:53:25

标签: ios objective-c sprite-kit

我有2个类(这里很重要), Player 类和 GameScene 类。我在 GameScene 类( createSceneContents )中有一个方法,由 didMoveToView 调用。在 createSceneContents 类中,我从名为 newPlayer Player 类中调用一个方法,该方法返回一个带有大小,颜色和物理主体的SKSpriteNode。 / p>

Player 类中还有一个名为 movement 的方法,它返回精灵的新x位置应该是:

运动:

#import <CoreMotion/CoreMotion.h>
@interface Player ()
@property CMMotionManager *motionManager;
@property CMAccelerometerData *accelerometerData;
@end

-(float)movement {
  self.accelerometerData = self.motionManager.accelerometerData;
  float xAccelerationPosition = 0;
  if ((self.accelerometerData.acceleration.x)<-0.2) {
      xAccelerationPosition = -2 * self.accelerometerData.acceleration.x;

  }
  if ((self.accelerometerData.acceleration.x)>0.2) {
      xAccelerationPosition = 2 * self.accelerometerData.acceleration.x;

  }
  return xAccelerationPosition;
}

要改变玩家的位置,我想将玩家位置设置为等于移动方法的返回值,但是当我尝试这样做时,我得到一个错误。我该怎么做?我应该这样做,还是有更好的方法?

2 个答案:

答案 0 :(得分:2)

是的,您只需设置position属性即可更改玩家的位置。如果任务很简单,那就继续使用它。

但是,让我们来看看是否需要对玩家或惯性设置重力。

在这种情况下,您需要使用SpriteKit Physics Simulation。首先,您需要在模拟下的所有对象必须具有物理实体。向sprite节点添加主体

并不是什么大不了的事
SKSpriteNode *player = [SKSpriteNode spriteNodeWithImageNamed:@"player"];
player.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(player.size.width/2, player.size.height/2)];
// your player now have a body, you can set it's density or another properties

要更改身体(以及附着的节点主体)位置,您可以使用脉冲和力。

[player.physicsBody applyImpulse:CGVectorMake(0,1)];  //up impulse

您的movement方法非常适合任务。只需使用acceleration值即可。

答案 1 :(得分:1)

您的移动方法返回float,但玩家的位置为CGPoint,您无法在CGPoint上签署浮点数就会出现错误。您可以将玩家的位置设置为新的CGPointself.position=CGPointMake(self.position.x+[self movement],self.position.y);