游戏的制作如播放**,拥有四大核心,包括: 导演、场景、图层、演员 。通过它们之间的不同配合,实现丰富多彩的效果。
public class CocosActivity extends AppCompatActivity {
private CCDirector mCcDirector;
@Override
protected void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
CCGLSurfaceView ccglSurfaceView =new CCGLSurfaceView(this);
setContentView(ccglSurfaceView);
导演,全局只有一个,单例模式创建
mCcDirector = CCDirectorsharedDirector();
开启绘制(开始拍**)
mCcDirectorattachInView(ccglSurfaceView);
帧率,每秒刷新的次数,与手机性能有关
//ccDirectorsetDisplayFPS(true);
设置帧率为60(记得把帧率文件放进项目中)
//ccDirectorsetAnimationInterval(1/60f);
设置横屏
//ccDirectorsetDeviceOrientation(CCDirectorkCCDeviceOrientationLandscapeLeft);
屏幕适配,会基于不同屏幕大小进行适配
mCcDirectorsetScreenSize(1920,1080);
场景
CCScene ccScene = CCScenenode();
图层
CCLayer ccLayer =CCLayernode();
给场景添加图层
ccSceneaddChild(ccLayer);
导演运行场景
mCcDirectorrunWithScene(ccScene);
}
@Override
protected void onResume() {
superonResume();
mCcDirectoronResume();
}
@Override
protected void onPause() {
superonPause();
mCcDirectoronPause();
}
@Override
protected void onDestroy() {
superonDestroy();
mCcDirectorend();
}
1、平移
参数1是移动时间,参数2是目标位置坐标,ccp方法是把坐标转换为cocos2d的坐标
CCMoveTo ccMoveTo = CCMoveToaction(3,ccp(200,0));
与上不同的是,第2个参数代表水平移动200,竖直不移动,即偏移量
CCMoveBy ccMoveBy =CCMoveByaction(3,ccp(200,0));
2、旋转
参数1时间,参数2角度,旋转中心是左下角的点,顺时针转
CCRotateBy ccRotateBy =CCRotateByaction(3,360);
与上不同的是,逆时针转(捷径,顺时针转270==逆时针转90)
CCRotateTo ccRotateTo =CCRotateToaction(3,270);
3、缩放
参数1时间,参数2X方向缩放,参数3Y方向缩放
CCScaleBy ccScaleBy =CCScaleByaction(3,2,2);
参数1时间,参数2缩放
CCScaleTo ccScaleTo =CCScaleToaction(3,2);
4、跳跃(参数1时间,参数2目标点,参数3跳跃高度,参数4跳跃次数)
CCJumpBy ccJumpBy =CCJumpByaction(3,ccp(0,0),100,3);
5、淡入淡出(参数是时间)
CCFadeIn ccFadeIn =CCFadeInaction(2);
CCFadeOut ccFadeOut =CCFadeOutaction(2);
6、贝塞尔曲线
点的含义,从point1出发,经过point2,到达endPosition
CCBezierConfig ccBezierConfig =new CCBezierConfig();
ccBezierConfig controlPoint_1 =ccp(100,50);
ccBezierConfig controlPoint_2 =ccp(200,200);
ccBezierConfig endPosition =ccp(300,100);
CCBezierBy ccBezierBy =CCBezierByaction(2,ccBezierConfig);
7、加速度
CCMoveBy ccMoveBy =CCMoveByaction(2,ccp(100,100));
渐快渐慢,参数2是加速度
CCEaseIn ccEaseIn =CCEaseInaction( ccMoveBy ,5);
CCEaseOut ccEaseOut =CCEaseOutaction( ccMoveBy ,5);
8、闪烁(时间,闪烁次数)
CCBlink ccBlink =CCBlinkaction(2,10);
9、文字(参1是显示的文字,参2是字体格式(可不填,如""),参数3是字体大小)
CCLabel ccLabel = CCLabellabelWithString("显示文字","STCAIYUNTTF",20);
设置文字颜色
ccColor3B ccColor3B =ccc3(100,50,0);
ccLabelsetColor(ccColor3B );
设置文字位置
ccLabelsetPosition(ccp(width,height));
重置文字
ccLabelsetString("显示文字");
颜色渐变(从本来的文字颜色渐变到设置的字体颜色)
CCTintBy tintBy =CCTintByaction(3,ccc3(50,-50,100));
10、循环(参数是动画效果)
CCRepeatForever ccRepeatForever =CCRepeatForeveraction(action);
11、延迟(参数是时间)
CCDelayTime ccDelayTime =CCDelayTimeaction(1);
12、反转(将一个动画倒序执行)
ccJumpByreverse();
13、同时(参数是不定长度数组)
CCSpawn ccSpawn =CCSpawnactions(action1,action2);
14、连续动画(参数是不定长度数组)
CCSequence ccSequence =CCSequenceactions(action1,action2, ccCallFunc ");
15、反射(执行一个动画方法)
CCCallFunc action(this," anim ");
被反射的执行方法
public void anim (){}
16、逐帧动画
public void walk(){
存放帧动画的集合
ArrayList ccSpriteFrames =new ArrayList<>();
String format="z_1_%dpng"; // %d和%02d代表整数,用i来取代,%d只取代i,%02d会补0
for(int i=1;i<10;i++){
CCSprite ccSprite =CCSpritesprite(Stringformat(format,i));
CCSpriteFrame ccSpriteFrame =ccSpritedisplayedFrame();
ccSpriteFramesadd(ccSpriteFrame );
}
参数1是动画名称,参数2是每一帧停留的时间,参数3是帧动画集合
CCAnimation ccAnimation =CCAnimationanimation("walk",2f,ccSpriteFrames);
参数2是否持续执行动画,如果想执行无限循环,可以使用CCRepeatForever
CCAnimate ccAnimate =CCAnimateaction(ccAnimation,false);
mCcSpriterunAction(ccAnimate);
}
17、隐藏
CCHide ccHide =CCHideaction();
18、显示
CCShow ccShow =CCShowaction();
19、跟随(参数是跟随的对象)
CCFollow ccFollow =CCFollowaction(mCCSprite);
20、执行动画(上述皆是)
mCcSpriterunAction(action);
21、工具类使用
CGPointUtil distance(point1,point2); //计算两点距离
获取声音引擎
SoundEngine engine =SoundEnginesharedEngine();
参数1是activity,SurfaceView创建时存入,参2是播放资源id(res\raw),参数3是否循环播放
engineplaySound(CCDirectortheApp,1,true);
手动停止音乐播放
enginerealesAllSounds();
生命周期跟随Activity
SoundEnginesharedEngine()resumeSound();
SoundEnginesharedEngine()pauseSound();
SoundEnginesharedEngine()realesAllSounds();
预加载播放音乐,避免播放音乐时没声音
SoundEnginesharedEngine()preloadEffect();
SoundEnginesharedEngine()preloadSound();
1、创建
CCSprite mCcSprite =new CCSprite(" picjpeg ");
2、锚点(上的一点,类似图钉,对应显示的位置)
CGPoint cgPoint =ccp(0,0);
mCcSpritesetAnchorPoint(cgPoint);
3、位置
mCcSpritesetPosition(cgPoint);
4、属性(缩放、翻转、透明度)
ccSpritesetFlipX(true); 水平翻转
ccSpritesetOpacity(255); 透明度
ccSpritesetScale(2); 缩放
5、移除(在Layer里面 *** 作)
mCcSpriteremoveSelf(); //精灵从图层中移除
( Layer )thisremoveSelf(); // 移除整个图层
6、尺寸
CGSize cgSize =CCDirectorsharedDirector()winSize();
1、游戏暂停(图层静止,将不再响应任何事件)
MapLayerthisonExit();
注意:因为图层不再响应任何事件,所以暂停按钮应该加在暂停图层的父图层上
thisgetParent()addChild(new PauseLayer());
2、游戏继续(图层恢复动态,接收点击事件)
MapLayerthisonEnter();
通用的游戏继续方法
CCDirectorsharedDirector()getRunningScene()onEnter();
3、定时器
CCScheduler ccScheduler =CCSchedulersharedScheduler();
通过反射执行方法
ccSchedulerschedule(" onScheduler ",this,2,false);
方法声明为公开类型
public void onScheduler (float f){ //实现具体逻辑
};
4、进度条
CCProgressTimer ccProgressTimer =CCProgressTimerprogressWithFile(" image/picjpeg "); //多层目录
ccProgressTimersetPosition(width,height);
thisgetParent()addChild(ccProgressTimer); //具体加到什么图层,看情况
ccProgressTimersetScale(06f);
ccProgressTimersetPercentage(2);
设置显示样式(垂直,水平)->(最后2个字母,left,right,代表进度条从左往右)
ccProgressTimersetType(CCProgressTimerkCCProgressTimerTypeHorizontalBar LR );
进度条外框 等元素,都作为精灵与进度条同级加入图层
thisgetParent()addChild(sprite);
Android坐标系的(0,0)在左上角,而Cocos2d-x坐标系的(0,0)在左下角。所以在处理Android的点击事件MotionEvent时,需要进行坐标体系的转换。
CGPoint cgPoint = convertPrevTouchToNodeSpace (event);
监听的点击范围,自定义封装点击事件
CGRect containsPoint( mCcSpritegetBoundingBox() , cgPoint );
CCMenu ccMenu =CCMenumenu();
CCSprite normalSprite =CCSpritesprite("pic_1jpeg"); //正常情况下显示的
CCSprite selectSprite =CCSpritesprite("pic_2jpeg"); //按下时显示的
注意:反射的方法需要使用pulbic修饰,参数指target,直接传this,它不是上下文Context
CCMenuItemSprite itemSprite =CCMenuItemSpriteitem( normalSprite , selectSprite , this ," onCLick ");
ccMenuaddChild( itemSprite );
thisaddChild(ccMenu); //菜单添加到图层
public void onCLick (Object obj){} //点击事件响应方法,必须用public修饰以及带参数
setIsTouchEnabled(true); //打开图层点击事件,默认关闭
模仿任何天气现象,只需要改这一句,剩下的不变
CCParticleSystem ccParticleSystem= CCParticleSnownode();
设置雪花大小
ccParticleSystemsetScale(2);
设置飘落的速度
ccParticleSystemsetSpeed(10);
设置雪花的
ccParticleSystemsetTexture(CCTextureCachesharedTextureCache()addImage("snowpng"));
thisaddChild(ccParticleSystem,1);
停止粒子系统(下雪)
ccParticleSystemstopSystem();
1、加载地图
ArrayList mCGPoints = new ArrayList<>();
CCTMXTiledMap mCctmxTiledMap = CCTMXTiledMaptiledMap(" maptmx ");
mCctmxTiledMapsetAnchorPoint(ccp(05f,0f));
mCctmxTiledMapsetPosition(width,height);
CCTMXObjectGroup cctmxObjectGroup= mCctmxTiledMapobjectGroupNamed("road");
ArrayList<HashMap<String,String>> objects = cctmxObjectGroupobjects;
for(HashMap<String,String> hashMap:objects){ //加载地图的坐标(需要经过的坐标点)
Integer x =IntegerparseInt(hashMapget("x"));
Integer y =IntegerparseInt(hashMapget("y"));
CGPoint cgPoint =ccp(x,y);
mCGPoints add(cgPoint); }
thisaddChild(mCctmxTiledMap);
在地图上添加精灵
mCCSpritesetPosition(mCGPointsget(0));
mCctmxTiledMapaddChild(mCCSprite);
地图跟随精灵的移动而移动
CCFollow ccFollow =CCFollowaction(mCCSprite);
mCctmxTiledMap runAction(ccFollow);
2、地图随手指触摸事件移动(重写触摸方法)
@Override
public boolean ccTouchesMoved(MotionEvent event) {
手指拖拽时,地图随手指移动
mCctmxTiledMaptouchMove(event,mCctmxTiledMap);
地图移动,地图上所有精灵都随之移动(地图是父亲,精灵是孩子)
mCctmxTiledMapaddChild(mCCSprite);
return superccTouchesMoved(event);
}
创建场景
CCScene ccScene =CCScenenode();
场景添加图层
ccSceneaddChild(ccLayer);
场景切换特效
CCJumpZoomTransition ccJumpZoomTransition =CCJumpZoomTransitiontransition(2,ccScene);
导演切换场景
CCDirectorsharedDirector() replaceScene (ccJumpZoomTransition);
CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。用法和ArrayList相近。
CopyOnWriteArrayList copyOnWriteArrayList = new CopyOnWriteArrayList();
setIsTouchEnabled(true); //打开点击事件
@Override
public boolean ccTouchesBegan (MotionEvent event) {
return superccTouchesBegan(event);
}
@Override
public boolean ccTouchesCancelled (MotionEvent event) {
return superccTouchesCancelled(event);
}
@Override
public boolean ccTouchesMoved (MotionEvent event) {
return superccTouchesMoved(event);
}
@Override
public boolean ccTouchesEnded (MotionEvent event) {
return superccTouchesEnded(event);
}
描述:UI频繁刷新,造成主线程的堵塞或挂起
private CCGLSurfaceView mCCGLSurfaceView;
mCCGLSurfaceView = (CCGLSurfaceView) CCDirectorsharedDirector()getOpenGLView();
mCCGLSurfaceViewqueueEvent(new Runnable() {
@Override
public void run() { //切换到主线程
}
});
描述:CCSprite运行动画时,没有表现出任何视觉效果。
原因:一个动画只能被一个CCSprite执行一次,执行完成后,原来的动画会失效。
解决:每次执行的动画,都需要重新生成,即使是相同的动画效果。
缓存:CCDirectorsharedDirector()purgeCachedData();
*** 作步骤如下:
一win764位系统搭建Android开发环境需要的软件
1cocos2d-x33beta0
2VisualStudio2012/2013
安装完占硬盘空间近10G,VisualStudio2012/2013是需要注册码。
4AndroidSDK(其中包括Eclipse)
5AndroidNDK
6Ant
7Python278不要下载3x以上版本
二软件安装
安装软件时不要安装在C盘。
1VisualStudio2012/2013
VisualStudio2012/2013安装方法像安装其他软件一样,一路下一步就可以,但是注意安装前IE浏览器版本必须是IE10以上版本。
2Python278
安装方法同上,但是不要安装在C盘。
3JAVAJDK
JAVAJDK默认安装,这个可以安装在C盘。
4cocos2d-x33beta0AndroidSDKAndroidNDKAnt这些软件都是解压包,不需要安装,解压就可以。
三cocos2d-x33beta0环境调试
1打开cocos2d-x33beta0所在的文件
[attachment=78978]
按Shift+鼠标右键,点在此次打开命令窗口。
现在可以看见画黄线的是软件变量名称,红线是变量路径。
正常的是4个变量名称4条变量路径,如果不是就需要手动添加,方法如下:
1右键计算机(XP叫我的电脑,win7叫计算机)------2属性------3高级系统设置------4环境变量------5新建
6在变量名中添加缺少的变量名,在变量值中添加路径。
如:变量名NDK_ROOT变量值D:android-ndk-r10b
软件名称变量名
cocos2d-x33beta0COCOS_CONSOLE_ROOT
AndroidSDKANDROID_SDK_ROOT
AndroidNDKNDK_ROOT
AntANT_ROOT
再次打开cocos2d-x33beta0所在的文件,按Shift+鼠标右键,点在此次打开命令窗口。
如果看到4个变量名称4条变量路径就说明变量调试正确。
四创建项目
1打开cocos2d-x33beta0所在的文件,按Shift+鼠标右键,点在此次打开命令窗口。
2键入setuppy回车
3键入cocosnew项目名称-p包名-l语言cpp-d项目路径
如:cocosnewtest-ptiaoshi-lcpp-d/test/android/cheshi
会在存放cocos2d-x33beta0的盘符里出现一个名称为tset的文件,打开文件-----projwin32-----TSETsin
在VisualStudio2013中点调试------开始执行不调试
cocos2d-x之所以能跨开发,是因为cocos2d-x的核心是调用了openglEx的api去实现的,所以理论上来说只要是支持openglEx的,都可以使用cocos2d-x去开发游戏。 我们使用cocos2d-x去实现的第一个游戏,其实是没有真正使用到-x的跨开发的
以上就是关于Android游戏开发之Cocos2d-x全部的内容,包括:Android游戏开发之Cocos2d-x、如何在win7上搭建Androidcocos2d-x-3.3开发环境、如何通过cocos creator发布原生android应用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)