0

我认为做一个简单的动画会很容易,但需要几个小时,而且我还没有接近达到预期的效果......

我需要使用 xcode 为 iphone/ipad 模拟一个简单的 Flash Motion Tween

这是想要的效果:http ://www.swfcabin.com/open/1340330187

我已经尝试设置一个添加 X 位置的计时器,但它没有得到相同的效果,我的同事建议我 cocos 2d 使用动作和精灵来做到这一点,虽然我不喜欢第三方框架,但这可能会很好,但是如果有办法对 cocos 做同样的事情,我肯定会使用它。

有没有人有任何建议,我觉得它可能比我想象的更简单

谢谢大家

4

1 回答 1

1

如果你没有麻烦,你将不得不在 OpenGL 视图中进行,这真的很简单。要显示一些信息,您需要 CCLabel 类。要改变它的位置,你需要 CCMoveTo/CCMoveBy 动作,要改变不透明度,你需要 CCFadeTo/CCFadeIn/CCFadeOut 动作,要延迟你需要 CCDelayTime。为了使这一切协同工作,您需要 CCSpawn 和 CCSequence。

CCSpawn 会同时运行几个动作(例如淡入和从右移到中心),CCSequence 会一个个运行几个动作(序列淡入+移到中心,同时延迟,序列淡出+ 从中心向左移动)。然后你应该只安排方法,这将创建标签并在它们上运行操作。在代码中它将类似于

让我们定义完整的动画时间

#define ANIMATION_TIME 4.f

schedule 方法在任何你想开始动画的地方

[self schedule:@selector(runNextMessage) interval:ANIMATION_TIME];

它会runNextMessage每秒调用一次ANIMATION_TIME方法

- (void) runNextMesage
{
    NSString* message = //get next message

    CCLabelTTF* label = [CCLabelTTF labelWithString:message 
                                         dimensions:desiredDimensionsOfTheLabel 
                                          alignment:UITextAlignmentLeft 
                                      lineBreakMode:UILineBreakModeWordWrap 
                                           fontName:@"Arial" 
                                           fontSize:20.f];
    CGSize winSize = [[CCDirector sharedDirector] winSize];
    // place the label out the right border 
    [label setPosition: ccp(winSize.width + label.contentSize.width, winSize.height / 2)];

    // adding it to the screen
    [self addChild:label];

    ccTime spawnTime = ANIMATION_TIME / 3;
    // create actions to run
    id appearSpawn = [CCAction actionOne:[CCMoveTo actionWithDuration:spawnTime]
                                     two:[CCFadeIn actionWithDuration:spawnTime]];

    // create show action and disappear action

    // create result sequence
    id sequence = [CCSequence actions: appearSpawn, showAction, disappearAction, nil];
    [label runAction: sequence];
}
于 2012-06-22T04:03:34.100 回答