cocos2d-x/js杂记

6 篇文章 0 订阅
1 篇文章 0 订阅
  • cocos creator
  1. ​​​参见官方文档,目前有大量小型公司在使用cocos creator 进行游戏开发,这个对于非编程人员来说,确实更容易,开发效率也更高,并且对于团队来说,设计和开发分工也更容易,但是代码量基本不会少。但是对于开发来说,使用cocos2d-js更符合开发人员的习惯。对于cocos2d-x建议使用xcode/clion,对于cocos2d-js,建议使用webstorm。
  • cocos基本操作Mac
  1. cocos在cocos2d-x的tools/cocos2d-console/bin/ 目录下
  2. 创建新项目: cocos new -p com.xxx -d . -l js Game 目前支持的语言有js cpp lua;注意包名不要乱写,否则有可能在android上运行不了,要符合java的包名命名规范
  3. 运行: cocos run -p web 目前支持的平台有web android ios mac,如果运行android,需要先安装android studio(android sdk),以及ndk,ndk需要单独安装,并且配置环境变量,实际编译时会有明显的报错提示
  4. android studio 打开只需要使用android studio 打开framework/runtime-src/proj.android即可,包括真机USB调试和虚拟机调试
  • 华为手机进行调试
  1. 设置->系统->关于手机,在版本号上连点4下,有的是7下,打开“开发人员选项”;
  2. 设置->系统->开发人员选项,开启USB调试;
  3. 连接USB(type-c也是USB的一种),在拨号键盘输入 *#*#2846579#*#*,选择后台设置->USB端口设置,选择生产模式;
  4. 如果是第一次使用,需要再次到达设置->系统->开发人员选项,会看到一个对话框(对话框不会弹出,只有在这个页面能看到),选择允许授权。

经过以上步骤,运行cocos run -p android就能愉快的安装到手机上了。与此同时,点击android studio的运行按钮,也能看到多了一个物理设备。

  • 生成一个keystore
  1. keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore

以上配置好之后,就可以愉快的进行开发了

-------------------------------------------------------------------------------------------------------------------------------------------------------

  • cocos添加逻辑的三个时机
  1. 节点自动的回调,例如init/onEnter/onExit;
  2. 调度器,例如scheduleUpdate/schedule/scheduleOnce等
  3. 事件触发
  • cocos Node的基本属性和操作
  1. 位置,_position和_normalizedPosition,cocos并没有在修改其一的时候一起更新另外一个,而是设置一个标志位_usingNormalizedPosition来区分是使用哪种位置数据,这可以再CCNode.cpp的实现中看到setPostion和setPositionNormalized。对齐方式对于Sprite是以中心点作为对齐,但是Layer等其他node是以左下角来对齐。
  2. 旋转和倾斜:_rotationX, _rotationY, _skewX, _skewY
  3. 缩放:_scaleX, _scaleY,默认为1.0
  4. 锚点: 辅助位置摆放,缩放和旋转的点,单位是百分比,默认是(0.5,0.5),调用ignoreAnchorPointForPostion可以忽略锚点,将锚点视为0来处理
  5. ZOrder: _localZOrder, _globalZOrder
  6. 尺寸:Node默认没有尺寸,但是可以通过_contentSize来设置
  7. 延迟计算:每次对Node属性的修改,数值是立即生效的,但是并不立即更新显示,而是更新一个dirty标志位,在下次显示时visit中做一次更新
  8. 使用Node的三种方式:1)直接使用,可以用来做容器;2)使用具有某种功能的Node,例如Sprite或者Label;3)继承Node;
  9. Node的常用方法:init, onEntrer, onExit, update,重写这些方法时,务必调用父类方法
  10. Action: 一个Action只能被一个Node执行,如果需要多个Node执行,则需要复制
  • Cocos2d-x内存管理
  1. retain(引用计数+1), release(引用计数-1,当计数为0时,释放对象), autorelease(引用计数+1,切换到下一帧时-1。添加到自动释放池管理,每次主循环结束后进行检查), 构造函数将计数置为1。3.0之前的版本是放在CCObject,之后的版本是放在Ref中。
  • 场景和层
  1. Scene之间是互斥关系,不能同时显示。Scene要比Layer高一级。
  2. 场景切换:runWithScene/pushScene(当场景切回时,所有的节点的状态保持原状)/popScene/replaceScene
  3. Sprite:
  • Action
  1. 多次调用runAction,会同步执行
  2. 一个Action对象只能被执行一次
  3. 只有对象被挂载到场景中时才会被执行
  4. stopAction停止动作执行
  5. ActionInstant: Show/Hide/FlipX/FlipY/Place/ToggleVisibility
  6. ActionInterval: RotateTo/RotateBy/MoveTo/MoveBy/SkewTo/SkewBy/JumpTo/JumpBy/BezierTo/BezierBy/ScaleTo/ScaleBy/Blink/FadeIn/FadeOut/FadeTo/TintTo/TintBy
  7. 组合:Sequence/Repeat/RepeatForever/Spawn/Reverse.使用组合,参数列表需要最后一个action为NULL
  8. 变速动作:Ease/EaseExponential/EaseSine/EaseElastic/EaseBounce/EaseBack(In/Out)
  9. 监听动作的开始和结束,可以加入一个CallFunc作为动作(假动作,😑)。
  • Audio 背景音乐和音效的区别:
    • 音效可以同时播放多个,因此有返回值,需要停止的时候需要指明需要停止哪一个。
#include "audio/include/SimpleAudioEngine.h"
CocosDenshion::SimpleAudioEngine *audio = CocosDenshion::SimpleAudioEngine::getInstance();
audio->playBackgroundMusic("res/1.mp3");
audio->playEffect("res/1.mp3");
  • 坐标系
  1. open-GL坐标系,x向右,y向上为正;
  2. 世界坐标系,x向右,y向上为正,通常情况下和open-GL坐标系一致,这是一个绝对的坐标系;
  3. 节点坐标系,x向右,y向上为正,这是一个相对坐标系,是相对于父节点的位置;
  4. 屏幕坐标系,x向右,y向下为正。
  • 事件
    EventListenerTouchOneByOne *listener = EventListenerTouchOneByOne::create();
    listener->onTouchBegan = [=](Touch *touch, Event *event) -> bool {
        //Director::getInstance()->replaceScene(HelloWorld::createScene());
        return true;
    };
    listener->onTouchEnded = [](Touch *, Event *) -> void {
        //Director::getInstance()->replaceScene(HelloWorld::createScene());
    };
    Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, cocos); //按照显示的层的顺序来确定事件接收顺序。
  1. 是否点击到某个对象需要自行判断
        Node *target = event->getCurrentTarget();
        Vec2 pos = target->convertToNodeSpace(touch->getLocation());
        if (!Rect(0, 0, target->getContentSize().width, target->getContentSize().height).containsPoint(target->convertToNodeSpace(touch->getLocation()))) {
            return false;
        }
        return true;
  • ClippingNode
  1. ClippingNode有两个关键组件:child和stencil. child适用于显示的对象,stencil是遮罩。
    ClippingNode *clipping = ClippingNode::create();
    Sprite *mini_cocos = Sprite::create("HelloWorld.png");
    mini_cocos->setScale(0.5);
    clipping->addChild(LayerColor::create(Color4B(Color4F(1, 1, 1, 1)), 200, 150));

    Sprite *stencil = Sprite::create("HelloWorld.png");
    //stencil->setScale(0.3);
    stencil->setPosition(50, 60);
    clipping->setStencil(stencil);

    clipping->setInverted(true);

    gray->addChild(clipping, 2);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值