Cocos2d基础学习

第一课:

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);

            3CCMoveTo方法:移动到

   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、CCHideCCShow方法:精灵的隐藏和显示
////////
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);

                        4CCRotateTo:旋转
////////
CCRotateTo ccRotateTo=CCRotateTo.action(6, -180);
////////sprite.runAction(ccRotateTo);

                5CCBlink:闪烁
//////
//CCBlink blink=CCBlink.action(10,20);

                6CCBlink:缩放
//////
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);

                7CCMoveBy、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函数之间的时间差

}
}




你可能感兴趣的:(Cocos2d基础学习)