【问题标题】:'Cannot convert value of type 'Int' to expected argument type 'CGPoint''无法将'Int'类型的值转换为预期的参数类型'CGPoint'
【发布时间】:2025-12-26 05:20:16
【问题描述】:

在代码中:

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {

    self.runAction(SKAction.playSoundFileNamed("ball.mp3", waitForCompletion: false))

    let touch = touches.first
    var location:CGPoint = touch!.locationInNode(self)

    var torpedo: SKSpriteNode = SKSpriteNode(imageNamed: "heartbullet")
    torpedo.position = player.position

    torpedo.physicsBody = SKPhysicsBody(circleOfRadius: torpedo.size.width/2)
    torpedo.physicsBody?.dynamic = true
    torpedo.physicsBody?.categoryBitMask = photoTorpedoCategory
    torpedo.physicsBody?.contactTestBitMask = alienCategory
    torpedo.physicsBody?.collisionBitMask = 0
    torpedo.physicsBody?.usesPreciseCollisionDetection = true

    var offset:CGPoint = vecSub(location, b: torpedo.position)
    if (offset.y < 0){
        return
    }

    self.addChild(torpedo)

    var direction:CGPoint = vecNormalize(offset)

    var shotLength:CGPoint = vecMult(direction, b: 1000)
    var finalDestination:CGPoint = vecAdd(shotLength, b: torpedo.position)

    let velocity = 568/1
    let moveDuration:Float = Float(self.size.width) / Float(self.size.width) / Float(velocity)

    var actionArray:[SKAction] = [SKAction]()
    actionArray.append(SKAction.moveTo(finalDestination, duration: NSTimeInterval(moveDuration)))
    actionArray.append(SKAction.removeFromParent())

    torpedo.runAction(SKAction.sequence(actionArray))
}


func vecAdd(a:CGPoint, b:CGPoint)->CGPoint{
    return CGPointMake(a.x + b.x, a.y + b.y)
}

func vecSub(a:CGPoint, b:CGPoint)->CGPoint{
    return CGPointMake(a.x - b.x, a.y - b.y)
}

func vecMult(a:CGPoint, b:CGPoint)->CGPoint{
    return CGPointMake(a.x * b.x, a.y * b.y)
}

func vecLenght(a:CGPoint)->CGFloat{
    return CGFloat(sqrtf(CFloat(a.x)*CFloat(a.x)+CFloat(a.y)*CFloat(a.y)))
}

func vecNormalize(a:CGPoint)->CGPoint{
    let length:CGFloat = vecLenght(a)
    return CGPointMake(a.x / length, a.y / length)
}

它在这一行显示错误:

var shotLength:CGPoint = vecMult(direction, b: 1000)

'无法将'Int'类型的值转换为预期的参数类型'CGPoint'

我一直在寻找,但我不知道如何解决它。

有人可以帮我吗?

【问题讨论】:

  • 由于错误似乎与vecMult 的定义有关,而您没有将其包括在内,因此很难判断真正的问题是什么。
  • 我想你指的是这个:func vecMult(a:CGPoint, b:CGPoint)->CGPoint{ return CGPointMake(a.x * b.x, a.y * b.y) }

标签: ios swift cgpoint


【解决方案1】:

然后,您的问题是您有一个需要 2 个点的函数,并且您正在向它传递一个点和一个数字。您可能希望将 vecMult 重新定义为:

func vecMult(a:CGPoint, b:CGFloat) -> CGPoint {
    return CGPoint(x:a.x * b, y:a.y * b)
}

【讨论】:

  • @norm 请不要忘记接受回答您问题的答案。这表明你的问题已经解决了。
最近更新 更多