• Cocos2dx 3.0 过渡篇(三十)灰机还是3D好(Sprite3D)


    如今都非常少发3.0过渡篇这一系列的博文了,原因是多方面的,一个是游戏开发进度,尽管上面并没给我什么压力,但我自己一直在赶。还有一方面是个人私生活这块。五月份确实是多事之秋,有时候真的没办法全心思去研究新东西。
    有的人肯定会说:那你怎么有时间写《玩转微信...》的博客。

    我的回答是理性的:要你管?!
    开个玩笑,事实上我对微信公众平台的开发研究不深,写那些也都比較简单, 不用花太多心思(最多耍耍嘴皮子)。更何况还能够将自己之前的学习心得记录下来。免得再过段时间都忘光光~~。



    --------
    回归正题,Cocos2d-x v3.1 RC0 在今天上午公布,不得不感慨cocos2dx版本号公布之快,假设能够吐槽的话。我仅仅想说:...呵呵...(有人跟我说呵呵表示冷笑的意思

    将最新版本号下载下来后。首先要做的肯定是在cmd下初始化下setup.py这些碗糕(为什么我有一种每周都在和setup.py打交道的错觉?),只是这次不用再又一次设置NDK。SDK。ANT的路径。它都帮你找好了。

    也不知道这个功能是3.0rc0就有了还是这个版本号才有的。反正记不清了。

    以下进入大家最期待的的打灰机环节。这里用到了Sprite3D这个较新的类,先来看下几个API

    /// creates a Sprite3D。创建
    static Sprite3D* create(const std::string &modelPath);
    
    // creates a Sprite3D. It only supports one texture, and overrides the internal texture with 'texturePath'
    static Sprite3D* create(const std::string &modelPath, const std::string &texturePath);
    
    //set texture。设置纹理
    void setTexture(const std::string& texFile);
    void setTexture(Texture2D* texture);

    这里的model是一个obj类型的文件,我也是第一次接触这货。总之它有和.png图片配合使用,原理应该相似于plist与png之间的基情关系。



    以下開始创建一个3D灰机。我会告诉你灰机的资源是直接从Cocos2dx test的资源里拿的吗?

    auto huiJi = Sprite3D::create("boss1.obj");
    huiJi->setTexture("boss.png");
    huiJi->setPosition(Point(350,350));
    huiJi->setScale(20.f);//由于图片比較小,所以这里的放大倍数要大点

    效果例如以下:



    当然了,既然是3D的,那肯定要来点动作特效吧?这里我认为用旋转的效果最好:
    auto rep = RepeatForever::create(RotateBy::create(3,360));
    huiJi->runAction(rep);//一直转啊转啊转
    效果来了:


    恩,为了营造一个文明,健康向上的博客氛围。以上灰机的相关介绍我就先讲到这啦。

    既然Sprite3D都出来了,那么RotateBy3D这货果断藏不住了

    当然了,事实上并没有RotateBy3D这个类,当前还是用RotateBy来实现3D旋转效果。API例如以下:
    static RotateBy* create(float duration, const Vec3& deltaAngle3D);
    第一个參数就不用说了,旋转时间嘛。第二个參数的Vec3是什么?哈哈哈哈,我也不知道.......非常明显这个也是3.0rc0后才出来的,等有了解了再分享给大家吧。恩,只是使用方法还是比較easy理解的,看Vec3里的參数例如以下
    Vec3(float xx, float yy, float zz)
    这里的xx,yy,zz三个參数能够理解成三维坐标里的x。y,z。水平的那条就是x轴,竖直的是y轴,往里面的是z轴。所以假设Vec3的參数是这种Vec3(360,0,0)则表示对象以x方向为轴旋转。

    实现例如以下:

    auto actionBy1 = RotateBy::create(4, Vec3(360, 0, 0));
    huiJi->runAction(actionBy1);
    执行效果我就不截图了。大家自己试下就知道。

    假设不是要让灰机运动,而是直接给它设置一个旋转角度也一样是能够的,用以下这个API:
    virtual void setRotation3D(const Vec3& rotation);
    原理和RotateBy3D一样,使用例如以下:
    huiJi->setRotation3D(Vec3(90,0,0));
    让灰机以x方向为轴旋转90°,效果例如以下:

    怕大家误解,这里我在强调一下。RotateBy3D 不仅对Sprite3D创建出来的对象有效,对其它对象也一样有效。如Sprite等。


    好了,灰机这个话题我真的不能再继续下去了。

    就扯到这吧。

    尊重原创。转载请注明来源:

  • 相关阅读:
    父子组件例子
    指令
    使用git将代码推到coding
    vue生命周期
    vue 父子组件
    vuex
    使用vue与element组件
    vue02
    使用vue
    telnet 使用
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5120734.html
Copyright © 2020-2023  润新知