Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift SpriteKit动画未按预期加载。我做错了什么?_Swift_Animation_Sprite Kit_Skphysicsbody - Fatal编程技术网

Swift SpriteKit动画未按预期加载。我做错了什么?

Swift SpriteKit动画未按预期加载。我做错了什么?,swift,animation,sprite-kit,skphysicsbody,Swift,Animation,Sprite Kit,Skphysicsbody,我在做一个简单的游戏。英雄应该跳过敌人,如果他们相撞,敌人应该吃掉英雄。我有4种敌人在英雄面前随机繁殖。我使用每个敌人阵阵的第一个精灵作为主精灵,其余的用于动画。但是当它们碰撞时——什么也没有发生,它仍然是第一个精灵。 我就是这样做的: let mouseAtlas = SKTextureAtlas(named: "mouse") mouseArray.append(mouseAtlas.textureNamed("mouse_0")); mouseArray.append(mouseAtla

我在做一个简单的游戏。英雄应该跳过敌人,如果他们相撞,敌人应该吃掉英雄。我有4种敌人在英雄面前随机繁殖。我使用每个敌人阵阵的第一个精灵作为主精灵,其余的用于动画。但是当它们碰撞时——什么也没有发生,它仍然是第一个精灵。 我就是这样做的:

let mouseAtlas = SKTextureAtlas(named: "mouse") 
mouseArray.append(mouseAtlas.textureNamed("mouse_0"));
mouseArray.append(mouseAtlas.textureNamed("mouse_1"));
mouseArray.append(mouseAtlas.textureNamed("mouse_2"));
mouseArray.append(mouseAtlas.textureNamed("mouse_3"));
老鼠是敌人,饼干是英雄

mouse = SKSpriteNode(texture: mouseArray[0]);
self.mouse.position = CGPointMake(CGRectGetMaxX(self.frame) + self.cookie.size.width, self.cookieSpot + self.cookie.size.height + self.cookie.size.height / 2)
self.mouse.size = CGSizeMake(self.cookie.size.width + self.cookie.size.width / 2, self.cookie.size.height + cookie.size.height / 2)    

self.addChild(cookie)
self.addChild(mouse)
然后我将物理身体应用到他们身上:

self.cookie.physicsBody = SKPhysicsBody(circleOfRadius: CGFloat(self.cookie.size.width / 2))
self.cookie.physicsBody?.affectedByGravity = false
self.cookie.physicsBody?.categoryBitMask = ColliderType.Cookie.rawValue
self.cookie.physicsBody?.collisionBitMask = ColliderType.Pet.rawValue
self.cookie.physicsBody?.contactTestBitMask = ColliderType.Pet.rawValue

self.mouse.physicsBody = SKPhysicsBody(rectangleOfSize: self.mouse.size)
self.mouse.physicsBody?.dynamic = false
self.mouse.physicsBody?.categoryBitMask = ColliderType.Pet.rawValue
self.mouse.physicsBody?.contactTestBitMask = ColliderType.Cookie.rawValue
self.mouse.physicsBody?.collisionBitMask = ColliderType.Cookie.rawValue    
然后我尝试在接触开始时制作动画:

func didBeginContact(contact: SKPhysicsContact) {
    eatenByMouse(); eatenByHamster(); eatenByRabbit(); eatenByCat()
}

func eatenByMouse() {
    self.groundSpeed = 0
    self.cookie.hidden = true
 let animateAction = SKAction.animateWithTextures(self.mouseArray, timePerFrame: 0.1)
}
就像我说的,有4种类型的敌人,但它们实际上是一样的。我在这方面做错了什么?一个我也感兴趣的问题是,我能让物理界的敌人只在一边吗?我的意思是,如果我的英雄碰到敌人的嘴,怎么能让他被吃掉呢?如果它碰到尾巴,它会继续滚动和跳跃吗?非常感谢

您必须在创建SKAction之后运行它

func eatenByMouse() {
    self.groundSpeed = 0
    self.cookie.hidden = true
    let animateAction = SKAction.animateWithTextures(self.mouseArray, timePerFrame: 0.1)
    self.mouse.runAction(animateAction) // added line.
}

您可以使用skphysiccontact.contactPoint来检测碰撞点

谢谢大家!!这有帮助!你能帮我解决那次单侧碰撞吗?或者,也许还有一个问题。当我对敌人的外貌进行编码时,我想如果他们能出现在群体中就可以了,但现在我发现这不是很好。我如何在敌人之间设置一个随机范围?我试过了,但结果却很奇怪。我会用生成代码更新我的问题,我知道了。但我现在尝试了动画,当敌人吃掉英雄的时候——屏幕上的每个敌人都在运行那个吃掉的动画。这是为什么?让随机繁殖成为堆栈溢出中的一个新问题。这令人困惑。您正在contact eatenByMouse上运行所有动画;eatenByHamster;eatenByRabbit;eatenByCat这就是为什么所有动画都同时执行的原因。好吧,我将随机生成一个新问题!非常感谢你!我想,我会为didBeginContact做一个切换声明,这样就可以了。再次感谢!