赞
踩
游戏引擎是指一些已编写好的可编辑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。
cocos2d是一个开源的游戏开发框架,利用它可以非常容易的开发2D游戏。 包括以下成员
本质区别:开发的语言不一样:Cocos2d-x使用c++、Cocos2d-iphone使用Object-C;共同点:api名字基本一致
Box2D是一个用于模拟2D刚体物体的C++引擎。作者为Erin Catto。
chipmunk本是一个独立的开源项目,用纯c编写
Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。
CCDirector界面的统一管理者
图形引擎说明
引擎中SurfaceView的子类,实现了SurfaceHolder.Callback接口,但并未实现Runnable接口。
存在问题:
1、绘制界面的线程是谁?
2、该线程是如何启动的?
界面的绘制工作是由GLThread来完成,而GLThread的开启是在CCDirector的attachInView方法中完成的。
管理场景CCScene
CCDirector,导演类,负责管理和切换场景。还负责初始化openGL各项参数。
CCDirector引擎的控制者,控制场景的切换,游戏引擎属性的设置
单例模式,sharedDirector()取得对象
方法 | 功能描述 |
---|---|
sharedDirector() | 获取CCDirector对象,单例模式 |
attachInView() | 连接OpenGL的SurfaceView |
runWithScene() | 运行场景 |
replaceScene() | 替换场景 |
setDeviceOrientation() | 设置横屏竖屏 |
setDisplayFPS(true) | 显示fps帧率 |
setAnimationInterval(1.0f / 60) | 设置帧率,每秒刷新60次 |
setScreenSize(480, 320) | 设置屏幕分辨率,高于设置的分辨率时,引擎会自动适配 |
resume() | 进入运行状态 |
pause() | 暂停 |
end() | 结束 |
public class MainActivity extends Activity {
private CCDirector director;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CCGLSurfaceView surfaceView=new CCGLSurfaceView(this);
setContentView(surfaceView);
// 程序只能有一个导演
director = CCDirector.sharedDirector();
director.attachInView(surfaceView);// 开启线程
director.setDeviceOrientation(CCDirector.kCCDeviceOrientationLandscapeLeft);// 设置游戏方向 水平
director.setDisplayFPS(true);//是否展示帧率
// director.setAnimationInterval(1.0f/30);// 锁定帧率 指定一个帧率 向下锁定
director.setScreenSize(480, 320);//设置屏幕的大小 可以自动屏幕适配
CCScene ccScene=CCScene.node();// 为了api 和cocos-iphone 一致
ccScene.addChild(new ActionLayer());//场景添加了图层
director.runWithScene(ccScene);// 运行场景
}
@Override
protected void onResume() {
super.onResume();
director.resume();
}
@Override
protected void onPause() {
super.onPause();
director.onPause();
//director.pause();
}
@Override
protected void onDestroy() {
super.onDestroy();
director.end();// 游戏结束了
}
}
FirstLayer
public class FirstLayer extends CCLayer {
private CCSprite ccSprite;
public FirstLayer() {
setIsTouchEnabled(true);// 打开触摸事件开关
init();
}
// 按下的事件
@Override
public boolean ccTouchesBegan(MotionEvent event) {
// 先把android坐标系中的点 转换成 cocos2d坐标系中的点
CGPoint convertTouchToNodeSpace = this.convertTouchToNodeSpace(event);
System.out.println("我被按下了");
CGRect boundingBox = ccSprite.getBoundingBox(); // 获取精灵的矩形
// 判断点是否在矩形之中
// 参数1 矩形 参数2 点
boolean containsPoint = CGRect.containsPoint(boundingBox, convertTouchToNodeSpace);
if(containsPoint){
ccSprite.setScale(ccSprite.getScale()+0.2);
}else{
ccSprite.setScale(ccSprite.getScale()-0.2);
}
//this.getChildByTag(10); 根据Tag标签 找对应的孩子
return super.ccTouchesBegan(event);
}
private void init() {
CCSprite bg = CCSprite.sprite("bbg_arena.jpg");
bg.setAnchorPoint(0, 0);
this.addChild(bg,0); // 如果第二个参数越大 默认显示的越靠上面, 如果一样大 谁先添加谁显示在下面
ccSprite = CCSprite.sprite("z_1_attack_01.png");
ccSprite.setAnchorPoint(
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。