2014-12-22 3 views
2

이 문제는 충분히 쉬운 것처럼 보입니다. 그러나 대답을 찾을 수 없으며 웹에서 답을 얻으려는 검색 용어가 일반적인 것처럼 보입니다. 그래서 도움이 되길 원합니다.배열에있는 객체의 메서드에 액세스합니다.

나는 신속한에서 SKSpriteNode 객체 : 일부 노드를 추가

var images:[SKSpriteNode] = []; 

: 나는의 액세스 방법을있을 때

images+=[SKSpriteNode(imageNamed: "StarrySky")]; 
images+=[SKSpriteNode(imageNamed: "StarrySky")]; 
images+=[SKSpriteNode(imageNamed: "StarrySky")]; 
images+=[SKSpriteNode(imageNamed: "StarrySky")]; 

는 지금은 일치하지 않는 결과를 얻을 수함께 : 예를 들어

images[0].position 

: 때때로 작동

func moveBackground(direction: CGVector) { 
    //works 
    let origin = images[0].position; 
    var newPoint = CGPoint(x: origin.x + direction.dx, y: origin.y + direction.dy); 
    positionBackground(newPoint); 

    //next line has a compilation error. 
    positionBackground(images[0].position + direction); 
} 

, 다른 시간 엑스 코드는 Could not find member position을 말하고있다. 배열에 SKSpriteNode 대신에 position이라는 멤버가 없다는 것을 알았습니다.

내가 어떻게 배열 자체가 아니라 배열에있는 개체의 메서드를 지정하는 모든 아이디어?

+0

비고 : 당신이

positionBackground(images[0].position + direction) 

이을 단축 할 경우

다음 사용자 정의 + 연산자를 정의해야 스위프트 언어에서 세미콜론을 필요로하지 않습니다 성명서의 끝. –

+0

고마워요 - 실제로는 세미콜론은 선택 사항이며 계속 사용하기로 결정했습니다. xcode가 자동으로 줄을 나누면 명령의 끝인지 쉽게 알 수 있습니다. – TPot

답변

1

오류 메시지 "구성원 위치를 찾을 수 없습니다"는 잘못된 것이며 문제 은 배열에 저장된 스프라이트 노드와 아무런 관련이 없습니다.

images[0].position + direction 
    CGPoint--^ CGVector--^ 

및 스위프트는 인수로 (CGPoint, CGVector) 소요 + 연산자를 가지고 있지 않습니다

문제

당신이 CGPointCGVector을 추가하려고한다는 것입니다. 당신은 점과 벡터 구성 요소 지혜, 즉를 추가하기 때문에

귀하의 다른 코드

let origin = images[0].position 
var newPoint = CGPoint(x: origin.x + direction.dx, y: origin.y + direction.dy) 
positionBackground(newPoint) 

작품 당신은 CGFloat 인수와 함께 + 연산자를 호출합니다.

func +(lhs: CGPoint, rhs: CGVector) -> CGPoint { 
    return CGPoint(x: lhs.x + rhs.dx, y: lhs.y + rhs.dy) 
} 
+0

당신이 옳을 수도 있습니다. 나는 유효한 구문이었던 다른 예제들을 가지고 있었지만 지금은 (xcode를 다시 시작한 후에) 그것을 다시 복제 할 수 없다고 확신한다. 이걸 조금 열어두고 다른 실패를 유발할 수 있는지 알아 보겠습니다. 벡터를 추가하는 것과 관련하여 나는 밤늦게 혼란스러워했고 벡터 산술 (https://github.com/seivan/VectorArithmetic)을위한 신속한 라이브러리가 표준 SDK의 일부라고 생각했습니다. – TPot

관련 문제