我正在使用 sprite kit 开发一个简单的游戏。
我有三个精灵在屏幕上移动。我让精灵通过使用移动
self.motionManager = [[CMMotionManager alloc] init];
self.motionManager.deviceMotionUpdateInterval = 0.005f;
self.motionQueue = [[NSOperationQueue alloc] init];
self.motionQueue.name = [[[NSBundle mainBundle] bundleIdentifier] stringByAppendingString:@".motion"];
self.updatePosition = NO;
[self.motionManager startDeviceMotionUpdatesToQueue:self.motionQueue withHandler:^(CMDeviceMotion *motion, NSError *error) {
@synchronized(self) {
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2];
[formatter setRoundingMode: NSNumberFormatterRoundUp];
{
numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:motion.gravity.x / 20.0 *200]];
numberStringy = [formatter stringFromNumber:[NSNumber numberWithFloat:motion.gravity.y / 20.0 *200]];
n = [numberString intValue];
y = [numberStringy intValue];
}
self.gravity = motion.gravity;
self.updatePosition = YES;
}
}];
[self startDisplayLink];
- (void)startDisplayLink
{
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(handleDisplayLink:)];
[self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}
- (void)stopDisplayLink
{
[self.displayLink invalidate];
self.displayLink = nil;
}
- (void)handleDisplayLink:(CADisplayLink *)displayLink
{
@synchronized(self) {
if (!self.updatePosition)
return;
self.sprite1.position = CGPointMake(self.sprite1.position.x + (n*.99), self.sprite1.position.y + (y*.99));
self.sprite2.position = CGPointMake(self.sprite2.position.x + (n*.98), self.sprite2.position.y +(y*.98));
self.sprite3.position = CGPointMake(self.sprite3.position.x + n, self.sprite3.position.y + y);
}
我已经像这样在精灵(1,2,3)上启用碰撞检测
sprite1.physicsBody =
[SKPhysicsBody bodyWithCircleOfRadius:(ball1.size.width/2)];
sprite1.physicsBody.usesPreciseCollisionDetection = YES;
sprite1.physicsBody.categoryBitMask = ballCategory;
sprite1.physicsBody.contactTestBitMask = ballCategory;
sprite1.physicsBody.affectedByGravity = NO;
这是边缘循环的新代码
CGRect 边框= CGRectInset (self.frame,325,133);
self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:border];
我如何在它周围放置一个周边,以便当精灵与它接触时,即使第二个精灵与已经在边缘停止的精灵发生碰撞,它们也不会进一步移动。我不希望屏幕的边缘是周边,而是我定义的周边。
现在我让精灵停止使用
if (sprite1.position.x <=340) {
sprite1.position = CGPointMake(340, sprite1.position.y);
}
对于每个精灵和每个边缘
这可以在精灵到达边缘时停止它,但是当另一个精灵与它碰撞时,边缘的精灵会超出边缘。
有没有办法定义一个边界,无论如何没有精灵可以超出它?
谢谢您的帮助。