gpt4 book ai didi

ios - 当 SpriteNode 离开屏幕时在 Swift 中增加分数

转载 作者:可可西里 更新时间:2023-11-01 00:57:10 26 4
gpt4 key购买 nike

我已经搜索了很多,但找不到任何有用的东西。我正在使用 Swift 3 在 SpriteKit 中创建游戏。

SpriteNodes 在屏幕的右侧生成,并使用 SKActions 移动到屏幕的左侧,重复此过程。

我需要一种方法,当 SpriteNode 通过我的玩家(在场景中间)时,分数会上升 1。

Following Block 从右到左移动我的敌人角色。

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 个敌人角色(这很奇怪)...

最佳答案

一种解决方案是在 SKSceneupdate 方法中添加 incrementScore 函数:

override func update(_ currentTime: TimeInterval) {

if !enemyBird1.isScored {
if enemyBird1.position.x > -self.frame.size.width / 2 {
score += 1
scoreLabel.text = String(score)
enemyBird1.isScored = true
}
}

}

update 方法将触发每一帧并检查小鸟是否已经通过屏幕中心。如果有,它将被标记为已得分,因此不会再次计算。

这将要求您将 isScored 属性添加到您的 EnemyBird 类。

假设您的 EnemyBird 是一个 SKSpriteNode,它看起来像这样:

class EnemyBird: SKSpriteNode {

var isScored = false

// other properties, inits, functions, etc

}

关于ios - 当 SpriteNode 离开屏幕时在 Swift 中增加分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43925730/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com