zoukankan      html  css  js  c++  java
  • Cocos Creator 学习记录

    官网地址:https://www.cocos.com/

    1、修改帧率(FPS)

    cc.game.setFrameRate(30)
    

      

    2、键盘按下触发操作

     这里主要记录的是cc.macro.KEY、systemEvent、SystemEvent.EventType
    /**
    *cc.macro.KEY  对应键盘值
    *systemEvent    相关文档地址  *https://docs.cocos.com/creator/api/zh/classes/SystemEvent.html
    *SystemEvent.EventType 有三个属性
    *    KEY_DOWN String 当按下按键时触发的事件
    *    KEY_UP String 当松开按键时触发的事件
    *    DEVICEMOTION String 重力感应
    **/
    
    onLoad () {
            cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, this.onkeypress, this)
        },
    
    onkeypress(e){
            if (e.keyCode == cc.macro.KEY.left) {
                this.direction = cc.v2(-1, 0)
            } else if (e.keyCode == cc.macro.KEY.right) {
                this.direction = cc.v2(1, 0)
            } else if (e.keyCode == cc.macro.KEY.up) {
                this.direction = cc.v2(0, 1)
            } else if (e.keyCode == cc.macro.KEY.down) {
                this.direction = cc.v2(0, -1)
            } else if (e.keyCode == cc.macro.KEY.space) {
                this.direction = null
            }
        },
    
    update (dt) {
            if (this.direction == null) return;
    
            let pos = cc.find('Canvas/xx').getPosition()
            pos.x += this.speed * this.direction.x
            pos.y += this.speed * this.direction.y
    
            cc.find('Canvas/xx').setPosition( pos )
        },
    

      

    3、查询节点

     this.node.children;
    
     this.node.getChildByName("Cannon 01");
    
    如果子节点的层次较深,你还可以使用 cc.find,cc.find 将根据传入的路径进行逐级查找:
    
    cc.find('Canvas/xx')
    

      

    4、tween 动画效果 

    // 个人理解 cc.tween(node).to(持续时间, 执行的对象, 执行的速度)
    /**
    * to: 对属性进行绝对值计算,最终的结果是设置的属性值
    * by: 对属性的相对值计算,最终的运行结果是设置的属性值加上开始运行是节点的属性值
    * start() 表示这个动画运行
    **/
    //案例
    cc.tween(node)
      .to(1, {scale: 2, position: cc.v3(100, 100, 100)})
      .call(() => { console.log('This is a callback'); })
      .by(1, {scale: 3, position: cc.v3(200, 200, 200)}, {easing: 'sineOutIn'})
      .start(cc.find('Canvas/cocos'));
    

      

    5、获取文本(label)内容

    this.label = this.getComponent(cc.Label);
    this.text = this.label.string;  // 获取文本
    this.label.string = '';  // 清空文本
    

      

     6、加载资源(cc.resources.load())

    示例:
      onClicked(){
        let self = this; 
        cc.resources.load('icon/汽车', cc.SpriteFrame, function(err, assets){
          self.node.getComponent(cc.Sprite).spriteFrame = <cc.SpriteFrame> assets; // <cc.SpriteFrame>  类型转化
        });
      }
    
    cc.resources.load( path, type, onComplete)
    
    第一个参数: path
    表示要加载的路径 例如: icon/汽车 指的是 assets/resources/icon/汽车
    
     * 待加载的资源必须放在 resource 目录下
     * 路径不能加后缀
    
    第二个参数: type
    指定资源对象类型,可以省略  例如 cc.SpriteFrame, cc.AudioClip
    
    第三个参数: onComplete
    指定回调方法,当资源加载完毕调用
        function( err, assets ){}
    若 err == null ,表示资源加载成功,assets即为加载得到的资源对象
    若 err != null, 表示资源加载失败,err即为出错的原因
    

      

     7、引入其他js文件获取内容:require('event')

    let EventJs = require('event')
    
    properties: {
            direction: null,
            speed: 0.001,
            EventJs: {
                default: null,
                type: cc.node
            }
        },
    
    onLoad () {
            // console.log('导入jseventJs', EventJs)
             let event = new EventJs()
             console.log('is EventJs', event)
        },
    

      

     8、动态创建节点

     

    properties: {
         bulletIcon: {
        default: null,
           type:cc.SpriteFrame,
      }
    },
    onLoad () {
        this.node.on('touchstart', this.onTouchStart, this)
    },
    onTouchStart (e) {
        this.fire();
        
    },
    
    
    fire() {
        if (this.bulletIcon == null ) { cc.log('请设置bulletIcon图片'); return; }
        
        // 动态创建一个node,添加sprite组件
         
        let bullet = new cc.Node();
    
        let sprite = bullet.addComponent(cc.Sprite)
        sprite.spriteFrame = this.bullectIcon;
    
        bullet.parent = this.node; // 作为子节点
    
        bullect.setPosition(cc.v3(0, 50, 0)); // 设置初始位置
    }
    

      

     9、public、private 和 protected 区别

    TypeScript 可以使用三种访问修饰符(Access Modifiers),分别是 public、private 和 protected。
    
        public 修饰的属性或方法是公有的,可以在任何地方被访问到,默认所有的属性和方法都是 public 的
    private 修饰的属性或方法是私有的,不能在声明它的类的外部访问
    protected 修饰的属性或方法是受保护的,它和 private 类似,区别是它在子类中也是允许被访问的

      

     10、利用坐标计算其夹角

    通过高中数学我们可以知道, A到B的向量 = B点 - A点。 那我们只需要将目标对象的位置 - 自己的位置,即可得到方向向量。
    
    方向向量转换为角度,需要认清一个隐含变量,就是这个角度的基准是 X 轴正方向。 使用向量来表示就是 (1,0)。
    
    cc.Vec2提供了两个函数 cc.Vec2.angle和cc.Vec2.signAngle, 后者相比前者来说,后者产生的角度是有符号的,而前者会永远为正。 我们使用cc.Vec2.signAngle来将方向向量转换为弧度。
    
    骨骼点的坐标
    
            let leftKneePoint = BodyPointData.Instance().leftKneePoint // 左膝盖
            let rightKneePoint = BodyPointData.Instance().rightKneePoint
    
            let leftButtockPoint = BodyPointData.Instance().leftButtockPoint // 左臀
            let rightButtockPoint = BodyPointData.Instance().rightButtockPoint
    
            // 现在知道左臀,右臀,左膝盖,右膝盖的坐标。计算出两腿之间的夹角
            // cc.v2()  得到两条腿的向量坐标
            let leftLegVector = cc.v2( leftButtockPoint.x - leftKneePoint.x, leftButtockPoint.y - leftKneePoint.y )
            let rightLegVector = cc.v2( rightButtockPoint.x - rightKneePoint.x, rightButtockPoint.y - rightKneePoint.y )
    
            // signAngle 得到夹角弧度
            let Radian = leftLegVector.signAngle(rightLegVector)
    
            // 得到具体的度数(转换为数字)
            let Rate = cc.misc.radiansToDegrees(Radian)   
    

      

    、、、

    努力到无能为力,拼搏到感动自己。 欢迎大家在下方多多评论。
  • 相关阅读:
    【转载】Nginx负载均衡之后碰到的问题
    【转载】Nginx
    【转载】大型网站架构系列之一,前言,不得不考虑的问题
    【转载】Windows上搭个Nginx集群环境玩玩
    [转载]反射
    【转载】Nginx 简介
    【转载】系统性能调优吐血总结分享
    【转载】nginx for windows: 让nginx以服务的方式运行
    poj2377
    poj2371
  • 原文地址:https://www.cnblogs.com/wasbg/p/15398455.html
Copyright © 2011-2022 走看看