gpt4 book ai didi

ios - 让 SKPhysicsBody 坚不可摧?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:45:20 24 4
gpt4 key购买 nike

我无法让我的墙体物理体变得坚不可摧。如果我的播放器节点物理体以较慢的“速度”与墙壁碰撞,它就会停止。但是,如果它以快速“速度”行进,它就会穿过墙壁。我的播放器被 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];
}

有什么我想念的吗?

最佳答案

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

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

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

另请注意,移动 Action 完全忽略了物理世界。如果你发出一个从墙的一侧到另一侧的移动,那么移动 Action 将继续每帧更新物理物体的位置,然后物体沿途解决它的接触,最终将“量子隧道”从墙的一侧到另一侧。

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

关于ios - 让 SKPhysicsBody 坚不可摧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19042933/

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