第一课:
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。
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函数之间的时间差 } }
原文链接:https://www.f2er.com/cocos2dx/341675.html