第一课:
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, 500);
CCJumpTo jumpTo=CCJumpTo.action(3, target, 800, 100);
player.runAction(jumpTo);
}
}
方法:
CCSprite、CGPoint、CCJumpTo、CGPoint.ccp(250, 500)、CCJumpTo.action(3, target, 800, 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, ccRotateTo,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函数之间的时间差
}
}