我有一个SKSpriteNode,可以使用以下代码随加速度计一起移动:
-(void)processUserMotionForUpdate:(NSTimeInterval)currentTime {
SKSpriteNode* ship = (SKSpriteNode*)[self childNodeWithName:@"fishderp"];
CMAccelerometerData* data = self.motionManager.accelerometerData;
if (fabs(data.acceleration.y) > 0.2) {
[gameFish.physicsBody applyForce:CGVectorMake(0, data.acceleration.y)];
}
}
这很好用,但节点(游戏鱼)离开屏幕。如何防止这种情况并将其保留在屏幕上?
答案 0 :(得分:2)
尝试使用专为此目的而设计并在iOS8中引入的SKConstraint:
只需将其添加到gameFish节点的setup方法即可。物理运行后,游戏引擎将应用约束。你不必担心它。好吧?
// get the screensize
CGSize scr = self.scene.frame.size;
// setup a position constraint
SKConstraint *c = [SKConstraint
positionX:[SKRange rangeWithLowerLimit:0 upperLimit:scr.width]
Y:[SKRange rangeWithLowerLimit:0 upperLimit:scr.width]];
gameFish.constraints = @[c]; // can take an array of constraints
答案 1 :(得分:0)
代码取决于您是将gameFish节点添加到self还是添加到另一个节点(类似“worldNode”)。如果您已将其添加到自己,请查看以下代码:
// get the screen height as you are only changing your node's y
float myHeight = self.view.frame.size.height;
// next check your node's y coordinate against the screen y range
// and adjust y if required
if(gameFish.position.y > myHeight) {
gameFish.position = CGPointMake(gameFish.position.x, myHeight);
}
对于底部,您可以检查< 0
或您需要的任何值。