Swift SpriteKit动画未按预期加载。我做错了什么?
我在做一个简单的游戏。英雄应该跳过敌人,如果他们相撞,敌人应该吃掉英雄。我有4种敌人在英雄面前随机繁殖。我使用每个敌人阵阵的第一个精灵作为主精灵,其余的用于动画。但是当它们碰撞时——什么也没有发生,它仍然是第一个精灵。 我就是这样做的: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
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做一个切换声明,这样就可以了。再次感谢!