0

我正在使用 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 bodyWithEdgeLoopF​​romRect:border];

我如何在它周围放置一个周边,以便当精灵与它接触时,即使第二个精灵与已经在边缘停止的精灵发生碰撞,它们也不会进一步移动。我不希望屏幕的边缘是周边,而是我定义的周边。

现在我让精灵停止使用

if (sprite1.position.x <=340) {
        sprite1.position = CGPointMake(340, sprite1.position.y);
}

对于每个精灵和每个边缘

这可以在精灵到达边缘时停止它,但是当另一个精灵与它碰撞时,边缘的精灵会超出边缘。

有没有办法定义一个边界,无论如何没有精灵可以超出它?

谢谢您的帮助。

4

0 回答 0