0

スプライト キットを使用した簡単なゲームに取り組んでいます。
画面上を 3 つのスプライトが動き回っています。を使用してスプライトを動かします

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];

この周りに境界を配置して、スプライトが接触したときに、2 番目のスプライトがエッジで停止しているスプライトと衝突した場合でも、それ以上進まないようにするにはどうすればよいですか。画面の端を境界にしたくはありませんが、私が定義したものです。

現在、スプライトを使用して停止しています

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

すべてのスプライトとすべてのエッジ

これは、スプライトが端に到達すると停止するように機能しますが、別のスプライトが衝突すると、端にあるスプライトが端を超えます。

スプライトが外に出ることができない境界を定義する方法はありませんか?

助けてくれてありがとう。

4

0 に答える 0