当前位置: 首页 > 知识库问答 >
问题:

SpriteKit-为什么我的弹跳球穿过地面?

袁阿苏
2023-03-14

我正在为一个使用精灵工具包物理引擎的小型弹跳球游戏工作。我的问题是:

当我对弹跳球施加巨大的冲力使其快速落在地面上时,有时它可能会穿过地面(非常薄,高度=2)。

我在Apple文档中找到了这个,但它不起作用。

为小型或快速移动的对象指定高精度碰撞 当 Sprite Kit 执行碰撞检测时,它首先确定场景中所有物理体的位置。然后,它确定是否发生了冲突或接触。这种计算方法速度很快,但有时会导致错过碰撞。一个小身体可能会移动得如此之快,以至于它完全穿过另一个物理身体,而没有一帧动画,两者相互接触。

如果你有必须碰撞的物理体,你可以暗示雪碧套件使用更精确的碰撞模型来检查相互作用。这种模型更昂贵,所以应该谨慎使用。当任何一个物体使用精确碰撞时,都会接触和测试多个运动位置,以确保检测到所有接触。

ship.physicsBody.usesPreciseCollisionDetection=是;

共有1个答案

颛孙正谊
2023-03-14

你可以设置你的精灵的node.physicsBody.usesPreciseCollisionDetection=YES;,但这并不能保证一直有碰撞标志,因为你的精灵的速度可能太高了。

您应该对您的节点应用速度限制,以防止它们运行过快。大概是这样的:

if(node.physicsBody.velocity.dx > 200)
    node.physicsBody.velocity = CGVectorMake(200, node.physicsBody.velocity.dy);

上面的代码示例将节点的右移动dx限制为200,同时保持dy(上/下)速度不变。

 类似资料:
  • 问题内容: 因此,我只是想使屏幕周围的球弹起,该球应由于重力而减慢,并像普通球一样从墙壁反射(弹起)。有人可以给出一些基础知识并且非常简单地实现吗?其他示例似乎有些“过高”,似乎超出了我想要做的事情。我已经试过了: 这是我一个人得到的最接近的东西。顺便说一下,x和y值来自加速度计。任何帮助将不胜感激,谢谢! 问题答案: 我认为您将需要三件事,即力(您拥有的x和y),速度(分别称为xVel和yVel

  • 我想我的程序跳过了while循环,但我真的不确定到底发生了什么。该函数应该通过找到GCD,然后将分子和分母除以该数字来减少分数。 我得到分子和分母的绝对值,以确保如果分数是负数,我会在最后保持它。如果分子为0,则要求我返回(0,1)。问题是关于while循环。。。似乎它被完全跳过了。有什么建议吗?

  • 提前感谢帮助我创建了一个程序,使多个弹跳球当用户点击屏幕上一个新的球应该出现并在屏幕上移动。但是当我点击屏幕上一个球出现,根本不移动。当另一个点击发生时,以前创建的球立即跳到另一个位置。 这是ball类:用于创建球 这是一个ball组件类:用于创建面板

  • 我正在用C和SFML 2.1为学校创建一个乒乓球克隆,当球以锐角撞击左侧球拍(球穿过)时,我有一个小问题。 右桨在所有角度都很好,据我所知,他们使用的是相同的代码。 这是我用于碰撞的代码:

  • 我正在创建一个弹跳球项目,每次点击鼠标时,都会以随机的速度、随机的大小和随机的位置生成弹跳球,除了一件事,一切都很完美,当球从顶部和左侧撞击墙壁时,它会完全反弹,但是当球撞击窗户的底部和右侧时,它们也会反弹,但不是完全反弹,我的意思是,球在撞击墙壁之前会从窗户的右侧反弹,当球超过窗户的一半时,会从底部反弹。问题是什么,为什么要这样做? 下面是代码:

  • 我目前有一个问题,一个'而'循环不执行。如果输入文本文件有下一行,我将循环条件设置为true。然而,当我执行我的程序时,循环没有运行。我通过添加一个“System.out.println(text)”来确认这一点,正如我所怀疑的,没有产生任何文本。 什么问题导致循环无法执行?