2009-12-18 1 views
0

문제가 있습니다. smokeMoveBy 동작이 시작되면 작은 연기 버블이 다른 곳의 화면과 연기의 이동 경로에 나타납니다. scaleX 및 scaleY를 사용하는 경우에만 발생합니다. 메소드 smokeLoop은 스케줄러에서 1 초마다 호출됩니다. 여기 자체는 레이어입니다.cocos2d의 연기 버블 문제

모든 솔루션?

내 코드는 다음,

CGPoint dummyPosition=ccp(600, 600); 
ParticleSystem *smoke = [ParticleSmoke node]; 
ccColor4F startColor; 
startColor.r = 1.f; 
startColor.g = 1.f; 
startColor.b = 1.f; 
startColor.a = 1.f; 
[smoke setStartColor:startColor]; 
ccColor4F endColor; 
endColor.r = 0.8f; 
endColor.g = 0.8f; 
endColor.b = 0.8f; 
endColor.a = 1.0f; 
[smoke setEndColor:endColor]; 
[smoke setLife:0.1f]; 
[smoke setScaleX:0.1f]; 
[smoke setScaleY:0.2f]; 
[smoke setStartSize:30.f]; 
[self addChild:smoke z:2]; 
[smoke setPosition:dummyPosition]; 

-(void)smokeLoop{ 
id smokeMoveBy = [MoveBy actionWithDuration:durTime position:ccp(0.f, (-1.f*480))]]; 
id smokeSeq=[Sequence actions:[Place actionWithPosition:smokeInitPosition], smokeMoveBy, nil]; 
[smoke runAction:smokeSeq]; 
} 

답변

0

이 문제입니다,하지만 난 확장과 나는 anchorPoint 이동으로 해결하는 이동적인 Cocos2D에 문제가 있다면 확실하지.

내가 원했던 것은 확대/축소 (축척) 및 레이어 이동이었습니다. 위치가 {0,0}이고 변형 점이 {0.5,0.5}이면 확대/축소가 잘 작동합니다. 그러나 만약 내가 그것을 움직이면 여전히 {0.5,0.5} 정도의 변형을 일으킬 것인데, 이것은 화면을 벗어나서 정말 이상하게 확장 될 것입니다.

해결 방법은 레이어의 위치를 ​​이동할 때마다 변형 점을 화면 가운데로 이동하는 것이 었습니다. 이것은 제가 변형 점을 움직였을 때, 스케일 연산이 새로운 중심점을 가지기 때문에 수정하기 쉬운 공식이 아니 었습니다. 기본적

layer = self.foreground; 
ccpAdd(
    ccpDivide(
     ccpNeg(layer.position), 
     (CGPoint){layer.contentSize.width, layer.contentSize.height}), 
    (CGPoint){0.5f,0.5f} 
); 

: 층 위치의 역 나눈다 (의미 {300,200}가 {-300 -200}이 될 것이다)의 크기

I 사용 끝내 수식은 다음과 같이했다 레이어 {480,320}을 추가하고 {0.5,0.5}를 추가하십시오. (앵커가 항상 중앙 + 오프셋이되도록)

어쨌든 완전히 다른 공식을 사용해야 할 수도 있습니다. 레이어를 이동할 때마다 이것을 앵커 포인트에 적용해야했습니다.

행운을 빈다.