繁体   English   中英

Swift Ints和一些双打成功,但并非所有双打

[英]Swift Ints and some Doubles working but not all Doubles

我想做的是提高调用方法spawnEnemy()的速度,并且使用带星号的数字作为Ints可以很好地工作,但是我感觉它进行得太快了,所以我想到了使用Doubles并使用小数点。 但是,如果我进入了从self.spawnRate self.spawnRate=spawnRate - 1.0 spawnRate中的self.spawnRate=spawnRate - 1.0减去金额的十分之一的位置self.spawnRate=spawnRate - 1.0 (我使用除0以外的任何值),则在模拟器中只会调用一次spawnEnemy(),然后什么也不会发生。 任何意见或建议将是巨大的。 谢谢!

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var scoreLabel: UILabel!

    var points: Int = 0

    var tickCount=0.0 //  **

    var spawnRate=15.0 // Spawn every 15 seconds to start with.....   **

    var spawnTimer:NSTimer!

    override func viewDidLoad() {

        super.viewDidLoad()

        self.tickCount=self.spawnRate

        self.spawnTimer=NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("tick"), userInfo: nil, repeats: true)

    }

    func tick() {
        if (--tickCount == 0) { // **
            self.spawnEnemy()
            self.spawnRate=spawnRate - 0.5 // Change this to determine how quickly the spawn rate increases.....    **
            self.tickCount=self.spawnRate
        }
    }
    func randomPoint() -> CGPoint {
        let randomPoint: CGPoint = CGPoint(x:CGFloat(arc4random()%320),y:CGFloat(568-arc4random()%390))
        return randomPoint
    }

    func randomColor() -> UIColor {
        let red = CGFloat(drand48())
        let green = CGFloat(drand48())
        let blue = CGFloat(drand48())
        return UIColor(red: red, green: green, blue: blue, alpha: 1.0)
    }

    func spawnEnemy() {
        let enemy: UIButton = UIButton(frame: CGRect(x: 160, y: 160, width: 100, height: 100))
        enemy.backgroundColor = randomColor()
        enemy.center = randomPoint()
        enemy.addTarget(self, action: Selector("buttonPushed:"), forControlEvents: UIControlEvents.TouchUpInside)
        self.view.addSubview(enemy)
    }
    func buttonPushed(sender : UIButton) {
        if sender.frame.height < 50 || sender.frame.width < 50 {
            sender.frame = CGRectMake(sender.frame.origin.x, sender.frame.origin.y, 50, 50)
            sender.backgroundColor = randomColor()
            sender.center = randomPoint()
            return
        }
        while sender.backgroundColor != UIColor.blackColor() {
            points = points + 1
            scoreLabel.textAlignment = .Center
            scoreLabel.text = "\(points)"
            scoreLabel.backgroundColor = UIColor.blackColor()
            sender.backgroundColor = UIColor.blackColor()
        }
    }
}

我认为正在发生的事情是您正在尝试使用相等运算符测试双精度。 问题在于, 双精度数的存储方式总是有点复杂,这使得很难将它们与相等性进行比较。 相反,您需要执行以下操作:

if (--tickCount <= 0) {

这样,您可以肯定它会变为负值,否则它可以正好超过0并继续递减计数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM