第一课:
1、什么是Cocos2d引擎
2、为什么要使用Cocos2d引擎
3、Cocos2d引擎的特点
4、Cocos2d应用程序结构
5、总结
什么是游戏引擎:
已经编写好的游戏系统的核心组件:
渲染引擎、物理引擎、碰撞检测系统、音效引擎、脚本引擎、动画系统
没有游戏引擎也能开发游戏,但是开发的周期会变长。使用cocos2d能提高开发效率。
精灵:一切能动的物体。布景层:俗称图层。场景:每一个关卡。
Cocos2d的核心类:
1、CCDirector:导演类是游戏当中的组织者和领导者,负责调度游戏当中的一切对象和资源。
2、CCSence:场景可以简单的理解为一个关卡,多个关卡组合在一起就形成了一个游戏。
3、CCLayer:一个场景可以有多个布景层构成。
4、CCSprite:游戏当中所用可以运动的东西几乎都是精灵,一个布景层当中可以包含多个精灵。
第二课:
Cocos2d的下载地址:https://github.com/ZhouWeikuan/cocos2d
本身是一个库文件,设置成非库文件。
第三课:
1、创建一个Cocos2d应用程序。
1)创建一个Android应用程序。
2)生成一个SurfaceView对象,作为Activity当中所显示的内容。
3)得到CCDirector对象,并通过该对象设置应用程序的各种属性。
2、设置应用程序基本属性。
1)director.attachInView(mGLSurfaceView)
用于设置应用程序所使用的GL视图对象
2)director.setDeviceOrientation(CCDirector.kCCDeviceOrientationLandscapeLeft)
用于设置应用程序的方向。
3)director.setDisplayFPS(true)
设置应用程序是否需要显示应用程序的FPS值。
4)director.setAnimationInterval(1.0f/30)
设置没帧所需要的时间
3、生成场景与布景层。
1)创建一个布景层类,继承CCLayer。
2)调用CCScence的node()方法生成场景对象。
3)生成布景层对象,并添加至场景对象当中。
4)执行场景对象。
4、运行Cocos2d应用程序。
5、总结
我的第一个游戏:
一、FirstGame_MainActivity extends Activity
游戏的基本结构
package com.atgaozhen.firstgame; import org.cocos2d.layers.CCScene; import org.cocos2d.nodes.CCDirector; import org.cocos2d.nodes.CCNode; import org.cocos2d.opengl.CCGLSurfaceView; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class FirstGame_MainActivity extends Activity { //Cocos2d引擎将会把图绘制到view对象上 //是SurfaceView的自雷 private CCGLSurfaceView view=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //1、获得view view=new CCGLSurfaceView(this); setContentView(view); //2、获得CCDirector对象,获得导演。 CCDirector director=CCDirector.sharedDirector(); //3、设置应用程序的相关的属性 //设置当前游戏程序当中所使用的view对象 director.attachInView(view); //设置游戏是否显示FPS值 director.setDisplayFPS(true); //设置游戏渲染一帧所需要的时间 //每秒刷新的帧数 director.setAnimationInterval(1/30.0); //生成一个游戏场景对象 CCScene scene=CCScene.node(); //生成布景层对象 GameLayer gameLayer=new GameLayer(); //将布景层添加到游戏场景中 scene.addChild(gameLayer); //运行游戏场景 director.runWithScene(scene); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.first_game__main,menu); return true; } }
二、图层对象GameLayer
package com.atgaozhen.firstgame; import org.cocos2d.actions.interval.CCJumpTo; import org.cocos2d.layers.CCLayer; import org.cocos2d.nodes.CCSprite; import org.cocos2d.types.CGPoint; public class GameLayer extends CCLayer { //声明一个精灵对象 CCSprite player; public GameLayer(){ //初始化精灵对象 player=CCSprite.sprite("player.png"); //设置精灵对象的位置 CGPoint point=CGPoint.ccp(250,500); player.setPosition(point); //将精灵对象添加到布景层中 this.addChild(player); CGPoint target=CGPoint.ccp(700,500); CCJumpTo jumpTo=CCJumpTo.action(3,target,800,100); player.runAction(jumpTo); } }
第四课:
什么是精灵?
1、精灵是游戏当中的一个元素,通常用于代表画面当中的一个事物,例如主人公、npc和背景元素等
2、一个精灵对象通常都与一张图片关联、
3、精灵对象通常可以通过运行动作对象CCAction来产生动画效果。
public class GameLayer extends CCLayer { //声明一个精灵对象 CCSprite player; public GameLayer(){ //初始化精灵对象 player=CCSprite.sprite("player.png"); //设置精灵对象的位置 CGPoint point=CGPoint.ccp(250,500); player.setPosition(point); //将精灵对象添加到布景层中 this.addChild(player); CGPoint target=CGPoint.ccp(700,51); font-family:SimHei; font-size:18px; white-space:pre">CCJumpTo jumpTo=CCJumpTo.action(3,100); player.runAction(jumpTo); } }
方法:
CCSprite、CGPoint、CCJumpTo、CGPoint.ccp(250,500)、CCJumpTo.action(3,100);
第五课、第六课、第七课、第八课:
action
package com.example.action_1; import org.cocos2d.actions.base.CCRepeatForever; import org.cocos2d.actions.instant.CCCallFunc; import org.cocos2d.actions.instant.CCFlipX; import org.cocos2d.actions.instant.CCFlipY; import org.cocos2d.actions.instant.CCHide; import org.cocos2d.actions.interval.CCBlink; import org.cocos2d.actions.interval.CCFadeIn; import org.cocos2d.actions.interval.CCFadeOut; import org.cocos2d.actions.interval.CCJumpBy; import org.cocos2d.actions.interval.CCMoveBy; import org.cocos2d.actions.interval.CCMoveTo; import org.cocos2d.actions.interval.CCRepeat; import org.cocos2d.actions.interval.CCRotateTo; 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.layers.CCLayer; import org.cocos2d.nodes.CCSprite; import org.cocos2d.types.CGPoint; import org.cocos2d.types.ccColor3B; import android.content.Context; import android.widget.Toast; public class GameLayer extends CCLayer { CCSprite sprite; CCSprite sprite1; ccColor3B ccColor3B=null; public GameLayer(){ sprite=CCSprite.sprite("yumi.png"); this.addChild(sprite); CGPoint Init=CGPoint.ccp(300,100); sprite.setPosition(300,100); CGPoint target=CGPoint.ccp(400,800);
3、CCMoveTo方法:移动到
CCMoveTo ccMoveTo1=CCMoveTo.action(6,target); CCMoveTo ccMoveTo2=CCMoveTo.action(6,Init);
8、CCSequence(连续几个动作,不定个数参数,只要把action放进去)、CCRepeat、CCRepeatForever、ccColor3B、CCFadeOut、CCFadeIn
CCSequence ccSequence=CCSequence.actions(ccMoveTo1,ccMoveTo2); CCRepeat ccRepeat=CCRepeat.action(ccSequence,3); CCRepeatForever repeatForever=CCRepeatForever.action(ccRepeat); sprite.runAction(repeatForever);
颜色定义色光三原色是指红、绿、蓝三色 // ccColor3B=ccColor3B.ccc3(-120,255,-120); // //CCTintTo tintTo=CCTintTo.action(3,ccColor3B); // CCTintBy tintBy=CCTintBy.action(3,ccColor3B); // // CCFadeOut ccFadeOut=CCFadeOut.action(5); // //CCFadeIn ccFadeIn=CCFadeIn.action(5); // sprite.runAction(tintBy);
1、CCFlipX、CCFlipY方法:沿着x、y轴旋转 //////////1.生成动作对象 ////////CCFlipX flipX=CCFlipX.action(true); //////////2.使用精灵对象执行动作对象 //////// sprite.runAction(flipX); ////////CCFlipY fiFlipY=CCFlipY.action(true); ////////sprite.runAction(fiFlipY);
2、CCHide、CCShow方法:精灵的隐藏和显示 //////// CCHide hide=CCHide.action(); ////////sprite.runAction(hide); ///////*总结: //////* 1、生成动作对象 //////* 2、调用精灵的run方法 //////*/ //////CGPoint point=CGPoint.ccp(800,800); ////////CCMoveTo ccMoveTo=CCMoveTo.action(6,point); ////////sprite.runAction(ccMoveTo);
4、CCRotateTo:旋转 //////// CCRotateTo ccRotateTo=CCRotateTo.action(6,-180); ////////sprite.runAction(ccRotateTo);
5、CCBlink:闪烁 ////// //CCBlink blink=CCBlink.action(10,20);
6、CCBlink:缩放 ////// CCScaleTo scaleTo=CCScaleTo.action(10.0f,60.0f,1.5f); //////sprite.runAction(scaleTo); //////sprite=CCSprite.sprite("yumi.png"); //////sprite1=CCSprite.sprite("yumi.png"); //////this.addChild(sprite); //////this.addChild(sprite1); //// CGPoint Initpoint=CGPoint.ccp(400,400); //////sprite1.setPosition(Initpoint); ////sprite.setPosition(Initpoint); //////CGPoint dltaPoint=CGPoint.ccp(0,400); ////////向量的加法 //////CGPoint targetPoint=CGPoint.ccpAdd(Initpoint,dltaPoint); //////CGPoint targetPoint=CGPoint.ccp(0,100);
7、CCMoveBy、CCJumpBy:向量 ////// CCMoveBy ccMoveBy=CCMoveBy.action(6,targetPoint); //////sprite.runAction(ccMoveBy); ////CGPoint targetPoint=CGPoint.ccp(300,100); ////CCJumpBy ccJumpBy=CCJumpBy.action(20,targetPoint,200,20); //// sprite.runAction(ccJumpBy); // // sprite=CCSprite.sprite("yumi.png"); // CGPoint initPoint=CGPoint.ccp(100,100); // this.addChild(sprite); // sprite.setPosition(initPoint); // // CGPoint targetPoint=CGPoint.ccp(300,300); // CCMoveTo ccMoveTo=CCMoveTo.action(3,targetPoint); // // CCRotateTo ccRotateTo=CCRotateTo.action(2,180); // CCScaleTo ccScaleTo=CCScaleTo.action(2,1);
//java动态性的体现 // CCCallFunc func=CCCallFunc.action(this,"onActionFinished"); // CCSequence ccSequence=CCSequence.actions(ccMoveTo,func); // //CCSpawn(动作一起执行)ccSpawn=CCSpawn.actions(ccMoveTo,ccRotateTo,ccScaleTo); // //CCSequence ccSequence=CCSequence.actions(ccMoveTo,ccScaleTo); // sprite.runAction(ccSequence); // } //public void onActionFinished(){ //Toast.makeText(null,"onActionFinished",2); //} }
第九课:
1、Android平台触摸事件回顾
2、设置图层接受触摸事件
3、触摸毁掉函数
4、触摸坐标转换
5、总结
package com.example.touchaction;
import org.cocos2d.layers.CCLayer;
import org.cocos2d.nodes.CCDirector;
import org.cocos2d.types.CGPoint;
import android.view.MotionEvent;
//接受用户触摸的事件,首先必须对当前图层进行设置
public class GameLayer extends CCLayer {
public GameLayer(){
//设置当前图层是否接受触摸事件
this.setIsTouchEnabled(true);
}
@Override
public boolean ccTouchesBegan(MotionEvent event) {
float x=event.getX();
float y=event.getY();
CGPoint p1=CGPoint.ccp(x,y);
//触摸坐标转换
CGPoint p2=CCDirector.sharedDirector().convertToGL(p1);
return super.ccTouchesBegan(event);
}
@Override
public boolean ccTouchesEnded(MotionEvent event) {
System.out.println("end");
return super.ccTouchesEnded(event);
}
@Override
public boolean ccTouchesMoved(MotionEvent event) {
System.out.println("move");
return super.ccTouchesMoved(event);
}
}
第十课:
1、为什么需要事件调度
2、schedule()方法的使用
3、delta参数的作用
4、unschedule()方法的使用
总结
public class GameLayer extends CCLayer { public GameLayer(){ //调用schedule方法,传输函数名,以及间隔时间 this.schedule("fun",1); } public void fun(float delta){ //delta往往来表示增量,在当前的例子当中, //改变了为上次fun函数与调用fun函数之间的时间差 } } (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|