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

ios - 让 SKPhysicsBody 无法穿透?

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

我无法让我的墙物理实体无法穿透。如果我的玩家节点物理体以较慢的“速度”与墙壁碰撞,它就会停止。但是,如果它以很快的“速度”前进,它就会穿过墙壁。我的播放器被 PanGestureRecognizer 移动。所谓速度,我的意思是如果突然“快速”滑动或者手势不是缓慢移动的平移手势,那么玩家就会穿过墙壁。这些是我的节点属性:

  self.player.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.player.size];
  self.player.physicsBody.categoryBitMask = SVGPlayerCategory;
  self.player.physicsBody.contactTestBitMask = SVGWallCategory;
  self.player.physicsBody.collisionBitMask = SVGWallCategory;
  self.player.physicsBody.dynamic = YES;
  self.player.physicsBody.usesPreciseCollisionDetection = YES;
  self.player.physicsBody.velocity = CGVectorMake(0, 0);

        self.leftWall.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.leftWall.size];
        self.leftWall.physicsBody.categoryBitMask = SVGWallCategory;
        self.leftWall.physicsBody.contactTestBitMask = SVGPlayerCategory;
        self.leftWall.physicsBody.collisionBitMask = SVGPlayerCategory;
         self.leftWall.physicsBody.dynamic = NO;
         self.leftWall.physicsBody.resting = YES;

如果有帮助,这是我的移动方法:

-(void)dragPlayer: (UIPanGestureRecognizer *)gesture {

        CGPoint translation = [gesture translationInView:self.view];

        SKAction *move =  [SKAction moveByX:translation.x y:-translation.y  duration:0];
        [self.player runAction:move];
        [gesture setTranslation:CGPointMake(0, 0) inView:self.view];
    }

我有什么遗漏吗?



Best Answer-推荐答案


通常在纯物理驱动的世界中,实现精确的碰撞检测就足够了。

但是,由于您允许用户定位 body ,因此没有什么可以阻止用户将 body 的位置设置到墙内的某个位置或完全跳过墙。然后 Box2D 的接触解析介入并将 body 移动到碰撞之外,这取决于 body 在墙内的位置将导致 body 被移动到另一侧。

在这种情况下使用操作会适得其反。如果触摸每帧生成一个新位置,则不会发生任何运动,但这会导致 body 被设置到给定位置。尝试更改代码以直接设置玩家的位置,看看是否有任何不同。

还要注意,移动 Action 完全忽略了物理世界。如果您发出从墙的一侧到另一侧的移动,那么移动 Action 将继续在每一帧更新物理体的位置,然后 body 在此过程中解决其接触,最终将“量子隧道”从墙的一侧到另一侧。

导致此问题的部分原因可能是用户快速滑动时两个触摸位置之间的距离过大。您或许应该使用物理世界的 bodyAlongRayStart:end: 方法来测试当前位置和目标位置之间是否存在阻挡体(手势转换),如果是,则取消移动。

关于ios - 让 SKPhysicsBody 无法穿透?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19042933/

回复

使用道具 举报

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

本版积分规则

关注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