cocos2d-android学习五 ---- 动作(Action)

如果想让一个游戏生动有趣,精灵的操作等相对应的知识就需要深入的学习。

其中一大块的内容就是动作(Action)。


上篇文章我们给精灵添加了一个跳跃的动作,让不会动的精灵跳跃到指定的位置。

这就让精灵看起来很有趣了,下面我们就开始学习吧!!


动作类对象通常不会单独存在。

动作类对象需要作用到精灵、图层等对象上才会发挥作用。

动作类包含很多类型,例如位移,缩放,旋转等;


动作类的分类


CCFiniteTimeAction分为瞬时动作和延时动作。

         基础的瞬时动作有CCFlipX(X轴镜像翻转),CCFlipY(Y轴镜像翻转),

         CCHide(隐藏),CCShow(显示)等。

     

//1生成动作对象
CCFlipX plifx = CCFlipX.action(true);
//2使用精灵对象执行动作
player.runAction(plifx);
//filpy和show的方法和这一样
CCHide hide = CCHide.action();
player.runAction(hide );

        延时动作有CCMoveTo(移动至目标位置),CCRotateTo(旋转指定角度),

        CCScaleTo(缩放至指定倍数),CCBlink(闪烁)等。

CGPoint pos = CGPoint.ccp(400,400);
		CCMoveTo moveTo = CCMoveTo.action(3, pos);
		player.runAction(moveTo);
CCRotateTo rotateTo = CCRotateTo.action(3, 180);//时间,角度(顺时针)
		player.runAction(rotateTo);

其他的大家可以去试试。

游戏中向量的运用;

我们前文中提过CGpoint不仅可以用作点还可以用作向量  CGpoint的向量用法是什么呢 代码

CGPoint point = CGPoint.ccp(100, 100);
		player.setPosition(point);
		
		CGPoint deltapoint = CGPoint.ccp(0, 100);
		CGPoint apiont = CGPoint.ccpAdd(point, deltapoint);
		aplayer.setPosition(apiont);

创建了另一个精灵aplayer 他的位置是在apoint ,apoint是用了cppAdd方法得到的 。

添加到你的代码中看看有神马效果。当然也可以用cppSub试一试向量的减法,cppMult向量的乘法。

基于向量的MoveBy方法的运用

CGPoint movepoint = CGPoint.ccp(50, 50);
		CCMoveBy moveBy = CCMoveBy.action(3, movepoint);
		player.runAction(moveBy);

我们看到精灵是向着右上方运动而不是向着(50,50)这个点移动。

这就是MoveBy和MoveTo之间的区别。


下面的这几个ACTION不是具体动作而是一个逻辑

CCSequence的使用

代表的是一个队列,可以放很多的动作队形顺序执行。

例如旋转和移动,精灵执行时会先旋转然后移动

CGPoint point = CGPoint.ccp(100, 100);
		player.setPosition(point);
		
		CGPoint targetPoint = CGPoint.ccp(300, 300);
		CCMoveTo moveTo = CCMoveTo.action(2, targetPoint);
		CCRotateTo rotateTo = CCRotateTo.action(2, 180);
		CCSequence seq = CCSequence.actions(moveTo, rotateTo);
		
		player.runAction(seq);

当然开可以放进去更多其它的动作。


CCSpawn的使用

可以加入多个对象,不过这个不是顺序的去执行而是一块执行。

同样是移动和旋转,精灵执行时会在移动中旋转。

		player = CCSprite.sprite("sprite.png");
		CGPoint point = CGPoint.ccp(100, 100);
		this.addChild(player);
		player.setPosition(point);
		
		CGPoint targetPoint = CGPoint.ccp(300, 300);
		CCMoveTo moveTo = CCMoveTo.action(2, targetPoint);
		CCRotateTo rotateTo = CCRotateTo.action(2, 180);
		CCScaleTo scaleTo = CCScaleTo.action(2, 2);
		CCSpawn spawn = CCSpawn.actions(scaleTo, rotateTo,moveTo);
		player.runAction(spawn);


CCCallFuncN的使用

一个动画执行完后执行一个回调函数,一般情况下是和CCSequence一起使用。

                player = CCSprite.sprite("sprite.png");
		CGPoint point = CGPoint.ccp(100, 100);
		this.addChild(player);
		player.setPosition(point);
		
		CGPoint targetPoint = CGPoint.ccp(300, 300);
		CCMoveTo moveTo = CCMoveTo.action(2, targetPoint);
		CCRotateTo rotateTo = CCRotateTo.action(2, 180);
		CCScaleTo scaleTo = CCScaleTo.action(2, 2);
		
		CCCallFuncN func = CCCallFuncN.action(this, "onActionFinished");
		
		CCSequence seq = CCSequence.actions(moveTo, rotateTo,scaleTo,func);		
		player.runAction(seq);
public void onActionFinished(){
		System.out.println("onActionFinished");
	}


CCFollow的使用

一个精灵紧跟着另一个精灵的脚步移动,就是跟随动作。


其它一些动作的使用

  CCFadeIn,CCFadeOut淡入淡出动画

		player = CCSprite.sprite("sprite.png");
		CGPoint point = CGPoint.ccp(100, 100);
		this.addChild(player);
		player.setPosition(point);
		//CCFadeIn,CCFadeOut淡入淡出动画
		CCFadeIn fadeIn = CCFadeIn.action(3);
		player.runAction(fadeIn);
CCTintTo,CCTintBy颜色变化的动画

player = CCSprite.sprite("sprite.png");
		CGPoint point = CGPoint.ccp(100, 100);
		this.addChild(player);
		player.setPosition(point);
		//CCTintTo,CCTintBy颜色变化的动画
		ccColor3B color3b = ccColor3B.ccc3(255, 0, 5);
		CCTintTo tintTo = CCTintTo.action(3, color3b);
		player.runAction(tintTo);
         //CCTintBy原来的颜色加上指定的染色    
               ccColor3B color3b = ccColor3B.ccc3(-255, 250, 5);
		CCTintBy tintBy = CCTintBy.action(3, color3b);
player.runAction(tintBy);


CCRepeat重复动画

                player = CCSprite.sprite("sprite.png");
		CGPoint point = CGPoint.ccp(100, 100);
		this.addChild(player);
		player.setPosition(point);
		CGPoint targetPoint = CGPoint.ccp(400, 400);
		CCMoveTo moveTo = CCMoveTo.action(2, targetPoint);
		CCMoveTo moveTo2 = CCMoveTo.action(2, point);
		CCRotateTo rotateTo = CCRotateTo.action(2, 180);
		CCScaleTo scaleTo = CCScaleTo.action(2, 2);
		
		CCCallFuncN func = CCCallFuncN.action(this, "onActionFinished");
		
		CCSequence seq = CCSequence.actions(moveTo, rotateTo,scaleTo,moveTo2,func);		
		//重复执行3次seq动作
		CCRepeat repeat = CCRepeat.action(seq, 3);
		player.runAction(repeat);

CCRepeatForever无限重复动作

                player = CCSprite.sprite("sprite.png");
		CGPoint point = CGPoint.ccp(100, 100);
		this.addChild(player);
		player.setPosition(point);
                CGPoint targetPoint = CGPoint.ccp(400, 400);
		CCMoveTo moveTo = CCMoveTo.action(2, targetPoint);
		CCMoveTo moveTo2 = CCMoveTo.action(2, point);
                CCSequence seq = CCSequence.actions(moveTo, moveTo2);
		CCRepeatForever forever = CCRepeatForever.action(seq);
		player.runAction(forever);

这些都是在GameLayer中的下面是这个类的全部代码 

public class GameLayer  extends CCLayer{

     
	//生命一个精灵对象
	CCSprite player;
	CCSprite aplayer;
	public GameLayer(){
    	  //初始化精灵对象
		
		aplayer = CCSprite.sprite("sprite.png");
		//将精灵对象添加之布景层当中
		
		//设置精灵对象的位置
		//player.setPosition(100, 100);
		//CGPoint通常用于表示坐标或者向量
		player = CCSprite.sprite("sprite.png");
		CGPoint point = CGPoint.ccp(100, 100);
		this.addChild(player);
		player.setPosition(point);
		
		//CCFadeIn,CCFadeOut淡入淡出动画
		//CCFadeIn fadeIn = CCFadeIn.action(3);
		//player.runAction(fadeIn);
		
		//CCTintTo,CCTintBy颜色变化的动画
		//ccColor3B color3b = ccColor3B.ccc3(-255, 250, 5);
		//CCTintBy原来的颜色加上指定的染色值
		//CCTintBy tintBy = CCTintBy.action(3, color3b);
		//精灵的颜色变为制定值
		//CCTintTo tintTo = CCTintTo.action(3, color3b);
		//player.runAction(tintBy);
		//CCRepeatForever无限重复,CCRepeat重复动画
		//CCRepeatForever 
		
		CGPoint targetPoint = CGPoint.ccp(100, 400);
		CCMoveTo moveTo = CCMoveTo.action(2, targetPoint);
		CCMoveTo moveTo2 = CCMoveTo.action(2, point);
		CCRotateTo rotateTo = CCRotateTo.action(2, 180);
		CCRotateTo rotateTo2 = CCRotateTo.action(2, 360);
		CCScaleTo scaleTo = CCScaleTo.action(2, 2);
		CCScaleTo scaleTo2 = CCScaleTo.action(2, 1);
		
		CCCallFuncN func = CCCallFuncN.action(this, "onActionFinished");
		
		CCSpawn spawn = CCSpawn.actions(moveTo, rotateTo,scaleTo);
		CCSpawn spawn2 = CCSpawn.actions(scaleTo2,rotateTo2,moveTo2);
		CCSequence seq = CCSequence.actions(spawn,spawn2,func);
		//重复执行3次seq动作
		CCRepeat repeat = CCRepeat.action(seq, 3);
		player.runAction(repeat);
		
		//CCRepeatForever forever = CCRepeatForever.action(seq);
		//player.runAction(forever);
		//CCSpawn spawn = CCSpawn.actions(scaleTo, rotateTo,moveTo);
		//player.runAction(spawn);
	/*	CGPoint deltapoint = CGPoint.ccp(0, 100);
		CGPoint apiont = CGPoint.ccpAdd(point, deltapoint);
		aplayer.setPosition(apiont);*/
		
		/*CGPoint movepoint = CGPoint.ccp(50, 50);
		CCMoveBy moveBy = CCMoveBy.action(3, movepoint);
		player.runAction(moveBy);*/
		
		
	/*	CGPoint target = CGPoint.ccp(400, 100);
		CCJumpTo jumpTo = CCJumpTo.action(1, target, 200, 2);//(动作执行的时间,跳到什么位置,跳多高,跳几次)
		
		//使用精灵对象执行该动作
		player.runAction(jumpTo);*/
		
		/*CGPoint pos = CGPoint.ccp(400,400);
		CCMoveTo moveTo = CCMoveTo.action(3, pos);
		player.runAction(moveTo);
		
		CCRotateTo rotateTo = CCRotateTo.action(5, 180);//时间,角度(顺时针)
		aplayer.runAction(rotateTo);
		
		CCBlink blink = CCBlink.action(5, 30);//闪烁间隔,次数
		aplayer.runAction(blink);*/
	}
	
	public void onActionFinished(){
		System.out.println("onActionFinished");
	}

}

其中注释的是其它的动作对象,大家可以把注释去掉看看效果


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值