Tag: skphysicsbody

applyForce不顺畅

希望有人能帮助。 我一直在这一个拉我的头发! 下面是我的Sprite Kit游戏中的一些控制板代码,它使用applyForce来移动英雄船。 我喜欢控制和运动的感觉,它有一些漂亮的漂移等等。但是我对它产生的animation/运动有不一致的结果。 有时(大约一半的时间)animation是非常顺利,看起来是正确的。 剩下的时间,船只animation以不同的强度结尾。 游戏中的怪兽和皮卡在SKAction各种path上SKAction 。 当英雄船发生问题时,他们的animation不会受到影响,我通常会在debugging中看到它以每秒60.0 fps的速度发生,这使我认为这不是一个帧丢失问题。 我的记忆使用是一致的,我没有看到任何大的峰值。 当这个错误发生的时候,从现场开始总是很明显的(在我开始平稳的运动之后,它就不会发生了 – 让我想起它的初始力量或者多重力量),并且一直持续到我重新开始等级或暂停和不停止游戏,在这一点上,我得到了一个完美的stream畅的animation或毛刺的animation的新行为。 我的绘图和节点都是使用地图集和预加载进行优化的,甚至当我将游戏中的大部分内容都closures(除了船和控制台之外的所有东西),我仍然在船上遇到了这个问题。 我注意到,当我插入Xcode时经常遇到这种情况,通常是在logging时(但不是总是),特别是在运行仪器时。 我的ControlPad用一个委托回到游戏场景 /* Game Scene */ @interface GameScene () <SKPhysicsContactDelegate, ControlPadDelegate> … – (void)createHero { self.heroShip = [Hero createHeroInFrame:self.frame]; [self.gameObject addChild:self.heroShip]; self.heroShip.position = CGPointMake(self.heroShip.size.width, self.frame.size.height / 2); } // Move Hero By X And Y – (void)moveHeroByX:(float)moveByX andY:(float)moveByY { […]

缩放SKSpriteNodes制作的钟摆

我有一个摆锤的工作时钟,但摆动臂不能正确缩放。 这是缩放前的样子 然后,缩放后… 钟面缩小,摇臂(绿线)也缩小,但它看起来像围绕它的中心点缩放,而不是在脸部中心的支点。 我可以通过设置swing的anchorPoint来解决这个问题,所以它可以扩展到一端而不是中心。 swing.anchorPoint = CGPointMake(0, 0.5); 但这样做会导致摆锤不摆动。 (我认为是因为物理力量被应用到摆动的anchorPoint上,如果我把它移动到一端,就是在固定的锚点上)。 我怎样才能让arm向支点伸展,并仍能摆动? 这是代码… // in my SKScene ClockFace *face = [ClockFace face]; // just an SKNode subclass face.name = @"face"; face.position = CGPointMake(150, 150); [self addChild:face]; // add the pendulum SKSpriteNode *fulcrum = [SKSpriteNode spriteNodeWithColor:[UIColor redColor] size:CGSizeMake(5, 5)]; [face addChild:fulcrum]; fulcrum.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:fulcrum.frame.size]; fulcrum.physicsBody.dynamic […]

如何设置边界到场景物理正常弹跳?

我实现了一个简单的物理来反弹一个sprite node ,除了节点之外的所有东西都在顶部和底部的屏幕上反弹。对于边来说它是好的,但是从顶部和底部的视angular来看,它们是离开屏幕的。 这是观点: 正如你所看到的那样,我的球从底部的屏幕上掉下来,在那里它碰到了其他三面。 这是因为我改变了: self.physicsBody=[SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height-100)]; 如果我使用scene frame ,那么球在顶部和底部都会离开屏幕,但是它会弹跳。 self.physicsBody=[SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]; 我的问题是为什么self.frame不足以为self.frame设置界限? 当我设置这样的边界时,唯一的条件适用于我: self.physicsBody=[SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(self.frame.origin.x, self.frame.origin.y+100, self.frame.size.width, self.frame.size.height-200)];

SpriteKit SKPhysicsBody破碎的碰撞

我有一个SKSpriteNode有一个静态的身体,从凹道与edgeChainFromPath生成。 我们把这个节点叫做房子 。 我还有另外一种SKSpriteNode ,它有一个dynamic方形体,用rectangleOfSize生成。 我们称这个节点为一个盒子 。 在我的场景中,这些箱子又被砸到房子里 ,由于他们都有尸体, 箱子应该和房子碰撞,然后弹开。 我正在滚动场景,因此创build了上述“完全相同” 房子的新实例。 我遇到的问题是一些房屋碰撞完全或部分破裂。 有些房屋应该和箱子碰撞,有的与箱子碰撞,而有的与箱子碰撞。 这个问题只发生在iPad上,从来没有在iPhone上发生。 在iPad模拟器和真正的iPad设备上都会发生。 这个问题完全是随机的,随机的房子 。 我也尝试用edgeLoopFromPath创build房子的身体,但问题依然存在。 另外,我正在画物理学,可以看到房子的物理体是完全一样的。 没有什么特别的场景或节点值得一提。 我在iOS 9使用Swift SpriteKit 。 更新 : 似乎问题是在设置家庭节点的规模。 我必须这样做才能在所有屏幕尺寸上具有普遍的外观。 仍在寻找解决scheme/解决方法…

来自Texture的SKPhysicsBody在Spritekit中给出冲突空值

我正在创build一个angular色跳跃和收集点(一些对象)的游戏。 当你点击字符从阿特拉斯执行一些animation。 当它触及分数时,分数提高1.我使用SKTexture来创buildangular色的物理体。 当我的angular色触及到这个点时,它会崩溃,并向我显示这个错误 fatal error: unexpectedly found nil while unwrapping an Optional value //码 Cat = SKSpriteNode(imageNamed: "cat"); Cat.size = CGSize(width: 100, height: 100) Cat.position = CGPoint(x: self.frame.width/2, y: self.frame.height/2) //physics Cat.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "cat"), size:CGSizeMake(100, 100)) 但是,如果我从矩形或圆形创buildPhysicsbody它工作得很好。 也许是用我用来激活我的angular色的地图集。 Cat.physicsBody = SKPhysicsBody(circleOfRadius: self.frame.width/2) 当angular色碰到蘑菇时,它会崩溃。 工作演示: https : //github.com/nak1b/demo-game-error

SKAction scaleXTo:-1

我想用SKAction *mirrorDirection = [SKAction scaleXTo:-1 y:1 duration:0.0];镜像我的SKSpriteNode SKAction *mirrorDirection = [SKAction scaleXTo:-1 y:1 duration:0.0]; 但是每次我做的时候,这个精灵的物理体就会变得混乱起来,从屏幕上掉下来。 我在精灵下面有几个物体(楼层),它们落在所有的物体上,好像它们不在那里一样。 这只发生在我镜像精灵的时候。 有人知道怎么修这个东西吗? 更新:作为一个答案build议重置物理机构不幸的是没有解决这个问题。 似乎只有物理机构的接触部分出现故障。 当小家伙像一块石头一样落下时,引力仍然有效果。 我也尝试重新由self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(self.size.width, self.size.height)]; 在self.xScale = -1; 但是这也没有解决这个问题。

SpriteKit:使用SKTextureAtlas会导致不正确的Physics Body

我正在构build我的第一个精灵套件游戏,最近阅读了一篇文章,说使用SKTextureAtlas来提高性能。 所以我把我所有的精灵图像都转移到了有组织的.atlas文件夹中,并相应地更新了代码。 不过,现在我的精灵怪异的物理机构(主要是过度扩大) 。 例如,我的玩家精灵有三个状态:飞(平),飞起来,飞下来。 这三个图像是非常相似的,有轻微的变化(arm平放,上,下) 。 在迁移到纹理图集之前,物理图像与图像相关。 然而,现在它比图像大得多,在y轴上略微拉伸。 这是我的player.atlas文件结构: 玩家飞iphone.atlas: player-flying-down@2x.png player-flying-down@3x.png player-flying-up@2x.png player-flying-up@3x.png player-flying@2x.png player-flying@3x.png 下面是我的代码示例: (Player是一个子类SKSpriteNode) let textureAtlas = SKTextureAtlas(named: "player-iphone") let playerFlyingTexture = textureAtlas.textureNamed("player-flying") let player = Player(texture: playerFlyingTexture, color: UIColor.clearColor(), size: CGSizeMake(100.0, 100.0)) let physicsBody = SKPhysicsBody(texture: playerFlyingTexture, size: CGSizeMake(100.0, 100.0)) physicsBody.dynamic = true physicsBody.affectedByGravity = true physicsBody.usesPreciseCollisionDetection = false […]

为什么这个SKPhysicsJointPin不会把这两个精灵放在一起?

我清楚地不明白SKPhysics的联合,但是networking上的信息很less,除了苹果文档。 下面的代码有什么问题,我认为应该保持头部和颈部的永久连接 – 我的意图是,他们的行为像一个针2纸,以便他们可以旋转一下,但不能完全分开。 当我运行这个代码的时候,他们掉到了他们所在的SKScene的底部,撞到了地面,然后头部掉下了身体。 也许这个关节并没有和他们一起移动,只是在他们移动的时候停留在原地。 self.head = [SKSpriteNode spriteNodeWithImageNamed:@"head.png"]; self.head.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.head.size]; self.head.physicsBody.mass = 0.05; self.head.physicsBody.dynamic = YES; self.chest = [SKSpriteNode spriteNodeWithImageNamed:@"chest_neck"]; self.chest.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.chest.size]; self.chest.physicsBody.mass = 0.05; self.chest.physicsBody.dynamic = YES; self.leftLeg = [SKSpriteNode spriteNodeWithImageNamed:@"left_leg"]; self.leftLeg.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.leftLeg.size]; self.leftLeg.physicsBody.mass = 10; self.leftLeg.physicsBody.dynamic = YES; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { self.head.position = […]

如何给屏幕边缘一个物理机构

我有一个背景精灵,我想给物理主体。 background.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(screenWidth , screenHeight)]; 问题在于精灵在屏幕边界内,我试图在碰到屏幕边缘时与这些精灵发生碰撞。 相反,它自动检测碰撞,因为我的精灵已经在背景的物理体内。 我该怎么办? 更新:以上问题现在回答我有另一个问题。 它的检测接触的方式,它与我的大小和背景的位置有什么可以帮助我的人。 //init several sizes used in all scene screenRect = [[UIScreen mainScreen] bounds]; screenHeight = screenRect.size.height; screenWidth = screenRect.size.width; //set background self.background = [SKSpriteNode spriteNodeWithImageNamed:@"GameBG3.5inchN.png"]; self.background.size = CGSizeMake(screenHeight, screenWidth); self.background.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2); //add pphysics body self.background.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:screenRect]; // 1 self.background.physicsBody.dynamic = […]

SKPhysics身体变化中心

我目前正在做一个有圆柱形物体的游戏,我用下面的方法制作了一个SKPhysicsBody: self.oval.node.physicsBody = SKPhysicsBody(texture: self.oval.node.texture, size: self.oval.node.size) 这种方法在节点周围创build了一个很好的形状,但是重心却是离开的……它在椭圆的顶端平衡。 无论如何要改变这一点,所以它在理论上最重的部分应该平衡? 谢谢!