我有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;
}
要改变玩家的位置,我想将玩家位置设置为等于移动方法的返回值,但是当我尝试这样做时,我得到一个错误。我该怎么做?我应该这样做,还是有更好的方法?
答案 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
上签署浮点数就会出现错误。您可以将玩家的位置设置为新的CGPoint
:
self.position=CGPointMake(self.position.x+[self movement],self.position.y);