2009-12-18 172 views
0

我遇到问题。当smokeMoveBy动作开始时,屏幕上的其他位置会出现一个小烟雾,然后是烟雾的移动路径。 这只有当我使用scaleX和scaleY时才会发生。 调度器中每1秒调用一次smokeLoop方法。 这里的自我是一层。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

不知道这是你的问题,但我有一个问题与Cocos2D中,缩放和移动,这是我解决了移动anchorPoint。

我想要做的是放大(缩放)并移动图层。如果位置为{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} 
); 

基本上:将所述层位置的倒数(意思,{300200}将成为{-300,-200})通过的尺寸图层{480,320},然后添加{0.5,0.5}(因为我希望我的锚始终位于中心+偏移处)

无论如何,您可能需要制定一个完全不同的公式,但这对我很有用。每次移动图层时,我都必须将其应用于我的定位点。

祝你好运,希望这有助于!