仅在执行单击时运行动画(cocos2d iPhone)
我希望仅在执行触摸时运行动画,然后将动画恢复到原始帧 我想在从.plist单击时运行此动画 我必须只在你点击时运行动画,而不是在应用程序启动时。我的动画有25帧 这是我的代码:仅在执行单击时运行动画(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
// 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];
}