【问题标题】:SKScene detect collision before adding to parentSKScene 在添加到父级之前检测碰撞
【发布时间】:2014-07-22 15:00:10
【问题描述】:

我正在使用 Sprite Kit 开发一款游戏,它涉及一个球击中目标(球门)。当球与球门接触时,我希望球门被移除并再次添加到不同的位置。这一切都有效,但问题往往是(看起来)目标在球的顶部或与球相交。我将如何防止这种情况发生?提前感谢,如果我需要发布我的 didBeginContact 代码,请告诉我。

【问题讨论】:

    标签: sprite-kit collision-detection skscene


    【解决方案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);
    

    【讨论】:

    • 对不起,我可能遗漏了一些明显的东西,但它说 kMinDistanceFromBall 未声明。那会被宣布为什么?不过感谢您的帮助!
    • 如果您希望新目标距离球至少 50 像素,请将 kMinDistanceFromBall 设置为 50。
    • 谢谢!那解决了那个问题。唯一的问题是它有时会产生一半进一半出框架的目标。我该如何解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多