Cocos2d-android游戏引擎

2023-11-14

什么是游戏引擎

游戏引擎是指一些已编写好的可编辑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。

Cocos2d家族

cocos2d是一个开源的游戏开发框架,利用它可以非常容易的开发2D游戏。 包括以下成员

  • Cocos2d-x
  • Cocos2d-iphone
  • Cocos2d-android

本质区别:开发的语言不一样:Cocos2d-x使用c++、Cocos2d-iphone使用Object-C;共同点:api名字基本一致

我们为什么要使用cocos2d

  • 一款开源的,跨平台,轻量级的2D游戏引擎。
  • 性能良好
  • 广泛的社区支持
  • 拥护很多成功案例。比如捕鱼达人,三国塔防等
  • 使用MIT授权协议。可以自由使用,修改源码,不需要像GPL一样公开源码,可以商用

架构

cocos

  • 图形引擎Cocos2D Graphic
  • 声音引擎CocosDenshion
  • 物理引擎:Box2d、Chipmunk

cocos

架构说明

  • Cocos2D Graphic图形引擎
  • CocosDenshion Audio声音引擎
  • 物理引擎
    • Box2d
    • Chipmunk
  • Lua脚本库

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项目,提供在特定平台上的即时编译功能。

图形引擎Cocos2D Graphic

CCDirector界面的统一管理者

cocos

图形引擎说明

cocos

  • CCDirector(导演):引擎的控制者,控制场景的切换,游戏引擎属性的设置
  • CCScene (场景):场景类,例如游戏的闪屏,主菜单,游戏主界面等。
  • CCLayer(布景):图层类,每个图层都有自己的触发事件,该事件只能对其拥有的元素有效,而图层之上的元素所包含的元素,是不受其事件管理的
  • CCSprite(人物):精灵类,界面上显示的最小单元
  • CCNode:引擎中最重要的元素,所有可以被绘制的东西都是派生于此。它可以包含其它CCNode,可以执行定时器操作,可以执行CCAction。
  • CCAction(动作):动作类,如平移、缩放、旋转等动作

CCDirector

CCGLSurfaceView

引擎中SurfaceView的子类,实现了SurfaceHolder.Callback接口,但并未实现Runnable接口。
存在问题:
1、绘制界面的线程是谁?
2、该线程是如何启动的?

CCDirector的作用

界面的绘制工作是由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(
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cocos2d-android游戏引擎 的相关文章

  • 我如何像 Cocos2D 一样通过 SpriteKit 倾斜/剪切精灵?

    在Cocos2D x中 CCNode类提供了 skewX 和 skewY 来让我对精灵进行一些扭曲 但是 我在SpriteKit的SKNode中找不到类似的映射 我的游戏使用Flash移植骨骼动画 其中精灵的定位 缩放 旋转和剪切的配置将被
  • Cocos 2d-x 中带有贝塞尔曲线的圆角矩形

    是否可以使用 DrawNode 对象绘制一个圆角矩形 我认为使用贝塞尔曲线是可能的 但我做了一些尝试 但我认为我无法处理它 查看 API 我只发现这两个函数 绘制四边形贝塞尔曲线 const Vec2 origin const Vec2 c
  • 在 Cocos2d 和 Box2d 中获取物体上的接触点

    我很new对于 Cocos2d 和 Box2d 我 一直在关注教程 http www raywenderlich com 和 一般是黑客攻击 不过 我有一个 我无法解决的问题 我创建了 2 个主体和固定装置 在 Box2d 世界中 并创建了
  • 如何制作双向平台box2d主体?

    我使用 box2d 创建了平台 我想要 box2d 身体检测而不是动态检测 Box2d 形状将执行以下操作 在某些条件下检测碰撞 在某些情况下不检测碰撞 两种条件都适用于同一 box2d 对象中的不同条件 任何想法都会有很大帮助 提前致谢
  • iPhone:cocos2d 中相机跟随玩家

    我正在用 cocos2d 制作 iPhone 游戏 我想知道如何使相机 视图遵循特定的精灵 我会使用 CCCamera 类吗 是的 CCCamera 可以工作 然而 它有一些缺点 使其不适合某些用途 相对于该精灵移动图层以及所有其他对象可能
  • iOS 5 文档目录中存储和读取文件

    在我的游戏中 当完成一个关卡时 应用程序会将 1 存储在应用程序文档目录中的文件中 当游戏加载时 玩家只有在完成前一关后才能玩该关卡 当我通过 Xcode 在设备上测试游戏时 应用程序可以正常运行 并且只有完成上一个关卡后才能玩该关卡 但是
  • 如何在 UIView 上添加 CCSprite

    在我的 cocos2d 应用程序中 我有一个UIView我通过添加子视图来显示在屏幕上 CCDirector sharedDirector openGLView 但我想知道是否有办法显示CCSprite在此视图之上 因为我必须与这些 CCO
  • Cocos2d-x - 如何将CCLayer的一部分设置为透明?

    我是新手cocos2d x我需要你的帮助 我需要使图层的触摸部分透明 如何使图层的一部分透明 我曾想过使用 ClippingNode 但我找不到示例或文档 我使用C 谢谢 在所有cocos2d x版本中添加的TestCpp项目中 您可以找到
  • 设置 Cygwin + Android NDK + cocos2Dx 以与 Eclipse 配合使用

    我正在关注该网站的教程 通过游戏应用货币化 作者 Todd Perkins http www lynda com Android tutorials Understanding downloading Cocos2d x 107169 12
  • VS2022 | 显示Unreal Engine日志

    VS2022 显示Unreal Engine日志 视图 gt 其他窗口 gt Unreal Engine日志 视图 gt 其他窗口 gt Unreal Engine日志
  • 花栗鼠碰撞检测

    我对花栗鼠完全陌生 而且我刚刚使用它几天 所以我猜这是非常明显的事情 但是我找不到任何相关文档 Chipmunk 中是否有任何回调或方法可以告诉您 2 个给定的形状发生了碰撞 如果不是 最好的方法是简单地在精灵上使用 cgrect cont
  • 如何检查设备是否有互联网连接:cocos-2d

    在我的一款 iPhone 应用程序中 我需要查明该设备是否有互联网连接 有人请帮忙吗 使用可达性类 if self checkInternetConnected NSLog Internet connected n BOOL checkIn
  • 如何在cocos 2d中移动背景

    你好 我想开发像 涂鸦跳跃 这样的游戏 但是我对以下功能有一些问题 1 如何移动背景场景 图像 2 如何检测对象之间的碰撞 是否需要像box2d这样的物理引擎 或者我应该使用手动碰撞 3 背景图片的大小应该是多少 4 事实上我不知道背景是如
  • 使用 ccTouchesMoved 方法移动 CCCamera? (cocos2d、iPhone)

    所以我得到了这个工作 void ccTouchesMoved NSSet touches withEvent UIEvent event UITouch myTouch touches anyObject CGPoint location
  • 访问其他层中的对象(cocos2d)

    我正在用操纵杆在一层中移动精灵 现在 根据最佳实践 操纵杆和精灵必须位于同一场景的不同层中 我已经设法将它们分开 但我现在完全陷入困境 完全不知道如何将操纵杆命令从一层传递到另一层 推荐的方法是什么 Scene Game Play Laye
  • Objective C - 获取今天(明天)的第二天

    如何检查某个日期是否本质上是 明天 我不想在像今天这样的日期上添加时间或任何内容 因为如果今天已经22 59 添加太多会延续到后天 添加太少则时间到了12 00会错过明天 我怎样才能检查两个NSDate并确保其中一个相当于另一个的明天 Us
  • 如何使用 Cygwin 打开 RTTI?

    当我的Android NDK C 本机代码编译时 出现以下错误 错误 fno rtti 不允许使用 dynamic cast 有人告诉我打开RTTI 但我不知道该怎么做 我需要修改吗Application mk或者是什么 my Applic
  • OpenGL 与 Cocos2d:该选择什么?

    我知道 cocos2d 它是非常简单的 API 我可以用它来做简单而巨大的 2D 甚至有时 3D 游戏 应用程序 我也知道 OpenGL 它更复杂 它的 API 级别较低等 问题 实现 2D 3D 游戏用什么更好 如果我们有cocos2d这
  • Box2d 自定义多边形和精灵不匹配

    我正在使用物理编辑器在 Box2d 中创建多边形 它生成多边形并在非视网膜显示器中工作正常 但在视网膜显示器中不起作用 我已附上两个显示器的屏幕截图 现在 当谈到视网膜显示器时 未设置多边形在汽车上方 这是该图像 这是我在项目中使用的代码
  • Cocos2D 2.1:iOS 6 中已弃用“Delegate”。如何设置此 AVAudioSession 的委托?

    在 Xcode 4 5 中启动了 Cocos2D 2 1 模板 没有物理引擎 针对 iOS 6 和 iPad 在 CDAudioManager m 文件中 以下代码 AVAudioSession session AVAudioSession

随机推荐

  • wayland与linux_Linux最让人叹息的地方

    这两天有空 试了试Sway 作为一直以来的i3用户 自己的使用环境各项配置基本也是该配的都配齐了 本来不以为然 没想到真正去到Sway却发现Wayland确实流畅很多 折腾了1天 满心想着终于来到了一个Tear free的Linux环境 结
  • 表完整性约束

    介绍 认识 约束条件和数据类型宽度一样 都是可选类型 作用 用于保证数据的完整性 一致性 有哪几种约束 primary key PK 标识该字段为该表的主键 可以唯一标识的记录 foreign key FK 标识该字段为该表的外键 not
  • JDBC的URL详解

    文章目录 JDBC的URL详解 1 jdbc的格式 2 例如 3 参数详解 JDBC的URL详解 1 jdbc的格式 jdbc mysql host failoverhost port database propertyName1 prop
  • 计算机网络的认识知乎,【知乎】计算机网络这门课为何如此之难

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 操作系统和计算机网络的共同点 在于它们都是相当复杂的体系结构 如果觉得难 也许是因为自己没能产生足够的求知欲 你也说了 无聊 晦涩 而无聊感其实是没治的 对课程的热情和对女生的爱慕感其实差不多
  • Texstudio的学习(一)

    一 入门知识 1 三要素 documentclass option class usepackage option package begin 环境名称 内容 end 环境名称 2 命令符号 1 documentclass option c
  • 东北大学c++实验(第二周)

    include
  • vim教程

    文章目录 1 移动光标 2 进入和退出 3 删除 4 插入 5 撤销 7 定位及文件状态 8 搜索类 9 匹配括号的查找 10 将文本里的某个字符串全部替换 11 在 VIM 内执行外部命令的方法 12 关于保存文件的更多信息 13 一个具
  • 【NLTK】安装和使用NLTK分词和去停词

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 黄聪 Python NLTK自然语言处理学习 一 环境搭建 http www cnblogs com huangcong archive 2011 08 29 215743
  • Matlab 三角函数(sin)

    a 这是一个三角函数 t 0 0 01 2 pi 从0到2pi 步长是0 01 y sin t plot t y 画坐标
  • java Map集合用stream流的方式遍历

    Map
  • c++基础复习——c++对象模型和this指针

    1 在c 中 成员变量和成员函数分开存储 只有非静态的成员变量才属于类的变量上 成员变量和成员函数是分开存储的 当定义一个空类 求空类的大小 include
  • oracle 从一个oracle导数据到另外一个oracle(二)

    场景 原有数据库A突然宕掉了 新搭建了数据库B应急 A启动后要把A上的数据迁移到B上 限制 1 A数据库是Oracle10g B数据库是Oracle11g 2 A的字符集是AMERICAN AMERICA ZHS16GBK B的字符集是AM
  • java 订单进度 设计,java多线程设计方式之订单模式

    java多线程设计模式之订单模式 Java多线程实现订单模式 客户端线程向服务端发起请求后 请求处理需要较长时间处理 这个时候客户端又需要及时得到一个结果响应 这好比我们去蛋糕店订蛋糕 蛋糕往往需要几个小时才能完成 这个时候店员就会给我一个
  • 小程序中父子组件通信的方法

    引入组件 全局组件 在app json文件中配置usingComponents 多个组件用逗号隔开 最后一个不加逗号 单页面使用的组件 在页面的 json文件中配置usingComponents usingComponents myConp
  • SpringBoot框架实现邮件发送(上)

    文章目录 前言 1 邮件发送类依赖导入 2 配置发件邮箱的信息 3 邮件接收类 4 邮件发送工具类 前言 实现登录注册功能的时候 一些软件总是要手机号验证码或者邮件验证码 手机号验证码功能的实现是需要付费使用的 而且也比较容易搭建 例如阿里
  • 【unity3d】Layers的控制/LayerMask的使用

    文章目录 unity Layers的控制 LayerMask的使用 Layers 概述 演示效果 Layers的设置 gameobject设置Layer 手动设置 代码设置 LayerMask的使用 Camera的culling mask的
  • TypeScript基础学习

    最终还是没有逃过ts的魔爪 哈哈哈也不能说魔爪 工作这段时间 感觉每天都在学习新的知识 最近在看源代码的时候看到了部分源码是用ts写的 之前没接触过 今天就来学习一下ts 文章参考 TypeScript超详细入门教程 TypeScript
  • python练习题3

    1 数列翻转 reverse 问题描述 编写程序对列表中的数据进行翻转转换 即将数组中第一个数和最后一个数交换 第二个数和倒数第二个数交换 依此类推 样例输入 4 100 200 300 400 样例输出 400 300 200 100 a
  • bpython bs4用哪个解释器好_Python之解BS4库如何安装与使用?正确方法教你

    Beautiful Soup 库一般被称为bs4库 支持Python3 是我们写爬虫非常好的第三方库 因用起来十分的简便流畅 所以也被人叫做 美味汤 目前bs4库的最新版本是4 60 下文会介绍该库的最基本的使用 具体详细的细节还是要看 官
  • Cocos2d-android游戏引擎

    什么是游戏引擎 游戏引擎是指一些已编写好的可编辑游戏系统或者一些交互式实时图像应用程序的核心组件 这些系统为游戏设计者提供各种编写游戏所需的各种工具 其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始 Cocos2d家族 coc