Двоичный оператор '+ =' нельзя применить к двум операндам 'CGPoint' - PullRequest
0 голосов
/ 05 декабря 2018

Основная проблема синтаксиса , но я не могу ее решить

func updateForeground(){
    worldNode.enumerateChildNodes(withName: "foreground", using: { node, stop in
        if let foreground = node as? SKSpriteNode{
            let moveAmount = CGPoint(x: -self.groundSpeed * CGFloat(self.deltaTime), y: 0)
            foreground.position += moveAmount
            if foreground.position.x < -foreground.size.width{
                foreground.position += CGPoint(x: foreground.size.width * CGFloat(self.numberOfForegrounds), y: 0)
            }    
        }
    })
}

Ошибка в строке foreground.position += moveAmount и

foreground.position += CGPoint(x: foreground.size.width * CGFloat(self.numberOfForegrounds), y: 0)

Все говорят, что используют этот код:

public func + (A: CGPoint, B: CGPoint) -> CGPoint {
     return CGPoint(x: A.x + B.x, y: A.y + B.y)
}

ИЛИ;

примерно так:

A.position.x += b.position.x
A.position.y += b.position.y

Пожалуйста, помогите ...

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Вы хотите использовать оператор '+ =' .

Для этого:

func updateForeground() {

    worldNode.enumerateChildNodes(withName: "foreground", using: { node, stop in
    if let foreground = node as? SKSpriteNode{
        let moveAmount = CGPoint(x: -self.groundSpeed * CGFloat(self.deltaTime), y: 0)
        foreground.position.x += moveAmount.x
        foregorund.postion.y += moveAmount.y

        if foreground.position.x < -foreground.size.width {
          foreground.position.x += foreground.size.width * CGFloat(self.numberOfForegrounds)
        }    
    }
})
0 голосов
/ 05 декабря 2018

Оператор + не определен для CGPoint, поэтому вы не можете использовать его или +=.Вы уже нашли правильную функцию, которую нужно определить, просто убедитесь, что вы действительно используете ее.На самом деле вы можете пойти еще дальше и также определить оператор += для CGPoint.

extension CGPoint {
    public static func +(lhs:CGPoint,rhs:CGPoint) -> CGPoint {
        return CGPoint(x: lhs.x + rhs.x, y: lhs.y + rhs.y)
    }

    public static func +=(lhs:inout CGPoint, rhs:CGPoint) {
        lhs = lhs + rhs
    }
}

func updateForeground(){
    worldNode.enumerateChildNodes(withName: "foreground", using: { node, stop in
        if let foreground = node as? SKSpriteNode {
            let moveAmount = CGPoint(x: -self.groundSpeed * CGFloat(self.deltaTime), y: 0)
            foreground.position += moveAmount
            if foreground.position.x < -foreground.size.width {
                foreground.position += CGPoint(x: foreground.size.width * CGFloat(self.numberOfForegrounds), y: 0)
            }    
        }
    })
}
...