package org.cocos2d.tests;
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.khronos.opengles.GL10;
import org.cocos2d.actions.base.CCAction;
import org.cocos2d.actions.base.CCFollow;
import org.cocos2d.actions.base.CCRepeatForever;
import org.cocos2d.actions.camera.CCOrbitCamera;
import org.cocos2d.actions.instant.CCCallFunc;
import org.cocos2d.actions.instant.CCCallFuncN;
import org.cocos2d.actions.instant.CCCallFuncND;
import org.cocos2d.actions.instant.CCHide;
import org.cocos2d.actions.instant.CCPlace;
import org.cocos2d.actions.instant.CCShow;
import org.cocos2d.actions.instant.CCToggleVisibility;
import org.cocos2d.actions.interval.CCAnimate;
import org.cocos2d.actions.interval.CCBezierBy;
import org.cocos2d.actions.interval.CCBezierTo;
import org.cocos2d.actions.interval.CCBlink;
import org.cocos2d.actions.interval.CCDelayTime;
import org.cocos2d.actions.interval.CCFadeIn;
import org.cocos2d.actions.interval.CCFadeOut;
import org.cocos2d.actions.interval.CCJumpBy;
import org.cocos2d.actions.interval.CCJumpTo;
import org.cocos2d.actions.interval.CCMoveBy;
import org.cocos2d.actions.interval.CCMoveTo;
import org.cocos2d.actions.interval.CCPropertyAction;
import org.cocos2d.actions.interval.CCRepeat;
import org.cocos2d.actions.interval.CCRotateBy;
import org.cocos2d.actions.interval.CCRotateTo;
import org.cocos2d.actions.interval.CCScaleBy;
import org.cocos2d.actions.interval.CCScaleTo;
import org.cocos2d.actions.interval.CCSequence;
import org.cocos2d.actions.interval.CCSpawn;
import org.cocos2d.actions.interval.CCTintBy;
import org.cocos2d.actions.interval.CCTintTo;
import org.cocos2d.config.ccMacros;
import org.cocos2d.layers.CCLayer;
import org.cocos2d.layers.CCScene;
import org.cocos2d.menus.CCMenu;
import org.cocos2d.menus.CCMenuItemImage;
import org.cocos2d.nodes.CCAnimation;
import org.cocos2d.nodes.CCDirector;
import org.cocos2d.nodes.CCLabel;
import org.cocos2d.nodes.CCNode;
import org.cocos2d.nodes.CCSprite;
import org.cocos2d.opengl.CCDrawingPrimitives;
import org.cocos2d.opengl.CCGLSurfaceView;
import org.cocos2d.opengl.CCTexture2D;
import org.cocos2d.opengl.GLResourceHelper;
import org.cocos2d.opengl.GLResourceHelper.Resource;
import org.cocos2d.types.CCBezierConfig;
import org.cocos2d.types.CGPoint;
import org.cocos2d.types.CGRect;
import org.cocos2d.types.CGSize;
import org.cocos2d.types.ccColor3B;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
// ActionsTest,there is a downloadable demo here:
// http://code.google.com/p/cocos2d-android-1/downloads/detail?name=ActionsTest.3gp&can=2&q=#makechanges
//
public class ActionsTest extends Activity {//依然是个activity的类
@H_301_149@private static final String LOG_TAG = ActionsTest.class.getSimpleName();//得到包名
@H_301_149@public static final int kTagAnimationDance = 1;//这个设为1
@H_301_149@private CCGLSurfaceView mGLSurfaceView;//得到一个cocose2d的surfaceview
@H_301_149@@Override
@H_301_149@protected void onCreate(Bundle savedInstanceState) {
@H_301_149@super.onCreate(savedInstanceState);
@H_301_149@requestWindowFeature(Window.FEATURE_NO_TITLE);//无标头
@H_301_149@getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,//全屏
@H_301_149@WindowManager.LayoutParams.FLAG_FULLSCREEN);
@H_301_149@getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
@H_301_149@WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//不会变黑
@H_301_149@mGLSurfaceView = new CCGLSurfaceView(this);//以自己的上下文建立surface,同时让导演中的上下文变成this
@H_301_149@CCDirector director = CCDirector.sharedDirector();//得到导演
@H_301_149@director.attachInView(mGLSurfaceView);//把这个view链接到导演
@H_301_149@director.setDeviceOrientation(CCDirector.kCCDeviceOrientationLandscapeLeft);//横屏
@H_301_149@setContentView(mGLSurfaceView);//把这个view展示刀屏幕上
@H_301_149@
@H_301_149@// show FPS
@H_301_149@CCDirector.sharedDirector().setDisplayFPS(true);//显示帧频率
@H_301_149@// frames per second
@H_301_149@CCDirector.sharedDirector().setAnimationInterval(1.0f / 30);//多少秒动一下
//导演是个全局的变量集合。
@H_301_149@CCScene scene = CCScene.node();//生成一个新场景,因为他不提供new方法所以这样写
@H_301_149@scene.addChild(nextAction());//给场景添加一个图层
@H_301_149@// Make the Scene active
@H_301_149@CCDirector.sharedDirector().runWithScene(scene);//把场景推到栈顶,并且下一个场景设为当前场景
@H_301_149@}
@H_301_149@static int sceneIdx = -1;
@H_301_149@static Class<?> transitions[] = {//一个类列表,方便用来实现不同的窗口
@H_301_149@ActionManual.class,
@H_301_149@ActionMove.class,
@H_301_149@ActionRotate.class,
@H_301_149@ActionScale.class,
@H_301_149@ActionJump.class,
@H_301_149@ActionBezier.class,
@H_301_149@ActionBlink.class,
@H_301_149@ActionFade.class,
@H_301_149@ActionTint.class,
@H_301_149@ActionAnimate.class,
@H_301_149@ActionSequence.class,
@H_301_149@ActionSequence2.class,
@H_301_149@ActionSpawn.class,
@H_301_149@ActionReverse.class,
@H_301_149@ActionDelayTime.class,
@H_301_149@ActionRepeat.class,
@H_301_149@ActionRepeatForever.class,
@H_301_149@ActionRotateToRepeat.class,
@H_301_149@ActionRotateJerk.class,
@H_301_149@ActionCallFunc.class,
@H_301_149@ActionCallFuncND.class,
@H_301_149@ActionReverseSequence.class,
@H_301_149@ActionReverseSequence2.class,
@H_301_149@ActionOrbit.class,
@H_301_149@ActionFollow.class,
@H_301_149@ActionProperty.class,
@H_301_149@};
@H_301_149@@Override
@H_301_149@public void onStart() {//方法的复写,以下同理
@H_301_149@super.onStart();
@H_301_149@}
@H_301_149@@Override
@H_301_149@public void onPause() {
@H_301_149@super.onPause();
@H_301_149@CCDirector.sharedDirector().onPause();
@H_301_149@}
@H_301_149@@Override
@H_301_149@public void onResume() {
@H_301_149@super.onResume();
@H_301_149@CCDirector.sharedDirector().onResume();
@H_301_149@}
@H_301_149@@Override
@H_301_149@public void onDestroy() {
@H_301_149@super.onDestroy();
@H_301_149@CCDirector.sharedDirector().end();
@H_301_149@// CCTextureCache.sharedTextureCache().removeAllTextures();
@H_301_149@}
@H_301_149@//
@H_301_149@// Actions here
@H_301_149@//
@H_301_149@static CCLayer nextAction() {//用来返回即将要画的图层
@H_301_149@sceneIdx++;
@H_301_149@sceneIdx = sceneIdx % transitions.length;
@H_301_149@return restartAction();
@H_301_149@}
@H_301_149@static CCLayer backAction() {
@H_301_149@sceneIdx--;
@H_301_149@int total = transitions.length;
@H_301_149@if (sceneIdx < 0)
@H_301_149@sceneIdx += total;
@H_301_149@return restartAction();
@H_301_149@}
@H_301_149@static CCLayer restartAction() {
@H_301_149@try {
@H_301_149@Class<?> c = transitions[sceneIdx];
@H_301_149@return (CCLayer) c.newInstance();
@H_301_149@} catch (Exception e) {
@H_301_149@return null;
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionDemo extends CCLayer {
@H_301_149@CCSprite grossini;
@H_301_149@CCSprite tamara;
@H_301_149@CCSprite kathia;
@H_301_149@public ActionDemo() @H_301_149@{
@H_301_149@super();
@H_301_149@// Example:
@H_301_149@// You can create a sprite using a Texture2D
@H_301_149@
@H_301_149@Bitmap bmp = null;
@H_301_149@InputStream is;//用流打开一个图片,变成
@H_301_149@try {
@H_301_149@is = CCDirector.theApp.getAssets().open("grossini.png");
@H_301_149@bmp = BitmapFactory.decodeStream(is);
@H_301_149@is.close();
@H_301_149@} catch (IOException e) {
@H_301_149@// TODO Auto-generated catch block
@H_301_149@e.printStackTrace();
@H_301_149@}
@H_301_149@
@H_301_149@// Keep copy for reinit texture after Activity pause
@H_301_149@final Bitmap bmpCopy = bmp.copy(bmp.getConfig(),false);//得到一个不可变的图像
@H_301_149@bmp.recycle();//原图回收
@H_301_149@
@H_301_149@CCTexture2D tex = new CCTexture2D();//新建一个纹理
@H_301_149@tex.setLoader(new GLResourceHelper.GLResourceLoader() {
@H_301_149@@Override
@H_301_149@public void load(Resource res) {
@H_301_149@Bitmap bmpForInit = bmpCopy.copy(bmpCopy.getConfig(),false);//依然是得到一个不能改变的拷贝
@H_301_149@((CCTexture2D)res).initWithImage(bmpForInit);//以此来作为res的的纹理
@H_301_149@}
@H_301_149@});
@H_301_149@grossini = CCSprite.sprite(tex);//把纹理变为精灵
@H_301_149@// or just use://或者这样用
@H_301_149@// grossini = CCSprite.sprite(bmp);
@H_301_149@// and better not to use this way at all(this is better for manually generated tex)//最好别这样用
@H_301_149@// because you have to store bmp copy in memory.
@H_301_149@// use for assets:
@H_301_149@// CCTexture2D tex = CCTextureCache.sharedTextureCache().addImage("grossini.png");//他会占用内存
@H_301_149@// grossini = CCSprite.sprite(tex);
@H_301_149@
@H_301_149@// Example:
@H_301_149@// Or you can create an sprite using a filename. PNG,JPEG and BMP files are supported. Probably TIFF too
@H_301_149@tamara = CCSprite.sprite("grossinis_sister1.png");//生成2个精灵
@H_301_149@kathia = CCSprite.sprite("grossinis_sister2.png");
@H_301_149@addChild(grossini,1);
@H_301_149@addChild(tamara,2);
@H_301_149@addChild(kathia,3);
@H_301_149@CGSize s = CCDirector.sharedDirector().winSize();//生成一个大小
@H_301_149@grossini.setPosition(CGPoint.ccp(s.width/2,s.height/3));
@H_301_149@tamara.setPosition(CGPoint.ccp(s.width/2,2*s.height/3));
@H_301_149@kathia.setPosition(CGPoint.ccp(s.width/2,s.height/2));
@H_301_149@CCLabel label = CCLabel.makeLabel(title(),"DroidSans",24);//生成一个label
@H_301_149@addChild(label);
@H_301_149@label.setPosition(CGPoint.ccp(s.width/2,s.height-50));
@H_301_149@String subtitle = subtitle();
@H_301_149@if( subtitle != null) {
@H_301_149@CCLabel l = CCLabel.makeLabel(subtitle,"DroidSerif",16);
@H_301_149@addChild(l,1);
@H_301_149@l.setPosition(CGPoint.ccp(s.width/2,s.height-80));
@H_301_149@}
@H_301_149@CCMenuItemImage item1 = CCMenuItemImage.item("b1.png","b2.png",this,"backCallback");
@H_301_149@CCMenuItemImage item2 = CCMenuItemImage.item("r1.png","r2.png","restartCallback");
@H_301_149@CCMenuItemImage item3 = CCMenuItemImage.item("f1.png","f2.png","nextCallback");
@H_301_149@CCMenu menu = CCMenu.menu(item1,item2,item3);//和之前的文章一样,生成菜单
@H_301_149@menu.setPosition(CGPoint.zero());
@H_301_149@item1.setPosition(CGPoint.ccp( s.width/2 - 100,30));
@H_301_149@item2.setPosition(CGPoint.ccp( s.width/2,30));
@H_301_149@item3.setPosition(CGPoint.ccp( s.width/2 + 100,30));
@H_301_149@addChild(menu,1);
@H_301_149@}
@H_301_149@public void restartCallback(Object sender) {//同理与上一篇的文章
@H_301_149@CCScene s = CCScene.node();
@H_301_149@s.addChild(restartAction());
@H_301_149@CCDirector.sharedDirector().replaceScene(s);
@H_301_149@}
@H_301_149@public void nextCallback(Object sender) {
@H_301_149@CCScene s = CCScene.node();
@H_301_149@s.addChild(nextAction());
@H_301_149@CCDirector.sharedDirector().replaceScene(s);
@H_301_149@}
@H_301_149@public void backCallback(Object sender) {
@H_301_149@CCScene s = CCScene.node();
@H_301_149@s.addChild(backAction());
@H_301_149@CCDirector.sharedDirector().replaceScene(s);
@H_301_149@}
@H_301_149@public void alignSpritesLeft(int numberOfSprites) {//一个通用的方法用来设定不同的大小
@H_301_149@CGSize s = CCDirector.sharedDirector().winSize();
@H_301_149@if( numberOfSprites == 1 ) {
@H_301_149@tamara.setVisible(false);
@H_301_149@kathia.setVisible(false);
@H_301_149@grossini.setPosition(CGPoint.ccp(60,s.height/2));
@H_301_149@} else if( numberOfSprites == 2 ) { @H_301_149@
@H_301_149@kathia.setPosition(CGPoint.ccp(60,s.height/3));
@H_301_149@tamara.setPosition(CGPoint.ccp(60,2*s.height/3));
@H_301_149@grossini.setVisible(false);
@H_301_149@} else if( numberOfSprites == 3 ) {
@H_301_149@grossini.setPosition(CGPoint.ccp(60,s.height/2));
@H_301_149@tamara.setPosition(CGPoint.ccp(60,2*s.height/3));
@H_301_149@kathia.setPosition(CGPoint.ccp(60,s.height/3));
@H_301_149@} else {
@H_301_149@ccMacros.CCLOG(LOG_TAG,"ActionsTests: Invalid number of Sprites");
@H_301_149@}
@H_301_149@public void centerSprites(int numberOfSprites) {//同理
@H_301_149@CGSize s = CCDirector.sharedDirector().winSize();
@H_301_149@if( numberOfSprites == 1 ) {
@H_301_149@tamara.setVisible(false);
@H_301_149@kathia.setVisible(false);
@H_301_149@grossini.setPosition(CGPoint.ccp(s.width/2,s.height/2));
@H_301_149@} else if( numberOfSprites == 2 ) { @H_301_149@
@H_301_149@kathia.setPosition(CGPoint.ccp(s.width/3,s.height/2));
@H_301_149@tamara.setPosition(CGPoint.ccp(2*s.width/3,s.height/2));
@H_301_149@grossini.setVisible(false);
@H_301_149@} else if( numberOfSprites == 3 ) {
@H_301_149@grossini.setPosition(CGPoint.ccp(s.width/2,s.height/2));
@H_301_149@kathia.setPosition(CGPoint.ccp(s.width/3,s.height/2));
@H_301_149@} else {
@H_301_149@ccMacros.CCLOG(LOG_TAG,"ActionsTests: Invalid number of Sprites");
@H_301_149@}
@H_301_149@}
@H_301_149@
@H_301_149@public String title() {
@H_301_149@return "No title";
@H_301_149@}
@H_301_149@public String subtitle() {
@H_301_149@return null;
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionManual extends ActionDemo {//第一个类的解析,当执行这个模块时,将会运行如下脚本
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@CGSize s = CCDirector.sharedDirector().winSize();
@H_301_149@tamara.setScaleX(2.5f);//设置x的比例
@H_301_149@tamara.setScaleY(-1.0f);//设置y的比例
@H_301_149@tamara.setPosition(CGPoint.ccp(100,70));
@H_301_149@tamara.setOpacity(128);//设置明暗度
@H_301_149@grossini.setRotation(120);//设置旋转角度
@H_301_149@grossini.setPosition(CGPoint.ccp(s.width/2,s.height/2));
@H_301_149@grossini.setColor(ccColor3B.ccc3( 255,0));
@H_301_149@kathia.setPosition(CGPoint.ccp(s.width-100,s.height/2));
@H_301_149@kathia.setColor(ccColor3B.ccBLUE);
@H_301_149@}
@H_301_149@public String title() {
@H_301_149@return "Manual Transformation";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionMove extends ActionDemo {//移动
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@centerSprites(3);
@H_301_149@CGSize s = CCDirector.sharedDirector().winSize();
@H_301_149@CCMoveTo actionTo = CCMoveTo.action(2,CGPoint.ccp(s.width-40,s.height-40));//设置移动动作,2秒
@H_301_149@CCMoveBy actionBy = CCMoveBy.action(2,CGPoint.ccp(80,80));//设置相对移动动作
@H_301_149@CCMoveBy actionByBack = actionBy.reverse();//反向动作自动生成
@H_301_149@tamara.runAction(actionTo);//运行
@H_301_149@grossini.runAction(CCSequence.actions(actionBy,actionByBack));//组合连续动作,不同步
@H_301_149@kathia.runAction(CCMoveTo.action(1,CGPoint.ccp(40,40)));
@H_301_149@}
@H_301_149@public String title() {
@H_301_149@return "MoveTo / MoveBy";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionRotate extends ActionDemo {//旋转
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@centerSprites(3);//3号位置,之前的一个设定位置的方法
@H_301_149@CCRotateTo actionTo = CCRotateTo.action(2,45);//旋转2秒内转到45
@H_301_149@CCRotateTo actionTo2 = CCRotateTo.action(2,-45);
@H_301_149@CCRotateTo actionTo0 = CCRotateTo.action(2,0);
@H_301_149@tamara.runAction(CCSequence.actions(actionTo,actionTo0));
@H_301_149@CCRotateBy actionBy = CCRotateBy.action(2,360);//顺时针相对转动360
@H_301_149@CCRotateBy actionByBack = actionBy.reverse();
@H_301_149@grossini.runAction(CCSequence.actions(actionBy,actionByBack));
@H_301_149@kathia.runAction(CCSequence.actions(actionTo2,actionTo0.copy()));
@H_301_149@}
@H_301_149@public String title() {
@H_301_149@return "RotateTo / RotateBy";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionScale extends ActionDemo {//大小变化
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@centerSprites(3);
@H_301_149@CCScaleTo actionTo = CCScaleTo.action(2,0.5f);//2秒钟变小0.5比例
@H_301_149@CCScaleBy actionBy = CCScaleBy.action(2,2);//2秒变大2倍
@H_301_149@CCScaleBy actionBy2 = CCScaleBy.action(2,0.25f,4.5f);//2秒,宽变小0.25,长变大4.5
@H_301_149@CCScaleBy actionByBack = actionBy.reverse();
@H_301_149@tamara.runAction(actionTo);
@H_301_149@grossini.runAction(CCSequence.actions(actionBy,actionByBack));
@H_301_149@kathia.runAction(CCSequence.actions(actionBy2,actionBy2.reverse()));
@H_301_149@}
@H_301_149@public String title() {
@H_301_149@return "ScaleTo / ScaleBy";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionJump extends ActionDemo {//跳跃
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@CCJumpTo actionTo = CCJumpTo.action(2,CGPoint.ccp(300,300),50,4);//时间,跳到哪一点,高度,次数
@H_301_149@CCJumpBy actionBy = CCJumpBy.action(2,0),4);
@H_301_149@CCJumpBy actionUp = CCJumpBy.action(2,CGPoint.ccp(0,8,4);
@H_301_149@CCJumpBy actionByBack = actionBy.reverse();
@H_301_149@tamara.runAction(actionTo);
@H_301_149@grossini.runAction(CCSequence.actions(actionBy,actionByBack));
@H_301_149@kathia.runAction(CCRepeatForever.action(actionUp));
@H_301_149@}
@H_301_149@public String title() {
@H_301_149@return "JumpTo / JumpBy";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionBezier extends ActionDemo {//曲线移动,以下省略
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@CGSize s = CCDirector.sharedDirector().winSize();
@H_301_149@//
@H_301_149@// startPosition can be any coordinate,but since the movement
@H_301_149@// is relative to the Bezier curve,make it (0,0)
@H_301_149@//
@H_301_149@// sprite 1
@H_301_149@CCBezierConfig bezier = new CCBezierConfig();
@H_301_149@bezier.controlPoint_1 = CGPoint.ccp(0,s.height/2);
@H_301_149@bezier.controlPoint_2 = CGPoint.ccp(300,-s.height/2);
@H_301_149@bezier.endPosition = CGPoint.ccp(300,100);
@H_301_149@CCBezierBy bezierForward = CCBezierBy.action(3,bezier);
@H_301_149@CCBezierBy bezierBack = bezierForward.reverse(); @H_301_149@
@H_301_149@CCSequence seq = CCSequence.actions(bezierForward,bezierBack);
@H_301_149@CCRepeatForever rep = CCRepeatForever.action(seq);
@H_301_149@// sprite 2
@H_301_149@tamara.setPosition(CGPoint.ccp(80,160));
@H_301_149@CCBezierConfig bezier2 = new CCBezierConfig();
@H_301_149@bezier2.controlPoint_1 = CGPoint.ccp(100,s.height/2);
@H_301_149@bezier2.controlPoint_2 = CGPoint.ccp(200,-s.height/2);
@H_301_149@bezier2.endPosition = CGPoint.ccp(240,160);
@H_301_149@CCBezierTo bezierTo1 = CCBezierTo.action(2,bezier2); @H_301_149@
@H_301_149@// sprite 3
@H_301_149@kathia.setPosition(CGPoint.ccp(400,160));
@H_301_149@CCBezierTo bezierTo2 = CCBezierTo.action(2,bezier2);
@H_301_149@grossini.runAction(rep);
@H_301_149@tamara.runAction(bezierTo1);
@H_301_149@kathia.runAction(bezierTo2);
@H_301_149@}
@H_301_149@
@H_301_149@public String title() {
@H_301_149@return "BezierBy / BezierTo";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionBlink extends ActionDemo {//闪烁
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@centerSprites(2);
@H_301_149@CCBlink action1 = CCBlink.action(2,10);
@H_301_149@CCBlink action2 = CCBlink.action(2,5);
@H_301_149@tamara.runAction(action1);
@H_301_149@kathia.runAction(action2);
@H_301_149@}
@H_301_149@
@H_301_149@public String title() {
@H_301_149@return "Blink";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionFade extends ActionDemo {//显影
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@centerSprites(2);
@H_301_149@tamara.setOpacity(0);
@H_301_149@CCFadeIn action1 = CCFadeIn.action(1.0f);
@H_301_149@CCFadeOut action1Back = action1.reverse();
@H_301_149@CCFadeOut action2 = CCFadeOut.action(1.0f);
@H_301_149@CCFadeIn action2Back = action2.reverse();
@H_301_149@tamara.runAction(CCSequence.actions(action1,action1Back));
@H_301_149@kathia.runAction(CCSequence.actions(action2,action2Back));
@H_301_149@}
@H_301_149@
@H_301_149@public String title() {
@H_301_149@return "FadeIn / FadeOut";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionTint extends ActionDemo {//颜色渐变
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@centerSprites(2);
@H_301_149@CCTintTo action1 = CCTintTo.action(2,ccColor3B.ccc3(255,255));
@H_301_149@CCTintBy action2 = CCTintBy.action(2,ccColor3B.ccc3(-127,-255,-127));
@H_301_149@CCTintBy action2Back = action2.reverse();
@H_301_149@tamara.runAction(action1);
@H_301_149@kathia.runAction(CCSequence.actions(action2,action2Back));
@H_301_149@}
@H_301_149@
@H_301_149@public String title() {
@H_301_149@return "TintTo / TintBy";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionAnimate extends ActionDemo {//贞贞动画
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@centerSprites(1);
@H_301_149@CCAnimation animation = CCAnimation.animation("dance");
@H_301_149@for( int i=1;i<15;i++)
@H_301_149@animation.addFrame(String.format("grossini_dance_%02d.png",i));
@H_301_149@CCAnimate action = CCAnimate.action(3,animation,false);
@H_301_149@CCAnimate action_back = action.reverse();
@H_301_149@grossini.runAction(CCSequence.actions(action,action_back));
@H_301_149@}
@H_301_149@
@H_301_149@public String title() {
@H_301_149@return "Animation";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionSequence extends ActionDemo {//连续动作
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@alignSpritesLeft(1);
@H_301_149@CCSequence action = CCSequence.actions(
@H_301_149@CCMoveBy.action(2,CGPoint.ccp(240,0)),
@H_301_149@CCRotateBy.action(2,540)
@H_301_149@);
@H_301_149@grossini.runAction(action);
@H_301_149@}
@H_301_149@
@H_301_149@public String title() {
@H_301_149@return "Sequence: Move + Rotate";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionSequence2 extends ActionDemo {
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@alignSpritesLeft(1);
@H_301_149@grossini.setVisible(false);
@H_301_149@CCSequence action = CCSequence.actions(
@H_301_149@CCPlace.action(CGPoint.ccp(200,200)),
@H_301_149@CCShow.action(),
@H_301_149@CCMoveBy.action(1,CGPoint.ccp(100,
@H_301_149@CCCallFunc.action(this,"callback1"),
@H_301_149@CCCallFuncN.action(this,"callback2"),
@H_301_149@CCCallFuncND.action(this,"callback3",Float.valueOf(1.0f))
@H_301_149@);
@H_301_149@grossini.runAction(action);
@H_301_149@}
@H_301_149@public void callback1() {
@H_301_149@CGSize s = CCDirector.sharedDirector().winSize();
@H_301_149@CCLabel label = CCLabel.makeLabel("callback 1 called",16);
@H_301_149@label.setPosition(CGPoint.ccp( s.width/4*1,s.height/2));
@H_301_149@addChild(label);
@H_301_149@}
@H_301_149@public void callback2(Object sender) {
@H_301_149@CGSize s = CCDirector.sharedDirector().winSize();
@H_301_149@CCLabel label = CCLabel.makeLabel("callback 2 called",16);
@H_301_149@label.setPosition(CGPoint.ccp( s.width/4*2,s.height/2));
@H_301_149@addChild(label);
@H_301_149@}
@H_301_149@public void callback3(Object sender,Object data) {
@H_301_149@CGSize s = CCDirector.sharedDirector().winSize();
@H_301_149@CCLabel label = CCLabel.makeLabel("callback 3 called",16);
@H_301_149@label.setPosition(CGPoint.ccp( s.width/4*3,s.height/2));
@H_301_149@addChild(label);
@H_301_149@}
@H_301_149@public String title() {
@H_301_149@return "Sequence of InstantActions";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionSpawn extends ActionDemo {//同步动画
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@alignSpritesLeft(1);
@H_301_149@CCAction action = CCSpawn.actions(
@H_301_149@CCJumpBy.action(2,4),720));
@H_301_149@grossini.runAction(action);
@H_301_149@}
@H_301_149@
@H_301_149@public String title() {
@H_301_149@return "Spawn: Jump + Rotate";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionRepeatForever extends ActionDemo {//永久重复动画
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@centerSprites(1);
@H_301_149@CCSequence action = CCSequence.actions(
@H_301_149@CCDelayTime.action(1),"repeatForever")
@H_301_149@);
@H_301_149@grossini.runAction(action);
@H_301_149@}
@H_301_149@public void repeatForever(Object sender) {
@H_301_149@CCRepeatForever repeat = CCRepeatForever.action(CCRotateBy.action(1.0f,360));
@H_301_149@((CCNode)sender).runAction(repeat);
@H_301_149@}
@H_301_149@public String title() {
@H_301_149@return "CallFuncN + RepeatForever";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionRotateToRepeat extends ActionDemo {
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@centerSprites(2);
@H_301_149@CCRotateTo act1 = CCRotateTo.action(1,90);
@H_301_149@CCRotateTo act2 = CCRotateTo.action(1,0);
@H_301_149@CCSequence seq = CCSequence.actions(act1,act2);
@H_301_149@CCRepeatForever rep1 = CCRepeatForever.action(seq);
@H_301_149@CCRepeat rep2 = CCRepeat.action(seq.copy(),10);
@H_301_149@tamara.runAction(rep1);
@H_301_149@kathia.runAction(rep2);
@H_301_149@}
@H_301_149@public String title() {
@H_301_149@return "Repeat/RepeatForever + RotateTo";
@H_301_149@}
@H_301_149@
@H_301_149@public String subtitle() {
@H_301_149@return "You should see smooth movements (no jerks). issue #390";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionRotateJerk extends ActionDemo {
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@centerSprites(2);
@H_301_149@CCSequence seq = CCSequence.actions(
@H_301_149@CCRotateTo.action(0.5f,-20),
@H_301_149@CCRotateTo.action(0.5f,20)
@H_301_149@);
@H_301_149@CCRepeat rep1 = CCRepeat.action(seq,10);
@H_301_149@CCRepeatForever rep2 = CCRepeatForever.action(seq.copy());
@H_301_149@tamara.runAction(rep1);
@H_301_149@kathia.runAction(rep2);
@H_301_149@}
@H_301_149@public String title() {
@H_301_149@return "RepeatForever / Repeat + Rotate";
@H_301_149@}
@H_301_149@
@H_301_149@public String subtitle() {
@H_301_149@return "You should see smooth movements (no jerks). issue #390";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionReverse extends ActionDemo {
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@alignSpritesLeft(1);
@H_301_149@CCJumpBy jump = CCJumpBy.action(2,4);
@H_301_149@CCSequence action = CCSequence.actions(jump,jump.reverse());
@H_301_149@grossini.runAction(action);
@H_301_149@}
@H_301_149@
@H_301_149@public String title() {
@H_301_149@return "Reverse an action";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionDelayTime extends ActionDemo {
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@alignSpritesLeft(1);
@H_301_149@CCMoveBy move = CCMoveBy.action(1,CGPoint.ccp(150,0));
@H_301_149@CCSequence action = CCSequence.actions(move,CCDelayTime.action(2),move);
@H_301_149@grossini.runAction(action);
@H_301_149@}
@H_301_149@
@H_301_149@public String title() {
@H_301_149@return "DelayTime: m + delay + m";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionReverseSequence extends ActionDemo {
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@alignSpritesLeft(1);
@H_301_149@CCMoveBy move1 = CCMoveBy.action(1,CGPoint.ccp(250,0));
@H_301_149@CCMoveBy move2 = CCMoveBy.action(1,50));
@H_301_149@CCSequence seq = CCSequence.actions(move1,move2,move1.reverse());
@H_301_149@CCSequence action = CCSequence.actions(seq,seq.reverse());
@H_301_149@grossini.runAction(action);
@H_301_149@}
@H_301_149@
@H_301_149@public String title() {
@H_301_149@return "Reverse a sequence";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionReverseSequence2 extends ActionDemo {
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@alignSpritesLeft(2);
@H_301_149@// Test:
@H_301_149@// Sequence should work both with IntervalAction and InstantActions
@H_301_149@CCMoveBy move1 = CCMoveBy.action(1,50));
@H_301_149@CCToggleVisibility tog1 = CCToggleVisibility.action();
@H_301_149@CCToggleVisibility tog2 = CCToggleVisibility.action();
@H_301_149@CCSequence seq = CCSequence.actions(move1,tog1,tog2,move1.reverse());
@H_301_149@CCRepeat action = CCRepeat.action(
@H_301_149@CCSequence.actions(seq,seq.reverse()),3);
@H_301_149@// Test:
@H_301_149@// Also test that the reverse of Hide is Show,and vice-versa
@H_301_149@kathia.runAction(action);
@H_301_149@CCMoveBy move_tamara = CCMoveBy.action(1,0));
@H_301_149@CCMoveBy move_tamara2 = CCMoveBy.action(1,CGPoint.ccp(50,0));
@H_301_149@CCHide hide = CCHide.action();
@H_301_149@CCSequence seq_tamara = CCSequence.actions(move_tamara,hide,move_tamara2);
@H_301_149@CCSequence seq_back = seq_tamara.reverse();
@H_301_149@tamara.runAction(CCSequence.actions(seq_tamara,seq_back));
@H_301_149@}
@H_301_149@
@H_301_149@public String title() {
@H_301_149@return "Reverse sequence 2";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionRepeat extends ActionDemo {
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@alignSpritesLeft(2);
@H_301_149@CCMoveBy a1 = CCMoveBy.action(1,0));
@H_301_149@CCRepeat action1 = CCRepeat.action(
@H_301_149@CCSequence.actions(CCPlace.action(CGPoint.ccp(60,60)),a1),3);
@H_301_149@CCRepeatForever action2 = CCRepeatForever.action(
@H_301_149@CCSequence.actions( a1.copy(),a1.reverse()));
@H_301_149@kathia.runAction(action1);
@H_301_149@tamara.runAction(action2);
@H_301_149@}
@H_301_149@
@H_301_149@public String title() {
@H_301_149@return "Repeat / RepeatForever actions";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionCallFunc extends ActionDemo {
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@centerSprites(3);
@H_301_149@CCSequence action = CCSequence.actions(
@H_301_149@CCMoveBy.action(2,CGPoint.ccp(200,"callback1")
@H_301_149@);
@H_301_149@CCSequence action2 = CCSequence.actions(
@H_301_149@CCScaleBy.action(2,2),
@H_301_149@CCFadeOut.action(2),"callback2")
@H_301_149@);
@H_301_149@CCSequence action3 = CCSequence.actions(
@H_301_149@CCRotateBy.action(3,360),Float.valueOf(1.0f))
@H_301_149@);
@H_301_149@grossini.runAction(action);
@H_301_149@tamara.runAction(action2);
@H_301_149@kathia.runAction(action3);
@H_301_149@}
@H_301_149@public void callback1() {
@H_301_149@// ccMacros.CCLOG(LOG_TAG,"callback 1 called");
@H_301_149@CGSize s = CCDirector.sharedDirector().winSize();
@H_301_149@CCLabel label = CCLabel.makeLabel("callback 1 called",s.height/2));
@H_301_149@addChild(label);
@H_301_149@}
@H_301_149@
@H_301_149@public void callback2(Object sender) {
@H_301_149@// ccMacros.CCLOG(LOG_TAG,"callback 2 called from:" + String.valueOf(sender));
@H_301_149@CGSize s = CCDirector.sharedDirector(). winSize();
@H_301_149@CCLabel label = CCLabel.makeLabel("callback 2 called",s.height/2));
@H_301_149@addChild(label);
@H_301_149@}
@H_301_149@
@H_301_149@public void callback3(Object sender,Object data) {
@H_301_149@// NSLog(@"callback 3 called from:%@ with data:%x",sender,(int)data);
@H_301_149@CGSize s = CCDirector.sharedDirector().winSize();
@H_301_149@CCLabel label = CCLabel.makeLabel("callback 3 called",s.height/2));
@H_301_149@addChild(label);
@H_301_149@}
@H_301_149@public String title() {
@H_301_149@return "Callbacks: CallFunc and friends";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionCallFuncND extends ActionDemo {
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@centerSprites(1);
@H_301_149@CCSequence action = CCSequence.actions(
@H_301_149@CCMoveBy.action(2,"callbackND","a different impleMetation of CCCallFuncND from iphone version")
@H_301_149@);
@H_301_149@grossini.runAction(action);
@H_301_149@}
@H_301_149@
@H_301_149@public void callbackND(Object sender,Object data) {
@H_301_149@// the action runner,grossini,is the sender.
@H_301_149@CCSprite obj = (CCSprite)sender;
@H_301_149@String msg = (String)data;
@H_301_149@
@H_301_149@obj.removeFromParentAndCleanup(true);
@H_301_149@ccMacros.CCLOGINFO("callbackND",msg);
@H_301_149@}
@H_301_149@public String title() {
@H_301_149@return "CallFuncND + auto remove";
@H_301_149@}
@H_301_149@public String subtitle() {
@H_301_149@return "CallFuncND + remove sprite. Grossini dissapears in 2s";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionOrbit extends ActionDemo {
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@centerSprites(3);
@H_301_149@CCOrbitCamera orbit1 = CCOrbitCamera.action(2,1,180,0);
@H_301_149@CCSequence action1 = CCSequence.actions(
@H_301_149@orbit1,
@H_301_149@orbit1.reverse()
@H_301_149@);
@H_301_149@CCOrbitCamera orbit2 = CCOrbitCamera.action(2,-45,0);
@H_301_149@CCSequence action2 = CCSequence.actions(
@H_301_149@orbit2,
@H_301_149@orbit2.reverse()
@H_301_149@);
@H_301_149@CCOrbitCamera orbit3 = CCOrbitCamera.action(2,90,0);
@H_301_149@CCSequence action3 = CCSequence.actions(
@H_301_149@orbit3,
@H_301_149@orbit3.reverse()
@H_301_149@);
@H_301_149@kathia.runAction(CCRepeatForever.action(action1));
@H_301_149@tamara.runAction(CCRepeatForever.action(action2));
@H_301_149@grossini.runAction(CCRepeatForever.action(action3));
@H_301_149@CCMoveBy move = CCMoveBy.action(3,-100));
@H_301_149@CCMoveBy move_back = move.reverse();
@H_301_149@CCSequence seq = CCSequence.actions(move,move_back);
@H_301_149@CCRepeatForever rfe = CCRepeatForever.action(seq);
@H_301_149@kathia.runAction(rfe);
@H_301_149@tamara.runAction(rfe.copy());
@H_301_149@grossini.runAction(rfe.copy());
@H_301_149@}
@H_301_149@public String title() {
@H_301_149@return "OrbitCamera action";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionFollow extends ActionDemo {
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@centerSprites(1);
@H_301_149@CGSize winSize = CCDirector.sharedDirector().winSize();
@H_301_149@grossini.setPosition(CGPoint.ccp(-200,winSize.height/2));
@H_301_149@CCMoveBy move = CCMoveBy.action(2,CGPoint.ccp(winSize.width*3,0));
@H_301_149@CCMoveBy move_back = move.reverse();
@H_301_149@CCSequence seq = CCSequence.actions(move,move_back);
@H_301_149@CCRepeatForever rep = CCRepeatForever.action(seq);
@H_301_149@grossini.runAction(rep);
@H_301_149@this.runAction(
@H_301_149@CCFollow.action(grossini,CGRect.make(0,(winSize.width*2)-100,winSize.height))
@H_301_149@);
@H_301_149@}
@H_301_149@public void draw(GL10 gl) {
@H_301_149@CGSize winSize = CCDirector.sharedDirector().winSize();
@H_301_149@float x = winSize.width*2 - 100;
@H_301_149@float y = winSize.height;
@H_301_149@CGPoint vertices[] = {
@H_301_149@CGPoint.ccp(5,5),CGPoint.ccp(x-5,
@H_301_149@CGPoint.ccp(x-5,y-5),CGPoint.ccp(5,y-5)
@H_301_149@};
@H_301_149@
@H_301_149@CCDrawingPrimitives.ccDrawPoly(gl,vertices,4,true);
@H_301_149@}
@H_301_149@public String title() {
@H_301_149@return "Follow action";
@H_301_149@}
@H_301_149@public String subtitle() {
@H_301_149@return "The sprite should be centered,even though it is being moved";
@H_301_149@}
@H_301_149@}
@H_301_149@static class ActionProperty extends ActionDemo {
@H_301_149@public void onEnter() {
@H_301_149@super.onEnter();
@H_301_149@centerSprites(3);
@H_301_149@CCPropertyAction rot = CCPropertyAction.action(2,"setRotation",-270);
@H_301_149@CCPropertyAction rot_back = rot.reverse();
@H_301_149@CCSequence rot_seq = CCSequence.actions(rot,rot_back);
@H_301_149@CCPropertyAction scale = CCPropertyAction.action(2,"setScale",3);
@H_301_149@CCPropertyAction scale_back = scale.reverse();
@H_301_149@CCSequence scale_seq = CCSequence.actions(scale,scale_back);
@H_301_149@CCPropertyAction opacity = CCPropertyAction.action(2,"setOpacity",255,0);
@H_301_149@CCPropertyAction opacity_back = opacity.reverse();
@H_301_149@CCSequence opacity_seq = CCSequence.actions(opacity,opacity_back);
@H_301_149@grossini.runAction(rot_seq);
@H_301_149@tamara.runAction(scale_seq);
@H_301_149@kathia.runAction(opacity_seq);
@H_301_149@}
@H_301_149@public String title() {
@H_301_149@return "PropertyAction";
@H_301_149@}
@H_301_149@public String subtitle() {
@H_301_149@return "Simulates Rotation,Scale and Opacity using a generic action";
@H_301_149@}
@H_301_149@}
}