溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Cocos2D-Android-1之源碼詳解:2.ActionManagerTest

發布時間:2020-07-31 07:53:21 來源:網絡 閱讀:509 作者:abab99 欄目:移動開發

//現在我們開始注釋,他的第一個activity

package org.cocos2d.tests;


import org.cocos2d.actions.CCActionManager;

import org.cocos2d.actions.base.CCAction;

import org.cocos2d.actions.instant.CCCallFunc;

import org.cocos2d.actions.instant.CCCallFuncN;

import org.cocos2d.actions.interval.CCDelayTime;

import org.cocos2d.actions.interval.CCFadeOut;

import org.cocos2d.actions.interval.CCMoveBy;

import org.cocos2d.actions.interval.CCRotateBy;

import org.cocos2d.actions.interval.CCScaleBy;

import org.cocos2d.actions.interval.CCScaleTo;

import org.cocos2d.actions.interval.CCSequence;

import org.cocos2d.layers.CCLayer;

import org.cocos2d.layers.CCScene;

import org.cocos2d.menus.CCMenu;

import org.cocos2d.menus.CCMenuItemImage;

import org.cocos2d.nodes.CCDirector;

import org.cocos2d.nodes.CCLabel;

import org.cocos2d.nodes.CCNode;

import org.cocos2d.nodes.CCSprite;

import org.cocos2d.opengl.CCGLSurfaceView;

import org.cocos2d.opengl.CCTextureAtlas;

import org.cocos2d.types.CGPoint;

import org.cocos2d.types.CGSize;


import android.app.Activity;

import android.os.Bundle;

import android.view.Window;

import android.view.WindowManager;


// There is a downloadable demo on this test

// http://code.google.com/p/cocos2d-android-1/downloads/detail?name=ActionManagerTest.3gp&can=2&q=#makechanges

//上面是下載地址

public class ActionManagerTest extends Activity {//是個普通的activity

// private static final String LOG_TAG = ActionManagerTest.class.getSimpleName();

//上面注釋本來想獲取包名

public static final int kTagNode = 0;//

public static final int kTagGrossini = 1;

public static final int kTagSister= 2;

public static final int kTagSlider= 3;

public static final int kTagSequence= 4;


private CCGLSurfaceView mGLSurfaceView;//這個ccg的view是opengl中的類,最終還是繼承了sufaceview,先不做詳細解釋


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);//沒有標題

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);//全屏

getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,//保持不暗不關閉 

WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);


mGLSurfaceView = new CCGLSurfaceView(this);//產生這個avtivity下的surfaceview

CCDirector director = CCDirector.sharedDirector();//獲得“導演”

director.attachInView(mGLSurfaceView);//把背景給導演,導演一會把數據畫上去

director.setDeviceOrientation(CCDirector.kCCDeviceOrientationLandscapeLeft);//橫屏顯示

setContentView(mGLSurfaceView);//展示出這個view


// show FPS

CCDirector.sharedDirector().setDisplayFPS(true);//顯示fps分辨率


// frames per second

CCDirector.sharedDirector().setAnimationInterval(1.0f / 30);//設置動畫多少秒刷一幀


CCScene scene = CCScene.node();//獲得一個場景

scene.addChild(nextAction());//給場景添加一個子類


// Make the Scene active

CCDirector.sharedDirector().runWithScene(scene);//導演開始放映


}


static int sceneIdx = -1;

static Class<?> transitions[] = {

CrashTest.class,

LogicTest.class,

PauseTest.class,

RemoveTest.class,

Issue835.class,

};


@Override

public void onStart() {//下面幾個方法看名字就能明白..

super.onStart();


}


@Override

public void onPause() {

super.onPause();


CCDirector.sharedDirector().onPause();

}


@Override

public void onResume() {

super.onResume();


CCDirector.sharedDirector().onResume();

}


@Override

public void onDestroy() {

super.onDestroy();


CCDirector.sharedDirector().end();

// CCTextureCache.sharedTextureCache().removeAllTextures();

}


// 

// Actions here

// 

static CCLayer nextAction() {//實現的圖層


sceneIdx++;//動畫幀

sceneIdx = sceneIdx % transitions.length;//讓動畫的圖層幀始終循環,比如0-》1-》2-》3-》4


return restartAction();//返回的是另一個類的屬性,上述變量是全局靜態變量

}


static CCLayer backAction() {//同理回退一個圖層

sceneIdx--;

int total = transitions.length;

if (sceneIdx < 0)

sceneIdx += total;

return restartAction();

}


static CCLayer restartAction() {

try {

Class<?> c = transitions[sceneIdx];//按照數值計算顯示的圖層

return (CCLayer) c.newInstance();//返回顯示的圖層

} catch (Exception e) {

return null;

}

}



static abstract class ActionManagerDemo extends CCLayer {

CCTextureAtlas atlas;//定義一個大圖


public ActionManagerDemo() {//構造方法


CGSize s = CCDirector.sharedDirector().winSize();//從導演那里得到寬高


CCLabel label = CCLabel.makeLabel(title(), "DroidSans", 32);//畫一個label,字體是“DroidSans”,32的大小

addChild(label, 1);//把對象添加到圖層

label.setPosition(CGPoint.make(s.width / 2, s.height / 2 - 50));設置label的位置


String subtitle = subtitle();//把subtitle變成空

if( subtitle != null ) {//...這個不執行

CCLabel l = CCLabel.makeLabel(subtitle, "DroidSerif", 16);

addChild(l, 1);

l.setPosition(CGPoint.ccp(s.width/2, s.height - 80));

}

CCMenuItemImage item1 = CCMenuItemImage.item("b1.png", "b2.png", this, "backCallback");

//菜單項目1,最后點擊backCallback方法

CCMenuItemImage item2 = CCMenuItemImage.item("r1.png", "r2.png", this, "restartCallback");

//同理

CCMenuItemImage item3 = CCMenuItemImage.item("f1.png", "f2.png", this, "nextCallback");


CCMenu menu = CCMenu.menu(item1, item2, item3);//把3個項目添加進menu


menu.setPosition(CGPoint.make(0, 0));//設置菜單的位置

item1.setPosition(CGPoint.make(s.width / 2 - 100, 30));//屏幕的一半-100,30的位置

item2.setPosition(CGPoint.make(s.width / 2, 30));

item3.setPosition(CGPoint.make(s.width / 2 + 100, 30));

addChild(menu, 1);//設置順序,

}


public void restartCallback(Object sender) {//重來一遍

CCScene s = CCScene.node();

s.addChild(restartAction());

CCDirector.sharedDirector().replaceScene(s);

}


public void nextCallback(Object sender) {//下一個動畫

CCScene s = CCScene.node();//建立一個場景

s.addChild(nextAction());//在場景添加下一個動畫的圖層

CCDirector.sharedDirector().replaceScene(s);//把當前的動畫的圖層替換掉,其實是放在圖層棧頂

}


public void backCallback(Object sender) {//上一個

CCScene s = CCScene.node();

s.addChild(backAction());

CCDirector.sharedDirector().replaceScene(s);

}


public String title() {//返回沒題目

return "No Title!";

}


public String subtitle() {//返回空

return null;

}

}


static class CrashTest extends ActionManagerDemo {//繼承了剛才建的通用類

public CrashTest() {//構造

super();//繼承方法


CCSprite child = CCSprite.sprite("grossini.png");//用這張圖建立一個精靈

child.setPosition(CGPoint.ccp(200,200));//設置這個精靈的地點

addChild(child, 1);//把這個圖層添加到圖層中


//Sum of all action's duration is 1.5 second.

child.runAction(CCRotateBy.action(1.5f, 90));//讓這個圖像執行一個旋轉動作1.5秒,90度,立即執行,是旋轉,不是旋轉到

child.runAction(CCSequence.actions(//執行一個隊列,挨個運行,是個迭代類

CCDelayTime.action(1.4f),//隊列中有第一個是延時1.4秒

CCFadeOut.action(1.1f) ));//淡出在1.1秒


//After 1.5 second, self will be removed.

this.runAction(CCSequence.actions(

CCDelayTime.action(1.4f),//延遲1.4秒

CCCallFunc.action(this, "removeThis")//執行方法,這個類中的removeThis方法

));


}


public void removeThis() {

this.getParent().removeChild(this, true);//把他從他父類立去除,以后在父類里就找不到也連接不到他了

this.nextCallback(null);//播下一個,括號里本來就是個沒用的參數..

}


@Override

public String title(){

return "Test 1. Should not crash";//返回Test 1. Should not crash

}

}



static class LogicTest extends ActionManagerDemo {//同理

public LogicTest() {

super();


CCSprite grossini = CCSprite.sprite("grossini.png");//創建精靈,同理

addChild(grossini);

grossini.setPosition(CGPoint.ccp(200,200));


grossini.runAction(CCSequence.actions( //執行動作

CCMoveBy.action(1.0f, CGPoint.ccp(150,0)),//相對移動

CCCallFuncN.action(this, "bugMe")));//執行bugMe方法

}


public void bugMe(CCNode node) {

node.stopAllActions(); //After this stop next action not working, if remove this stop everything is working

node.runAction(CCScaleTo.action(2.0f, 2.0f));//比例放大

}


public String title() {

return "Logic test";

}

}


static class PauseTest extends ActionManagerDemo {

public PauseTest() {

super();

}

public void onEnter() {

//

// This test MUST be done in 'onEnter' and not on 'init'

// otherwise the paused action will be resumed at 'onEnter' time

//

super.onEnter();


//

// Also, this test MUST be done, after [super onEnter]

//

CCSprite grossini = CCSprite.sprite("grossini.png");//同理創建精靈

addChild(grossini, 0, kTagGrossini);

grossini.setPosition(CGPoint.ccp(200,200));


CCAction action = CCMoveBy.action(1.0f, CGPoint.ccp(150,0));//動作相對移動,CCMoveBy是個靜態類,但是他的action方法在內部創建了他的實例,CCMoveBy就是把moveto的ccdelta值變成了自己的pos


CCActionManager.sharedManager().addAction(action, grossini, true);//得到動作控制器,用這個動作控制器,把action放進grossini節點中,動作控制器是零時建的,但是他自己的引用是個靜態變量,所以只有一個


this.schedule("unpause", 3);//設置一個時間表,間隔3

}


public void unpause(float dt) {

unschedule("unpause");//這就停止了..

CCNode node = getChildByTag(kTagGrossini);//得到這樣一個節點

CCActionManager.sharedManager().resume(node);//恢復節點,就是讓暫停狀態為false;

}


@Override

public String title() {

return "Pause Test";

}


public String subtitle() {

return "After 3 seconds grossini should move";

}

}


static class RemoveTest extends ActionManagerDemo {//同理

public RemoveTest() {

super();


CCMoveBy move = CCMoveBy.action(2,CGPoint.ccp(200,0));//移動


CCCallFunc callback = CCCallFunc.action(this, "stopAction");//得到某個函數


CCSequence sequence = CCSequence.actions(move, callback);

sequence.setTag(kTagSequence);


CCSprite child = CCSprite.sprite("grossini.png");

child.setPosition(CGPoint.ccp(200,200));

this.addChild(child, 1, kTagGrossini);


child.runAction(sequence);

}


public void stopAction(Object sender) {//以下均同理...

CCNode sprite = getChildByTag(kTagGrossini);

sprite.stopAction(kTagSequence);

}


public String title() {

return "Remove Test";

}


public String subtitle() {

return "Should not crash. Testing issue #841";//以下均同理...

}

}


static class Issue835 extends ActionManagerDemo {//同理

public Issue835() {

super();

}

public void onEnter() {

super.onEnter();


CGSize s = CCDirector.sharedDirector().winSize();//仍然是獲得窗口大小


CCSprite grossini = CCSprite.sprite("grossini.png");//以下均同理...

addChild(grossini, 0, kTagGrossini);


grossini.setPosition(CGPoint.ccp(s.width/2, s.height/2));


// An action should be scheduled before calling pause, otherwise pause won't pause a non-existang target

grossini.runAction(CCScaleBy.action(2.0f, 2.0f));


CCActionManager.sharedManager().pause(grossini);//以下均同理...

grossini.runAction(CCRotateBy.action(2.0f, 360));


this.schedule("resumeGrossini", 3);

}


public String title() {

return "Issue 835";

}


public String subtitle() {

return "Grossini only rotate/scale in 3 seconds";

}


public void resumeGrossini(float dt) {

this.unschedule("resumeGrossini");//以下均同理...


CCNode grossini = this.getChildByTag(kTagGrossini); 

CCActionManager.sharedManager().resume(grossini);

}

}

}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女