Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅在执行单击时运行动画(cocos2d iPhone)_Iphone_Animation_Cocos2d Iphone_Touch - Fatal编程技术网

仅在执行单击时运行动画(cocos2d iPhone)

仅在执行单击时运行动画(cocos2d iPhone),iphone,animation,cocos2d-iphone,touch,Iphone,Animation,Cocos2d Iphone,Touch,我希望仅在执行触摸时运行动画,然后将动画恢复到原始帧 我想在从.plist单击时运行此动画 我必须只在你点击时运行动画,而不是在应用程序启动时。我的动画有25帧 这是我的代码: // HelloWorldLayer.h #import "cocos2d.h" // HelloWorldLayer @interface HelloWorldLayer : CCLayer { CCSprite *_bear; CCAction *_walk

我希望仅在执行触摸时运行动画,然后将动画恢复到原始帧

我想在从.plist单击时运行此动画

我必须只在你点击时运行动画,而不是在应用程序启动时。我的动画有25帧

这是我的代码:

    // HelloWorldLayer.h

    #import "cocos2d.h"

    // HelloWorldLayer
    @interface HelloWorldLayer : CCLayer
    {
    CCSprite *_bear;
    CCAction *_walkAction;
    CCAction *_moveAction;
    BOOL _moving;

    }

    +(CCScene *) scene;

    @property (nonatomic, retain) CCSprite *bear;
    @property (nonatomic, retain) CCAction *walkAction;
    @property (nonatomic, retain) CCAction *moveAction;

    @end

    ///////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////

    // HelloWorldLayer.m

    #import "HelloWorldLayer.h"

    // HelloWorldLayer implementation
    @implementation HelloWorldLayer

    @synthesize bear = _bear;
    @synthesize moveAction = _moveAction;
    @synthesize walkAction = _walkAction;

    +(CCScene *) scene
    {
    // 'scene' is an autorelease object.
    CCScene *scene = [CCScene node];

    // 'layer' is an autorelease object.
    HelloWorldLayer *layer = [HelloWorldLayer node];

    // add layer as a child to scene
    [scene addChild: layer];

    // return the scene
    return scene;
    }

    // on "init" you need to initialize your instance
    -(id) init
    {
    // always call "super" init
    // Apple recommends to re-assign "self" with the "super" return value
    if( (self=[super init])) {

    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"llamanim24fps.plist"];

    // Create a sprite sheet with the Happy Bear images
    CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"llamanim24fps.png"];
    [self addChild:spriteSheet];

    // Load up the frames of our animation
    NSMutableArray *walkAnimFrames = [NSMutableArray array];
    for(int i = 1; i < 27; i++) {
    [walkAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"llamasinfondo00%02d.png", i]]];
    }
    CCAnimation *walkAnim = [CCAnimation animationWithFrames:walkAnimFrames delay:0.2f];

    // Create a sprite for our bear
    //CGSize winSize = [CCDirector sharedDirector].winSize;
    self.bear = [CCSprite spriteWithSpriteFrameName:@"llamasinfondo0000.png"];
    _bear.position =ccp(391, 300);
    self.walkAction = [CCRepeatForever actionWithAction:
    [CCAnimate actionWithAnimation:walkAnim restoreOriginalFrame:NO]];
    //[_bear runAction:_walkAction];
    [spriteSheet addChild:_bear];

    self.isTouchEnabled = YES;

    }
    return self;
    }

    -(void) registerWithTouchDispatcher
    {
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
    }

    -(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
    return YES;
    }

    -(void) ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event {
    CGPoint touchLocation = [touch locationInView: [touch view]];
    touchLocation = [[CCDirector sharedDirector] convertToGL: touchLocation];
    touchLocation = [self convertToNodeSpace:touchLocation];

    [_bear stopAction:_moveAction];

    if (!_moving) {
    [_bear runAction:_walkAction];
    }
    // [_bear runAction:_walkAction];
    self.moveAction = [CCSequence actions:

    [CCCallFunc actionWithTarget:self selector:@selector(bearMoveEnded)],
    nil];

    _moving = TRUE;

    }

    -(void)bearMoveEnded {
    [_bear stopAction:_walkAction];
    _moving = FALSE;
    }
    // on "dealloc" you need to release all your retained objects
    - (void) dealloc
    {
    // don't forget to call "super dealloc"
    [super dealloc];
    }
    @end

    //////////////////////////
但是,当我触摸屏幕时,动画将永远运行

请帮我做这个

试穿一下这个

我用了另一种方式:

在init中运行您的操作 若您有更新方法,那个么创建标志来确定它是否正在移动-若为真->恢复操作;否则暂停

如果玩家是伊斯马金{ [player resumeSchedulerAndActions]; }否则{ [玩家暂停日程安排]; }


它对我有效:

那么,你想在触摸精灵时启动动画,在再次触摸时停止动画吗??
[_bear stopAction:_moveAction];
[_bear stopAction:_walkAction];

if (_moving == TRUE) {
[_bear runAction:_walkAction];
}