【发布时间】:2017-05-11 21:19:45
【问题描述】:
我对此进行了很多搜索,但找不到任何可以提供帮助的内容。 我正在使用 Swift 3 在 SpriteKit 中创建游戏。
SpriteNodes 在屏幕右侧生成,并使用 SKActions 移动到屏幕左侧重复此操作。
我需要一种方法,当 SpriteNode 通过我的玩家(在场景中间)时,分数会增加一。
以下块将我的敌人角色从右到左移动。
func createEnemyBird() {
// Create Enemy Bird 1
enemyBird1 = EnemyBird(imageNamed: "enemy 1")
enemyBird1.position.x = self.frame.width + 100
enemyBird1.position.y = CGFloat.randomBetweenNumbers(firstNum: -(self.frame.size.height / 2.8), secondNum: (self.frame.size.height / 2.4))
enemyBird1.name = "EnemyBird1"
enemyBird1.initialise()
print(enemyBird1.position.y)
// Add Physics Bodys
enemyBird1.physicsBody = SKPhysicsBody(circleOfRadius: self.size.height/10)
enemyBird1.physicsBody?.allowsRotation = false
enemyBird1.physicsBody?.affectedByGravity = false
enemyBird1.physicsBody?.isDynamic = false
// Add Collision Bitmasks
enemyBird1.physicsBody?.categoryBitMask = ColliderType.Pipes
// Animate Enemy Bird
var enemyBirdAnim = [SKTexture]()
for i in 1..<5 {
let enemyName = "enemy \(i)"
enemyBirdAnim.append(SKTexture(imageNamed: enemyName))
}
let animateEnemyBird = SKAction.animate(with: enemyBirdAnim, timePerFrame: 0.08, resize: false, restore: true)
enemyBird1.run(SKAction.repeatForever(animateEnemyBird))
// Make enemy Bird Move Left
let destination = self.frame.width * 2;
let move = SKAction.moveTo(x: -destination, duration: TimeInterval(6));
let remove = SKAction.removeFromParent();
// Run Enemy Bird Mobe
enemyBird1.run(SKAction.sequence([move, remove]), withKey: "Move")
// Add Children to scene
self.addChild(enemyBird1)
}
我也有一个函数但是不知道什么时候调用它
// Score increase
func incrementScore() {
if enemyBird1.position.x == -(self.frame.size.width/2) {
score += 1
scoreLabel.text = String(score)
}
}
我尝试添加一个 SKAction Run Block 在序列中调用它,但效果不佳,因为在它实际开始计数之前大约经过了 6 个敌方角色(这很奇怪)...
【问题讨论】:
-
任何代码,只要你尝试过的计分方法和球员位置都可以使用。
标签: ios swift sprite-kit skspritenode