游戏引擎cocos2d-android使用大全

简介: 做手机游戏需要三个核心的类,即:SurfaceView,SurfaceHolder,Thread。帧数要在30帧左右是最好的。cocos2d游戏引擎封装好的框架,可直接使用 cocos2d-android (用java编程) 导演:控制场景的切换,控制开始和暂停 场景:添加图层 图层:添加精灵 精灵全屏: applica

做手机游戏需要三个核心的类,即:SurfaceView,SurfaceHolder,Thread。帧数要在30帧左右是最好的。

cocos2d游戏引擎

封装好的框架,可直接使用
cocos2d-android (用java编程)

导演:控制场景的切换,控制开始和暂停
场景:添加图层

图层:添加精灵

精灵

全屏:
application:

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" 

Activity:
android:screenOrientation="landscape"

图片放到assess目录下

    CCGLSurfaceView surfaceView=new CCGLSurfaceView(this);  
    setContentView(surfaceView);

    director=CCDirector.sharedDirector();//程序只能有一个导演
    director.attachInView(surfaceView); //开启线程
    CCScene ccScene=CCScene.node();//为了api和cocos-phone一致
    ccScene.addChild(new FirstLayer());
    director.runWithScene(ccScene);    

CCDirector

  1. attachInView 开启线程
  2. runWithScene 运行场景
  3. 生命周期的方法 resume pause end
  4. setDisplayFPS 显示帧率
  5. setScreenSize 设置屏幕大小 自动屏幕适配
  6. setDeviceOrientation 设置屏幕的方向

    director.setDeviceOrientation(CCDirector.kCCDeviceOrientationLandscapeLeft);
    director.setDisplayFPS(true);  //是否显示帧率
    director.setAnimationInterval(1.0f/30); //锁定帧率,只能向下锁定
    director.setScreenSize(480, 320); //设置屏幕的大小,自动屏幕适配,必须在开启线程之后调用

CCScene

目前该类没有什么具体的功能,它只是作为一个项目中需要展示内容的根节点存在。

CCLayer

安卓的坐标原点是在左上角,而cocos2d坐标原点在左下角

//按下的事件
@Override
public boolean ccTouchesBegan(MotionEvent event) {
//先把android坐标系中的点转换为cocos2d坐标系中的点
    CGPoint converTouchToNodeSpace=this.convertTouchToNodeSpace(event);
    //  System.out.println("我被按了,呜呜呜!");
    CGRect boundingBox=ccSprite.getBoundingBox();  //获取精灵的矩形
    event.getRawX();
    //判断点是否在矩形之中
    boolean containsPoint=CGRect.containsPoint(boundingBox, converTouchToNodeSpace);
    if(containsPoint){
        ccSprite.setScale(ccSprite.getScale()+0.2);

    }else{
        ccSprite.setScale(ccSprite.getScale()-0.2);
    }

    return super.ccTouchesBegan(event);
}

CCSprite

  1. setAnchorPoint 设置锚点
  2. setPosition 设置坐标
  3. setScale 设置缩放
  4. setFlipX(Y) 设置水平(垂直)翻转
  5. ccSprite.setOpacity(150); 设置不透明度 值越大越不透明
  6. setVisible , 设置是否可见 true可见

  ccSprite = CCSprite.sprite("z_1_attack_01.png");
        ccSprite.setAnchorPoint(0,0);// 设置锚点
        ccSprite.setPosition(100, 100);//设置坐标
        ccSprite.setScale(1); // 设置缩放
        //ccSprite.setFlipY(true);// X水平翻转  Y垂直翻转
        //ccSprite.setOpacity(0);//设置不透明度 值越大 越不透明  0-255
        ccSprite.setVisible(true);// 设置不可显示
        // 把精灵添加到图层上 

CCNode

是 场景 图层 和精灵的基类

  1. ccp(float x,float y) 静态方法 创建一个点
  2. this.addChild(ccSprite);
  3. this.addChild(ccSprite, z); // 2 优先级
  4. this.addChild(ccSprite, 1, 10);// 参数3 标签

动作的处理,CCAction

时间是秒

CCMoveTo ccMoveTo=CCMoveTo.action(2,CCNode.ccp(200, 0));//参数1;移动的时间,单位秒,参数2:移动的距离

1.CCFiniteTimeAction 和时间相关的动作

CCInstantAction   瞬时动作    闪现 
CCIntervalAction  延迟动作  疾跑

2.CCFollow 跟随动作
3.CCRepeatForever 永不停止的循环

    CCRepeatForever forver=CCRepeatForever.action(sequence);

4.CCSpeed 和速度相关的动作

各种动作

moveTo和moveBy的区别:

1.to 移动到指定目的地;2.by 移动的坐标的改变

1 to没有相反的动作;2.by 有相反动作

CCSequence 串行动作

CCMoveBy ccMoveBy=CCMoveBy.action(2,CCNode.ccp(200, 0));//参数1;移动的时间,单位秒,参数2:移动的距离
    CCMoveBy reverse=ccMoveBy.reverse();
    CCSequence sequence=CCSequence.actions(ccMoveBy,reverse);
    //串行动作,
    sprite.runAction(sequence);

跳跃动作

    CCJumpBy ccJumpBy=CCJumpBy.action(2,ccp(200,200),50,1);
    sprite.runAction(ccJumpBy);

旋转和缩放
>
缩放:
CCScaleBy ccScaleBy=CCScaleBy.action(1,0.5f);//基于锚点进行缩放


旋转:CCRotateBy和CCRotateTo都可以,同时CCRotateTo更实用(翻转120度)

贝赛尔曲线运动

CCBezierConfig cc=new CCBezierConfig();
    cc.controlPoint_1=ccp(0,0);
    cc.controlPoint_2=ccp(100,100);
    cc.endPosition=ccp(200,0);

    CCBezierBy bezierBy=CCBezierBy.action(2,cc);
    getSprite().runAction(bezierBy);

淡入淡出

CCFadeIn  fadeIn=CCFadeIn.action(10);
    getSprite().runAction(fadeIn);

加速度

CCMoveTo cmt=CCMoveTo.action(10,CCNode.ccp(200,0));
    CCEaseOut easeOut=CCEaseOut.action(cmt,10);//让移动按照一定加速度去移动
    getSprite().runAction(easeOut);

颜色渐变
CCLabel,专门用来显示文字的精灵

CCLabel label=CCLabel.labelWithString("指令汇最棒", "hkbd.ttf", 24);
    label.setColor(ccc3(50,0,255));
    label.setPosdition(200,200);
    this.adChild(label);

    ccColor3B c=ccc3(100,255,-100);

    CCTintBy cb=CCTintBy.action(1, c);
    CCTintBy reverse=cb.reverse();
    CCSequence seq=CCSequence.actions(cb, reverse);
    CCRepeatForever forver=CCRepeatForever.action(seq);
    label.runAction(forver);

闪硕

CCBlink blink=CCBlink.action(3, 3);
    getSprite().runAction(blink);   

复杂的动作

  1. CCSpawn 并行动作
  2. CCSequence 串行动作
  3. CCRepeatForever 永不停止的循环

private void JumpBy() {
        // 1 时间  单位秒 2 目的地   3 高出的高度  4 跳跃的次数
        CCJumpBy ccJumpBy=CCJumpBy.action(4, ccp(200, 100), 100, 2);
        CCRotateBy ccRotateBy=CCRotateBy.action(2, 360);
        // 并行动作
        CCSpawn ccSpawn=CCSpawn.actions(ccJumpBy, ccRotateBy);//并行起来了   跳跃的过程中伴随着旋转

        //CCJumpBy reverse = ccJumpBy.reverse();
        CCSequence sequence=CCSequence.actions(ccSpawn, ccSpawn.reverse());// 跳上去 跳回来(伴随着旋转) 
        CCRepeatForever forever=CCRepeatForever.action(sequence);// 让串行动作 永不停止循环了
        CCSprite sprite = getSprite();
        sprite.setAnchorPoint(0.5f, 0.5f);  
        sprite.setPosition(50, 50);
        sprite.runAction(forever);
    }
目录
相关文章
|
Android开发 C++ Shell
cocos2d-x通过build_natice.sh编译成android时不用每次更改Android.mk文件处理
这是我的Android.mk的全文 重点是红色部分,替换掉原来的那部分手工添加的部分。 注:这是cocos2d-x 2.1.5版本的 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOC...
736 0
|
Java Android开发 C++
android cocos2d-x for Android安装和学习笔记(请用adt-bundle21.1或以上导入)
引用:http://weimingtom.iteye.com/blog/1483566 (20121108)注意:这篇文章用cdt编译ndk工程的内容已过时(现在可以用adt-bundle,避免配置繁琐的参数),最新版ADT 20.0.3支持右键把Android工程直接添加native特性(即Android工程和CDT Makefile工程合二为一),不需要做太多复杂的设置,而且完全兼容ndk-build命令行编译。
986 0
|
24天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
12 0
|
1月前
|
设计模式 人工智能 开发工具
安卓应用开发:构建未来移动体验
【2月更文挑战第17天】 随着智能手机的普及和移动互联网技术的不断进步,安卓应用开发已成为一个热门领域。本文将深入探讨安卓平台的应用开发流程、关键技术以及未来发展趋势。通过分析安卓系统的架构、开发工具和框架,本文旨在为开发者提供全面的技术指导,帮助他们构建高效、创新的移动应用,以满足不断变化的市场需求。
18 1
|
2天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
18 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
15天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。