• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - SUVAT 数学不会在 SpriteKit 的物理引擎中添加(iOS - Objective C)

[复制链接]
菜鸟教程小白 发表于 2022-12-13 06:24:32 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在使用 SpriteKit 的内置物理引擎为 iOS 构建游戏。基本上它涉及一个弹跳球,它通过我手动设置它的初始速度移动,并通过重置与地板的接触事件中的速度来弹跳。

问题是,这个环境的实际数学并没有加起来。使用“SUVAT”方程可以很容易地确定球在以一定速度被抛出后到达地板时的 x 位移应该有多远,但是(重力设置为 -9.81),它几乎不会移动几个像素。

我将问题简化为只是尝试向上(在 y 方向)射球一定距离,同样的事情发生了,它向上移动了几个点然后就掉到了地板上,至少 20th它应该移动多远。

这就是我设置物理环境的方式:

self.physicsWorld.contactDelegate = self;
self.physicsWorld.gravity = CGVectorMake(0.0, -9.81);

然后这是我生成这个球(向上射击)示例的函数。从数学上讲,它应该达到塔的高度:

-(void)generateTestBall {
self.ball = [SKSpriteNode spriteNodeWithImageNamed"ball"];
SKSpriteNode * tower = [SKSpriteNode spriteNodeWithImageNamed"player"];
self.ball.position = CGPointMake(self.scene.size.width/2,self.scene.size.height/2);
self.ball.size = CGSizeMake(20,20);
self.ball.color = [SKColor redColor];
self.ball.colorBlendFactor = 1;

tower.position = CGPointMake(self.scene.size.width/2 + 20,self.scene.size.height/2+100);
tower.size = CGSizeMake(20,200);
tower.color = [SKColor blueColor];
tower.colorBlendFactor = 1;
[self addChild:tower];
[self addChild:self.ball];

self.ball.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:10];
self.ball.physicsBody.affectedByGravity = YES;
self.ball.physicsBody.linearDamping = NO;
self.ball.physicsBody.dynamic = YES;
CGFloat ballVel = sqrt(2*9.81*tower.size.height);
NSLog(@"%f",ballVel);
self.ball.physicsBody.velocity = CGVectorMake(0.0f, ballVel);

}

请有人解释我做错了什么?我已经仔细检查了我的数学(我是一名数学学生,所以祈祷这不是问题)!

谢谢! 史蒂夫



Best Answer-推荐答案


所以我终于设法弄清楚了。以防其他人遇到同样的问题,我会在这里发布答案:

问题在于,尽管重力(显然)以 ms^-2 为单位,速度为 m2^-1(以复制地球),但 Objective C 中的任何距离都以 POINTS 为单位而不是所需的 METRES 形式。因此,使用从 SKSpriteNodes 等获取的 x、y 位置/大小值进行的任何计算都将是一个特定因素。

经过几次测试后,我发现该因子大约为 157。这意味着您必须将 POINTS 中的任何尺寸/距离乘以 157 才能获得适用于 SUVAT 的相对“米”值。

实际数字本身看起来有点荒谬,因为它们都非常大(速度、距离等),但这实际上并不构成问题,因为它们现在都相对于彼此起作用!

希望这对任何人都有帮助! 史蒂夫

关于ios - SUVAT 数学不会在 SpriteKit 的物理引擎中添加(iOS - Objective C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29676701/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap