嘿所以我正在制作这个项目,玩家必须将平台一直跳到顶部。一些怪物在整个游戏中随机产生。所以当你从下面击中它们时,我们的想法是失去游戏,但如果你跳过它们就可以继续游戏。我已经完成了玩家跳过它并摧毁怪物的部分,但是当你从下面击中它时我仍然卡在那部分上以失去游戏。关于如何设法做到这一点的任何想法?对于这个项目,我遵循了Ray Wenderlich关于如何让游戏像大型跳跃的教程。 所以在我的GameScene上,我有didBeginContact方法:
func didBeginContact(contact: SKPhysicsContact) {
var updateHUD = false
let whichNode = (contact.bodyA.node != player) ? contact.bodyA.node : contact.bodyB.node
let other = whichNode as GameObjectNode
updateHUD = other.collisionWithPlayer(player)
if updateHUD {
lblStars.text = String(format: "X %d", GameState.sharedInstance.stars)
lblScore.text = String(format: "%d", GameState.sharedInstance.score)
}
}
然后从GameObjectNode场景调用该方法。
class MonsterNode: GameObjectNode {
var monsterType: MonsterType!
override func collisionWithPlayer(player: SKNode) -> Bool {
if player.physicsBody?.velocity.dy < 0 {
player.physicsBody?.velocity = CGVector(dx: player.physicsBody!.velocity.dx, dy: 450.0)
if monsterType == .Normal {
self.removeFromParent()
}
}
当玩家跳到怪物顶部时,怪物将从父母身上移除。我试图设置如果当与怪物碰撞时玩家的速度大于0,那么玩家将从父母移除。然后,当我回到我的GameScene时,我可以在我的更新方法中声明一些内容,以便当从父调用中删除播放器时调用endGame()方法。
override func update(currentTime: NSTimeInterval) {
if gameOver {
return
}
if Int(player.position.y) > endLevelY {
endGame()
}
if Int(player.position.y) < maxPlayerY - 500 {
endGame()
}
}
当然我无法完成这项工作,但我仍然无法做到。所以如果有人能帮助我如何设法做到这一点,或者可能是一些可以指导我这样做的教程我会非常感激!先感谢您。
答案 0 :(得分:0)
首先,您使用didBeginContact方法确定玩家和怪物之间是否已建立联系。接下来,您将比较玩家和怪物的y位置。如果怪物的位置大于玩家的...... BANG,玩家就会死亡。
代码示例假设您有多个怪物,每个怪物都有一个唯一的名称,并将它们全部存储在一个数组中。
- (void)didBeginContact:(SKPhysicsContact *)contact {
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (CategoryMonster | CategoryPlayer)) {
for(SKSpriteNode *object in monsterArray) {
if(([object.name isEqualToString:contact.bodyB.node.name]) || ([object.name isEqualToString:contact.bodyA.node.name])) {
if(object.position.y > player.position.y) {
// moster is above player
}
}
}
}
几个笔记......如果你在任何时候有多个活跃的怪物,你需要为每个怪物都有一个独特的名字。原因是你需要知道哪个怪物联系了玩家,只有你可以区分怪物才会发生。因此,每个人的唯一名称。
对y位置的if检查很简单,只需要+1 y即可完成。如果您的玩家可以与怪物进行侧面接触而不是死亡,您可以将if条件更改为if(object.position.y > player.position.y+50)
,以确保联系人实际上来自底部。
(我不太熟悉Swift,所以代码示例在Obj-C中。)