我遇到了问题。当smokeMoveBy动作开始时,在其他地方的屏幕上发现一个小烟雾气泡,然后是烟雾的移动路径。 这只发生在我使用scaleX和scaleY时。 调度程序中每1秒调用smokeLoop方法。 这里的自我是一层。
任何解决方案?
我的代码如下,
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 :(得分: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}
);
基本上:将图层位置的倒数(意思是,{300,200}将变为{-300,-200})除以图层{480,320}的大小,然后添加{0.5,0.5}(我想要的)我的锚总是居中+偏移)
无论如何,你可能需要制定一个完全不同的公式,但这对我有用。每次移动图层时,我都必须将它应用到我的锚点。
祝你好运,希望这会有所帮助!