1

私は Sprite Kit を使用してゲームに取り組んでおり、ボールがターゲット (ゴール) に当たることを含みます。ボールがゴールに接触したら、ゴールを削除して別の場所に再度追加したい。それはすべてうまくいきますが、多くの場合、問題はゴールがボールの真上または交差することです (そのようです)。これを防ぐにはどうすればよいですか?事前に感謝し、didBeginContact コードを投稿する必要があるかどうか教えてください。

4

1 に答える 1

1

この問題は、ボールの位置に相対的な新しい位置にゴールを追加することで回避できます。まず、これらの機能を追加します...

static inline CGFloat skRandf() {
    return rand() / (CGFloat) RAND_MAX;
}

static inline CGFloat skRand(CGFloat low, CGFloat high) {
    return skRandf() * (high - low) + low;
}

そして、これをdidBeginContactに...

    CGFloat goalWidth = goal.size.width;
    CGFloat goalHeight = goal.size.height;

    CGFloat maxX = self.frame.size.width - goalWidth;
    CGFloat maxY = self.frame.size.height - goalHeight;

    CGFloat dx = MAX(maxX-kMinDistanceFromBall-_ball.position.x, 0) + MAX(ball.position.x-kMinDistanceFromBall, 0);
    CGFloat dy = MAX(maxY-kMinDistanceFromBall-_ball.position.y, 0) + MAX(ball.position.y-kMinDistanceFromBall, 0);

    CGFloat newX = ball.position.x + MIN(maxX-ball.position.x, kMinDistanceFromBall) + skRand(0, dx);
    CGFloat newY = ball.position.y + MIN(maxY-ball.position.y, kMinDistanceFromBall) + skRand(0, dy);

    if (newX > maxX) {
        newX -= maxX;
    }

    if (newY > maxY) {
        newY -= maxY;
    }

    goal.position = CGPointMake (newX+goalWidth/2, newY+goalHeight/2);
于 2014-07-22T16:55:12.013 に答える