加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos2d基础学习

发布时间:2020-12-14 16:26:44 所属栏目:百科 来源:网络整理
导读:第一课: 1、什么是Cocos2d引擎 2、为什么要使用Cocos2d引擎 3、Cocos2d引擎的特点 4、Cocos2d应用程序结构 5、总结 什么是游戏引擎: 已经编写好的游戏系统的核心组件: 渲染引擎 、物理引擎 、碰撞检测系统 、音效引擎 、脚本引擎 、动画系统 没有游戏引擎

第一课:

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

3CCMoveTo方法:移动到

CCMoveTo ccMoveTo1=CCMoveTo.action(6,target);
CCMoveTo ccMoveTo2=CCMoveTo.action(6,Init);

8CCSequence(连续几个动作,不定个数参数,只要把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,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函数之间的时间差 } }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读