SpriteKit 动画没有在它应该加载的时候加载。我究竟做错了啥?
Posted
技术标签:
【中文标题】SpriteKit 动画没有在它应该加载的时候加载。我究竟做错了啥?【英文标题】:SpriteKit Animation isn't loading when it supposed to be. What am I doing wrong?SpriteKit 动画没有在它应该加载的时候加载。我究竟做错了什么? 【发布时间】:2015-03-11 10:28:32 【问题描述】:我正在制作一个简单的游戏。英雄应该跳过敌人,如果他们发生碰撞 - 敌人应该吃掉英雄。我在英雄面前随机生成了 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 种类型的敌人,但它们实际上是相同的。我做错了什么?我也有兴趣,我可以只在一侧制作敌人的物理体吗?我的意思是,例如,如果我的英雄碰到敌人的嘴,怎么能让它被吃掉?如果它碰到尾巴,它会继续滚动和跳跃吗?非常感谢!
【问题讨论】:
【参考方案1】:您必须在创建后运行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.
您可以使用SKPhysicsContact.contactPoint
来检测碰撞点。
【讨论】:
谢谢!它有帮助!你能帮我解决那一侧的碰撞吗?或者,也许还有一个问题。当我对敌人的外观进行编码时,我认为如果他们可以分组出现就可以了,但现在我发现这不是很好。如何让敌人之间出现随机范围?我尝试过,但最终得到了一些奇怪的东西。我将使用生成代码更新我的问题 我明白了。但是我现在尝试了动画,当敌人吃掉英雄时——屏幕上的每个敌人都会运行那个吃东西的动画。这是为什么呢? 在堆栈溢出中随机产生一个新问题。这令人困惑。 你正在运行所有的动画联系eatenByMouse(); eatenByHamster(); eatenByRabbit(); eatenByCat()
这就是为什么所有的动画都同时执行
好吧,我会随机生成一个新问题!非常感谢!我想,我会为 didBeginContact 做一个 switch 语句,这样就可以了。再次感谢!以上是关于SpriteKit 动画没有在它应该加载的时候加载。我究竟做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章