我的目標:如果玩家可以追溯到它不指望同一個實現了評分系統,只有當一個級別的單位是球員一度落後,因此計數兩次評分系統計算多次
我現在有一個評分系統,每當我點擊我的球員在我的比賽中前進時,就會給比分標籤增加一個評分系統,這有其缺陷,因爲球員可以倒退,然後點擊前進,這將再次計入比分,如果玩家往後退去。
我想出了計算玩家背後有多少個平臺(LevelUnits)的想法,這樣如果他們回去的話,當他們決定再次前進時,它不會計算同一個平臺(LevelUnit)兩次。
這是我想出了:
override func update(_ currentTime: TimeInterval) {
let scoreLabel = childNode(withName: "scoreLabel") as! Score // links the scorelabel with Score class
worldNode.enumerateChildNodes(withName: "levelUnit") {
node, stop in
let nodeLocation:CGPoint = self.convert(node.position, from: self.worldNode) //converts cordinates of level units with the world node.
let player1Location:CGPoint = self.convert(self.thePlayer.position, from: self.worldNode)
if (nodeLocation.y < (player1Location.y) - self.levelUnitHeight) { // checks to see if the node is behind the player's position
self.countLevelUnits += 1
}
if (self.countLevelUnits > scoreLabel.number) {
while self.countLevelUnits > scoreLabel.number {
scoreLabel.addOneToScore()
}
} else if (self.countLevelUnits < scoreLabel.number) {
// Do Nothing
}
}
}
唯一的問題是,由於他們常球員後面的代碼數了多次,並將繼續這樣做,除非我關閉遊戲。有沒有一種方法可以統計玩家位置後面的每個玩家一次的LevelUnits?
編輯1:LEVEL單元類
class LevelUnit:SKNode {
//General Level Unit and Object Variables
var imageName:String = ""
var levelUnitSprite:SKSpriteNode = SKSpriteNode()
var levelUnitWidth:CGFloat = 0
var levelUnitHeight:CGFloat = 0
var theType:LevelType = LevelType.normal
let thePlayer:Player = Player(imageNamed: "Frog")
var levelUnitPicker = 0
var levelUnitsSpawned = 0
var levelUnitScored:Bool = false
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init() {
super.init()
}
func setUpLevel(){
imageName = 「Wall」
let theSize:CGSize = CGSize(width: levelUnitWidth, height: levelUnitHeight) //defines the size background sprite as defined by the height and width of level unit
let tex:SKTexture = SKTexture(imageNamed: imageName) //defines the testue that the backgroundsprite will have.
levelUnitSprite = SKSpriteNode(texture: tex, color: SKColor.black, size: theSize)
scoredLevelUnit = false
self.addChild(levelUnitSprite) //adds the level unit to the scene
self.name = "levelUnit" //names the whole backgroundsprite under the name level Unit
self.position = CGPoint(x: levelUnitSprite.size.width/2, y: 0)
//The Level Types Physics Body
if (theType == LevelType.blank) {
levelUnitSprite.physicsBody = SKPhysicsBody(rectangleOf: levelUnitSprite.size)
levelUnitSprite.physicsBody!.categoryBitMask = BodyType.normal.rawValue
levelUnitSprite.physicsBody!.contactTestBitMask = BodyType.normal.rawValue
levelUnitSprite.physicsBody!.isDynamic = false
} else if (theType == LevelType.normal) {
levelUnitSprite.physicsBody = SKPhysicsBody(rectangleOf: levelUnitSprite.size)
levelUnitSprite.physicsBody!.categoryBitMask = BodyType.normal.rawValue
levelUnitSprite.physicsBody!.contactTestBitMask = BodyType.normal.rawValue
levelUnitSprite.physicsBody!.isDynamic = false
} else if (theType == LevelType.floating) {
levelUnitSprite.physicsBody = SKPhysicsBody(rectangleOf: levelUnitSprite.size)
levelUnitSprite.physicsBody!.categoryBitMask = BodyType.floating.rawValue
levelUnitSprite.physicsBody!.contactTestBitMask = BodyType.floating.rawValue
levelUnitSprite.physicsBody!.isDynamic = false
}
}
如果您使用自定義子類的級別單位,您可以輕鬆地添加一個'Bool'屬性'scored';當你「評分」這個對象時,設置'scored = true',那麼下次你可以檢查'得分== true'並且不再評分 – Paulw11
@ Paulw11我添加了屬性,但是因爲我通過節點枚舉評分代碼中的同名如何訪問每個單個levelunit的評分屬性?我應該在levelUnit類中添加類似「self.levelUnitScored = false」的東西,然後在評分代碼中創建levelUnit類的實例嗎?如果你可以看看謝謝,我已經更新了我的原始帖子和我的級別單元類。 – Astrum