2012-08-23 8 views
0

저는 ARC와 함께 작동 할 수 있도록 마스터 브랜치에 있습니다.Cocos2d 스케일링 스프라이트가 아티팩트를 발생시킵니다.

사용자가 스프라이트에 닿으면 스프라이트가 1.1 배로 확장되는 방법을 구현했습니다. 여러 건드린 터치는 서로의 위에 구축 된 여러 개의 스케일링 동작을 대기열에 넣습니다. 때때로 스프라이트의 작은 버전이 크기가 조정 된 버전 위에 표시되는 이상한 유물을 얻습니다. enter image description here

더 많은 배경 :

여기 스크린 샷입니다 내가 사용하는, 그래서 내가 텍스처 아틀라스를 사용하고 있습니다 :

sprite = [super spriteWithSpriteFrameName:anObject.filename]; 

가 스프라이트를 초기화 할 수 있습니다. 이것은 OpenGL/cocos2d의 버그입니까? 이 유물을 멈추는 방법에 대한 조언이 있으십니까?

EDIT : 저는 CCSprite를 서브 클래스하고 있지만, 스프라이트의 인스턴스가 하나 밖에 없다고 말할 수 있습니다. (super에 대한 호출은 클래스 메소드에 있습니다.) 기본적으로 사용자는 스프라이트가 수행 할 동작 목록을 정의합니다. 작업 목록은 사용이 중단 될 수 있습니다

[self stopAllActions] 

내가 했어 조치를 문제없이 CCMoveBy 및 CCRotateBy의 서브 클래스를 사용하여. 이 아티팩트를 일으키는 CCScaleBy의 가장 최근 서브 클래스입니다. 이러한 액션의 하위 클래스에서 액션에서 아무 것도 변경하지 않고 특정 변수를 추적하여 인터럽트 이후에 작업을 올바르게 다시 시작할 수 있습니다.

+0

왜 슈퍼를 사용하고 있습니까? 그냥 [CCSprite spriteWithSpriteFrameName : name];이 아니어야합니다. 나는 혼란스러워. – tallen11

답변

1

당신은 아마도 CCSprite를 서브 클래 싱하고 있습니까, 당신의 서브 클래스에서 CCSprite 인스턴스 변수를 추가 했습니까?

두 개의 스프라이트가 표시됩니다. 슈퍼 클래스 스프라이트와 인스턴스 변수 스프라이트. 다른 스프라이트가 때때로 만 나타나는 경우는 스프라이트를 하위로 추가하는 순서 또는 zOrder 속성에 따라 달라질 수 있습니다.

+0

CCSprite를 서브 클래 싱하는 중이지만 CCSprite 인스턴스 변수가 있다고 생각하지 않습니다. 하지만 스프라이트 뒤에 선을 그려 넣기 위해 CCSprite 클래스 내에서 여러 개의 CCSprite를 만들지 만 아무런 문제없이 잠시 동안 계속 진행되고 있습니다. artifact는 모션 줄무늬를 그리지 않는 CCScaleby를 사용할 때만 나타납니다. –

관련 문제