gpt4 book ai didi

ios - SKPhysicsWorld 在缩放节点中模拟物理

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:23 26 4
gpt4 key购买 nike

我正在尝试构建一个 SpriteKit 游戏,其中涉及具有可以放大和缩小的物理体的关卡。物理世界的行为并不像我预期的那样,并且在更改缩放级别时导致奇怪的事情发生。

具有物理实体的节点会按预期进行动画处理和行为。围绕关卡进行缩放是通过捏合手势来处理的,该手势正在调整包含所有游戏元素的单个“世界节点”的比例。这是一种处理它的便捷方法,因为缩放场景似乎会做一些可怕的事情,而且它可以很容易地为世界节点顶部的任何游戏界面元素添加一个单独的未缩放节点。

缩放是这样的:

- (void) handlePinchGesture:(UIPinchGestureRecognizer *) gesture {
if (gesture.state == UIGestureRecognizerStateChanged) {
[self.worldNode runAction:[SKAction scaleBy:gesture.scale duration:0.0]];
gesture.scale = 1;
}
}

在正常缩放级别时,一切都很好,而且在视觉上,在不同的缩放级别下一切看起来也都很好。问题在于,当缩放比例发生变化时,物理体继续以相同的速度移动,而不是相对于其他物体以相同的速度移动。结果是,当缩小以查看更多场景时,一切都移动得更快。

这似乎是物理世界仅连接到场景并且不知道“世界节点”的调整比例这一事实的副作用。物理体不应该继续以相同的速度在它们的相对空间中移动节点吗?

任何人都可以深入了解 SpriteKit 的行为方式或如何解决这个问题吗?

最佳答案

它这样做的原因很明显。想象一下,您想将一个球缩小到更小的尺寸,但它应该仍然以相同的方式移动,对吗?

出现此问题是因为您同时缩放“整个球系统”。除了正在发生的事情之外,没有任何真正明智的结果。 SpriteKit 确实需要猜测您正在尝试做什么,并根据为使其工作而缩放的程度来决定使用它或不使用它来缩放物理速度。

解决方案是缩放整个场景而不是子节点。

编辑:缩放您设置的场景大小。需要设置场景的scaleMode为SKSceneScaleModeAspectFill。

Edit2:子场景解决方案只有在将它们添加到专用的第二个 SKView 时才有效,我承认这相当牵强。您可能需要处理单个场景、放大和缩小该场景、相应地移动子节点并隐藏您的界面元素(或“反缩放它们”)。

关于ios - SKPhysicsWorld 在缩放节点中模拟物理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22360479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com