Quantcast
Channel: Cocos中文社区 - 最新主题
Viewing all 91396 articles
Browse latest View live

Cocos-BCX 受邀参加明斯克加密游戏大会,将围绕赋能区块链游戏创新带来分享

$
0
0

@alvin 写道:

4月25日至26日,第三届加密游戏大会(CGC)将在白俄罗斯首都明斯克举办,Cocos-BCX 受邀做开幕演讲,Cocos-BCX 全球市场负责人 Caterina Zhang 将带来以“赋能区块链游戏创新”为主题的分享。

Caterina Zhang 负责 Cocos-BCX 全球市场拓展,加入 Cocos-BCX 之前在 NEO 公有链担任全球市场总监。Caterina Zhang 致力于持续推动区块链技术和教育在全球的普及,参与了多个区块链项目的早起孵化和投资。

2018年5月,第一届加密游戏大会在乌克兰首都基辅市举办,是世界上第一个使用区块链和加密货币致力于游戏和游戏服务的会议。会上共有来自21个国家超过300名开发商、企业家、投资者以及有远见的人士与会,围绕“区块链技术和加密货币如何改变游戏市场”为主题,展开了期一天的激烈讨论。

第二届加密游戏大会在2018年10月举办于白俄罗斯首都明斯克,以“如何将区块链等尖端技术与游戏世界联合起来”,以及“区块链游戏带来的深远影响与机遇”为主题,近700名与会者开展了为期两天的讨论。

本月24日、25日举办的是第三届加密游戏大会,预计将会有来自30多个国家的1000多名代表与数百家公司将参与会议。本届大会由三个部分构成,分别是加密游戏,iGaming和游戏生态系统和服务。

Cocos-BCX 受邀做第三届加密游戏大会开幕演讲。

Cocos-BCX 是下一代游戏数字经济平台,致力于让区块链游戏开发更简单。

2018年8月,Cocos-BCX 推出了 BCX-NHAS-1808 标准(以下简称为 NHAS-1808 标准),该标准针对去中心分布账本式系统提出了一套统一的、便于扩展的数字资产标准及应用规范,并在规范的基础上延伸出更多的资产业务模式, 提出了独特的数字资产世界观系统,旨在为游戏开发者提供完善、便捷的开发环境,发挥链游特性,推动游戏链游化。

在2018年10月,Cocos-BCX 又推出了 NHAS-1808 标准的进阶版本,该版本中,开发者能轻松实现传统链/合约系统无法做到的业务逻辑,例如:资产租赁、抵押、典当等。以完成一个资产抵押的逻辑实现为例,开发者在合约中定义抵押业务各流程的函数,在达成抵押行为时,合约函数通过组合权属变更 OP 和一般交易 OP 实现支付抵押款、所有权变更等行为,利用链的定时任务 OP 定义抵押到期时收回使用权或期限内赎回时转还所有权等业务行为。

如今,BCX NHAS-1808 标准获得了 TRON、Ontology、Zilliqa和NEO 等项目的对接支持,成为区块链行业内接受程度最高的非同质数字资产标准之一。

Cocos 2019年巡回沙龙北京站上,Cocos-BCX 还展示了集成钱包、去中心交易所、区块链浏览器、资产管理等功能的 Cocos-Terminal ,并分享了更新的链系统。

同时,Cocos-BCX 还面向全球开展了开发者计划。Cocos-BCX 开发者计划伴随 Cocos-BCX 测试网同步推出,Cocos-BCX 将面向全球招募30个游戏开发者(团队),这30个开发者(团队)将获得 Cocos-BCX 独家区块链游戏开发技术支持,优秀作品将享有在 Cocos-BCX 链上优先上线并推广的机会,优秀团队也将有机会得到 Cocos-BCX 资金支持。

推出行业适用标准,开展活动开放日等,是致力构建下一代游戏数字经济平台的 Cocos-BCX 初心中的一部分。Cocos-BCX 将持续帮助传统开发者更快的了解并应用区块链技术,帮助已经入局的开发者更好更快的前行。通过 NHAS-1808 标准等为游戏行业赋能,从基础设施、经济模型等角度,降低行业进入门槛,增加行业可能性,助力业态繁荣,支持整个区块链游戏行业的技术和商业模式创新与进步。

帖子: 1

参与者: 1

阅读整个主题


cc.sys.openURL打不开问题

cocoscreator中如何监听当前的网络状态

$
0
0

@j2ee123 写道:

比如说在h5中,我可以用window.addEventListener('online', function (e) {})做监听
但是在native中怎么做呢?
是native有单独的方法或者有和h5通用的方法呢?

帖子: 1

参与者: 1

阅读整个主题

成都游戏公司招聘

$
0
0

@shern2333 写道:

成都可赢互娱
招聘cocos creator,要求2年左右cocos经验,坐标天府三街,专注海外休闲游戏市场,薪资8-15k,入职购买五险一金。
优秀团队,除了程序人均大佬(滑稽),项目自研自发,希望你爱玩游戏,爱做游戏。渴望你加入我们,安排!!
http://www.acoingames.com/
hr微信或者qq:蒋女士 844950440
谢谢

帖子: 1

参与者: 1

阅读整个主题

关于cocos creator编辑器按钮组件拖到脚本中对外的properties问题

$
0
0

@linzhi321991 写道:

本人刚开始接触creator,用的是2.0.9版本。准备边做边学,看网上视屏如何实现button回调,出现了一个问题。编辑器创建了按钮组件,推拽到脚本里properties对外的属性,but: cc.Button.写了 but.clickEvent...(回调),但代码提示没有这个方法,而且直接写完运行也直接报错,我试过其他方法,都是可行的。也不知道是什么原因,properties写了个Lable倒是可以使用的。

帖子: 1

参与者: 1

阅读整个主题

loadScene场景加载问题

如何在父节点监听判断某个子节点还存在不存在?

$
0
0

@2217404576 写道:

父节点nodeA 下面有子节点nodeB 。如何在父节点监听判断nodeB是否销毁了或还是存在。如果销毁/存在则如何如何。

帖子: 2

参与者: 1

阅读整个主题

麒麟子Cocos Creator实用技巧一:如何正确地显示微信头像

$
0
0

@boyue 写道:

之所以取名叫Cocos Creator实用技巧一,是因为我希望他能有二,三,四,五,六。。。。。
这个系列主要以工具查阅式的向大家展示麒麟子在项目开发中所使用到的一些Cocos小技巧
我建了两个群,一个是棋牌的,一个是非棋牌的,大家有兴趣的可以加入
幼麟棋牌社区官方群:176294790
Cocos Creator交流中心:727901932
多谢大加捧场


本系列不止这一篇哦 《麒麟子Cocos Creator实用技巧》目录
不管是游戏App,还是H5,又或者是微信小游戏。但凡接入了微信登录的应用,都可能需要显示微信头像。

在Cocos Creator中,我们常见的显示方法像下面这样

var headimg = 'http://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83erD6MOUwRKV9NyBAqnoFDTnltzAe2zWOkKxyDOFibVBb1ZV5CaATJwYAuNqZ5sXMBC4c8iacaHDf8RA/132';

cc.loader.load({url:headimg,type:'jpg'},function(err,tex){
    self.icon.spriteFrame = new cc.SpriteFrame(tex);
});

这样做大部分情况下是没有问题的。但容易踩到两个坑

假如用户在微信中上传的头像不是jpg格式,将会显示为黑屏
假如是H5中使用上述代码,会提示跨域访问
而最近(今天日期 2019-04-22)新出了一个奇怪的事情,就是Android系统7.0+的机器,在4G网下无法正常显示微信头像。 包括腾讯的欢乐斗地主里的排行榜也显示不出来。

这个问题我猜测,是4G的Android 7.0+的HTTP头和其他环境下不一样,导致腾讯拒绝了头像访问。 应该是封杀某音的时候,误伤。

解决这个问题最直接的办法,就是在自己的服务器上,配置一条NGINX转发协议。

server {
        listen       80;
        #server_name  h5.ooxx.cn;

        root        /root/wwwroot/;

        location /image {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass  $arg_url;
        }
    }

假如,我们的外网IP或者域名是 h5.ooxx.cn, 端口是80,或者其他的。 我们修改上面的访问方式为如下

var headimg = 'http://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83erD6MOUwRKV9NyBAqnoFDTnltzAe2zWOkKxyDOFibVBb1ZV5CaATJwYAuNqZ5sXMBC4c8iacaHDf8RA/132';
var url = 'http://h5.ooxx.cn:port/image?url=' + headimg + '&sb=213.jpg'; 
cc.loader.load(url,function(err,tex){
    self.icon.spriteFrame = new cc.SpriteFrame(tex);
});

这样改的原因如下

1、假如你做的是H5项目,h5.ooxx.cn域名刚好就是你的页面加载域名,那么你将处于同域中,不再有跨域问题

2、当我们请求最后合成的url时,NGINX会将url参数作为请求地址,转发出去,并且将获取到的信息,原路返回。 而我们添加的proxy_redirect off; 将会抹去我们系统机型为我们添加的各种HTTP HEADER。 不会再出现Android 7.0+ 4G网加载不了的问题。

3、添加 &sb=213.jpg参数,是为了让cc.loader.load函数识别到这是一个图片加载。 但由于不是强制的填写type,即使PNG也是可以正常显示的。

以上就是麒麟子在做项目的时候,解决微信头像,以及一些第三方服务器图片的最终方案。 希望能够帮助到大家。

帖子: 9

参与者: 1

阅读整个主题


TypeScript项目的tsconfig.json到底有用吗?

$
0
0

@xiupoman 写道:

如题,我把tsconfig.json里的target改成es6或者es2015,自动生成的js代码还是es5的,而且使用for of遍历Map的代码明显不对,是取了Map的length来遍历。我之前用js开发的项目里遍历Map的代码可以被转成正确的es5代码。

这是creator对ts的支持问题吗?有没有大神碰到过这种问题?求指导:pray:

  • Creator 版本:2.0.9

  • 目标平台: Web

  • 详细报错信息,包含调用堆栈:

  • 重现方式:使用ts遍历map

  • 之前哪个版本是正常的 :js项目

  • 手机型号 :

  • 手机浏览器 :

  • 编辑器操作系统 :

  • 编辑器之前是否有其它报错 :

  • 出现概率:100%

  • 额外线索:

帖子: 1

参与者: 1

阅读整个主题

麒麟子Cocos Creator实用技巧二:微信名字截断(支持表情)

$
0
0

@boyue 写道:

写完了实用技巧一以后,竟然有点兴奋的睡不着。于是立即写了这篇二。也是关于微信的。
麒麟子以后的贴子,都尽量做到,复制/粘贴即可使用的风格。 照顾各位伸手党


本系列不止这一篇哦 《麒麟子Cocos Creator实用技巧》目录

在我们日常游戏开发中,经常会面临将玩家名字截断的需求。

假如玩家是在我们游戏中创建的名字,那么可以简单粗暴地禁止玩家使用手机表情输入即可。

但如果我们是第三方账号登录,且使用了第三方账号的用户昵称,那么这个就不好保证了。

因此,为了配合界面的显示,我们通常需要在特定界面上进行名字截断。

举一个例子,假如我的名字是 麒麟子:iphone::iphone: 我们一眼看过去,是5个字。

但在计算机中可不是5个字,即使是全部用UTF8表示字符的javascript中,console.log('麒麟子:iphone::iphone:'.length) 也是8.

也就是说表情符号占用了 4个字符。 如果我们按UTF8去截断,必然会导致乱码。

因此我们定义以下规则

1、ascii字符,算1个字符

2、汉字,算2个字符

3、手机系统表情,算2个字符 (因为它们虽然占了4个字符,但是从显示宽度上来看,依然是2个字符)。

下面的函数 strClamp 可助你一臂之力, 这是麒麟子从 幼麟棋牌最新5.0框架中抠出来的代码,希望能够帮助到大家

function strClamp(str, maxChars, suffix) {
    var toCodePoint = function(unicodeSurrogates) {
        var r = [], c = 0, p = 0, i = 0;
        while (i < unicodeSurrogates.length) {
            var pos = i;
            c = unicodeSurrogates.charCodeAt(i++);//返回位置的字符的 Unicode 编码 
            if (c == 0xfe0f) {
                continue;
            }
            if (p) {
                var value = (0x10000 + ((p - 0xD800) << 10) + (c - 0xDC00));
                r.push({
                    v: value,
                    pos: pos,
                }); //计算4字节的unicode
                p = 0;
            } else if (0xD800 <= c && c <= 0xDBFF) {
                p = c; //如果unicode编码在oxD800-0xDBff之间,则需要与后一个字符放在一起
            } else {
                r.push({
                    v: c,
                    pos: pos
                }); //如果是2字节,直接将码点转为对应的十六进制形式
            }
        }
        return r;
    }

    suffix = suffix==null? '...' : suffix;
    maxChars *= 2;

    var codeArr = toCodePoint(str);
    var numChar = 0;
    var index = 0;
    for (var i = 0; i < codeArr.length; ++i) {
        var code = codeArr[i].v;
        var add = 1;
        if (code >= 128) {
            add = 2;
        }

        //如果超过了限制,则按上一个为准
        if (numChar + add > maxChars){
            break;
        }

        index = i;

        //累加
        numChar += add;
    }

    if(codeArr.length - 1 == index){
        return str;
    }

    var more = suffix? 1:0;

    return str.substring(0, codeArr[index - more].pos + 1) + suffix;
}

帖子: 19

参与者: 1

阅读整个主题

求大佬帮我看下这是什么问题!!!

$
0
0

@415681743 写道:

Cannot read property 'getComponent' of undefined,
就一个网上很简单的五子棋代码,我一点击棋盘,他不会出棋子而报错,就上面的错误。
具体代码如下:
cc.Class({
extends: cc.Component,

properties: {

    overSprite:{
        default:null ,
        type:cc.Sprite,
    },
    overLabel:{
        default:null ,
        type:cc.Label,
    },
    chessPrefab:{
        default:null,
        type:cc.Prefab,
    },

    chessList:{
        default:[] ,
        type:[cc.node]
    },

    whiteSpriteFrame:{
        default:null,
        type:cc.SpriteFrame,   
    },

    blackSpriteFrame:{
        default:null ,
        type:cc.SpriteFrame,
    },
    touchChess:{
        default:null,
        type:cc.Node,
        visible:false,
    },

    gameState:'white',
    fiveGroup:[],
    fiveGroupScore:[]

},

restartGame(){
    cc.director.loadScene('Game');
},

toMenu(){
    cc.director.loadScene('Menu');
},
ai(){
    //评分
    var self=this;
    for(var i=0;i<self.fiveGroup.length;i++){
        var b=0;//五元组里黑棋的个数
        var w=0;//五元组里白棋的个数
        for(var j=0;j<5;j++){
            self.getComponent(cc.Sprite).spriteFrame
            if(self.chessList[self.fiveGroup[i][j]].getComponent(cc.Sprite).spriteFrame == self.blackSpriteFrame){
                b++;
            }else if(self.chessList[self.fiveGroup[i][j]].getComponent(cc.Sprite).spriteFrame == self.whiteSpriteFrame){
                w++;
            }
        }
        if(b+w==0){
            this.fiveGroupScore[i] = 7;
        }else if(b>0&&w>0){
            this.fiveGroupScore[i] = 0;
        }else if(b==0&&w==1){
            this.fiveGroupScore[i] = 35;
        }else if(b==0&&w==2){
            this.fiveGroupScore[i] = 800;
        }else if(b==0&&w==3){
            this.fiveGroupScore[i] = 15000;
        }else if(b==0&&w==4){
            this.fiveGroupScore[i] = 800000;
        }else if(w==0&&b==1){
            this.fiveGroupScore[i] = 15;
        }else if(w==0&&b==2){
            this.fiveGroupScore[i] = 400;
        }else if(w==0&&b==3){
            this.fiveGroupScore[i] = 1800;
        }else if(w==0&&b==4){
            this.fiveGroupScore[i] = 100000;
        }
    }
    //找最高分的五元组
    var hScore=0;
    var mPosition=0;
    for(var i=0;i<this.fiveGroupScore.length;i++){
        if(this.fiveGroupScore[i]>hScore){
            hScore = this.fiveGroupScore[i];
            mPosition = (function(x){//js闭包
                return x;
                })(i);
        }
    }
    //在最高分的五元组里找到最优下子位置
    var flag1 = false;//无子
    var flag2 = false;//有子
    var nPosition = 0;
    for(var i=0;i<5;i++){
        if(!flag1&&this.chessList[this.fiveGroup[mPosition][i]].getComponent(cc.Sprite).spriteFrame == null){
            nPosition = (function(x){return x})(i);
        }
        if(!flag2&&this.chessList[this.fiveGroup[mPosition][i]].getComponent(cc.Sprite).spriteFrame != null){
            flag1 = true;
            flag2 = true;
        }
        if(flag2&&this.chessList[this.fiveGroup[mPosition][i]].getComponent(cc.Sprite).spriteFrame == null){
            nPosition = (function(x){return x})(i);
            break;
        }
    }
    //在最最优位置下子
    this.chessList[this.fiveGroup[mPosition][nPosition]].getComponent(cc.Sprite).spriteFrame = this.whiteSpriteFrame;
    this.touchChess = this.chessList[this.fiveGroup[mPosition][nPosition]];
    this.judgeOver();
},

judgeOver(){
    var x0 = this.touchChess.tag % 15;
    var y0 = parseInt(this.touchChess.tag / 15);
    //判断横向
    var fiveCount = 0;
    for(var x = 0;x < 15;x++){
        if((this.chessList[y0*15+x].getComponent(cc.Sprite)).spriteFrame === this.touchChess.getComponent(cc.Sprite).spriteFrame){
            fiveCount++; 
            if(fiveCount==5){
                if(this.gameState === 'black'){
                    this.overLabel.string = "你赢了";
                    this.overSprite.node.active = true;
                }else{
                    this.overLabel.string = "你输了";
                    this.overSprite.node.active = true;
                }
                this.gameState = 'over';
                return;
            }
        }else{
            fiveCount=0;
        }
    }
    //判断纵向
    fiveCount = 0;
    for(var y = 0;y < 15;y++){
        if((this.chessList[y*15+x0].getComponent(cc.Sprite)).spriteFrame === this.touchChess.getComponent(cc.Sprite).spriteFrame){
            fiveCount++; 
            if(fiveCount==5){
                if(this.gameState === 'black'){
                    this.overLabel.string = "你赢了";
                    this.overSprite.node.active = true;
                }else{
                    this.overLabel.string = "你输了";
                    this.overSprite.node.active = true;
                }
                this.gameState = 'over';
                return;
            }
        }else{
            fiveCount=0;
        }
    }
    //判断右上斜向
    var f = y0 - x0;
    fiveCount = 0;
    for(var x = 0;x < 15;x++){
        if(f+x < 0 || f+x > 14){
            continue;
        }
        if((this.chessList[(f+x)*15+x].getComponent(cc.Sprite)).spriteFrame === this.touchChess.getComponent(cc.Sprite).spriteFrame){
            fiveCount++; 
            if(fiveCount==5){
                if(this.gameState === 'black'){
                    this.overLabel.string = "你赢了";
                    this.overSprite.node.active = true;
                }else{
                    this.overLabel.string = "你输了";
                    this.overSprite.node.active = true;
                }
                this.gameState = 'over';
                return;
            }
        }else{
            fiveCount=0;
        }
    }
    //判断右下斜向
    f = y0 + x0;
    fiveCount = 0;
    for(var x = 0;x < 15;x++){
        if(f-x < 0 || f-x > 14){
            continue;
        }
        if((this.chessList[(f-x)*15+x].getComponent(cc.Sprite)).spriteFrame === this.touchChess.getComponent(cc.Sprite).spriteFrame){
            fiveCount++; 
            if(fiveCount==5){
                if(this.gameState === 'black'){
                    this.overLabel.string = "你赢了";
                    this.overSprite.node.active = true;
                }else{
                    this.overLabel.string = "你输了";
                    this.overSprite.node.active = true;
                }
                this.gameState = 'over';
                return;
            }
        }else{
            fiveCount=0;
        }
    }
    //没有输赢交换下子顺序
    if(this.gameState === 'black'){
        this.gameState = 'white';
    }else{
        this.gameState = 'black';
    }
},

// use this for initialization
onLoad: function () {
    this.overSprite.node.active = false;

    var self = this ;
    for(var y=0 ;y<15 ;y++){
        for(var x=0; x<15 ; x++){
            var newChess = cc.instantiate(this.chessPrefab) ;
            this.node.addChild(newChess);
            newChess.setPosition(cc.p(x*40+20 ,y*40+20));
            newChess.on(cc.Node.EventType.TOUCH_END, function(event){
                self.touchChess = this ;
                if(self.gameState === 'black' && this.getComponent(cc.Sprite).spriteFrame === null){
                    this.getComponent(cc.Sprite).spriteFrame = self.blackSpriteFrame ;
                    self.judgeOver();
                    if(self.gameState === 'white'){
                        self.ai();
                    }
                }
            });

            this.chessList.push(newChess);
        }
    }
    // 白棋先在棋盘正中下一子
    this.chessList[112].getComponent(cc.Sprite).spriteFrame = self.whiteSpriteFrame ;
    // 下一步该黑棋下
    this.gameState = 'black' ;
    //添加五元数组
    //横向
    for(var y=0;y<15;y++){
        for(var x=0;x<11;x++){
            this.fiveGroup.push([y*15+x,y*15+x+1,y*15+x+2,y*15+x+3,y*15+x+4]);
        }  
    }
    //纵向
    for(var x=0;x<15;x++){
        for(var y=0;y<11;y++){
            this.fiveGroup.push([y*15+x,(y+1)*15+x,(y+2)*15+x,(y+3)*15+x,(y+4)*15+x]);
        }
    }
    //右上斜向
    for(var b=-10;b<=10;b++){
        for(var x=0;x<11;x++){
            if(b+x<0||b+x>10){
                continue;
            }else{
                this.fiveGroup.push([(b+x)*15+x,(b+x+1)*15+x+1,(b+x+2)*15+x+2,(b+x+3)*15+x+3,(b+x+4)*15+x+4]);
            }
        }
    }
    //右下斜向
    for(var b=4;b<=24;b++){
        for(var y=0;y<11;y++){
            if(b-y<4||b-y>14){
                continue;
            }else{
                this.fiveGroup.push([y*15+b-y,(y+1)*15+b-y-1,(y+2)*15+b-y-2,(y+3)*15+b-y-3,(y+4)*15+b-y-4]);
            }
        }
    }
},

});

帖子: 1

参与者: 1

阅读整个主题

中文编程

$
0
0

@nwet3t4 写道:

我感觉用中文编程比用英语好太多了,变量名方法名文件名都可以是中文,英语有个脑子里转换成中文的过程,理解代码的速度完全比不上中文,亚洲人智商本来就是最高的,就是因为英语编程限制了思考速度,各位怎么看

帖子: 11

参与者: 1

阅读整个主题

请教大神,209集成bugly jni报错,求指教

$
0
0

@yoline 写道:

倒腾了一晚上了还没倒腾出来,会报这个错误
E/CrashReport: [cocos2d-x] check jni error
E/CrashReport: [cocos2d-x] failed to find class: com/tencent/bugly/agent/GameAgent

我感觉就是jni调用不到libs下的bugly jar包,求帮助!

帖子: 2

参与者: 1

阅读整个主题

creator,触摸旋转,不跟手问题

$
0
0

@1112416 写道:

先看表现

场景为creator空项目初始场景,在里面添加了一个Sprite精灵,脚本绑定在精灵上

脚本如下:

creator版本: v2.0.8

求大佬指点迷津。

帖子: 3

参与者: 1

阅读整个主题

Cocos Creator可以直接使用axios和protobufjs吗


Web Mobile提示报错fuscreen error

$
0
0

@282196521 写道:

cocoscreator版本号:2.0.9

错误描述:
把游戏构建发布成Web Mobile,发布到服务器里面测试,每次都会提示这个错误
经过测试后发现,使用Chrome,打开Toggle device toolbar,就是模拟手机的模式才会出现这个错误,需要等很久的loading才能打开游戏,打开后游戏正常

帖子: 3

参与者: 1

阅读整个主题

IOS的SPlash图片切换到第一个场景,怎么去过渡

$
0
0

@zxcvbnm0014 写道:

如题,IOS的SPlash图片到第一个场景的过度,怎么能做到痕迹。现在用的是同一个图片,还是会闪动一下。之前cocos2dx是可以做到直接切换的。这个需要怎么处理。

帖子: 1

参与者: 1

阅读整个主题

game Logic运行越来越高是什么原因

$
0
0

@1305701143 写道:

游戏开始时是几ms,在浏览器开启4倍慢速之后运行几分钟就变成十几ms,再过几分钟就到20~30了。而且返回到其他场景也不会降下来,想问下有哪些因素会影响游戏逻辑的时间,到后面游戏fps越来越低,这个问题不知道该如何解决。。

帖子: 1

参与者: 1

阅读整个主题

关于shader的问题,求大佬解答

$
0
0

@1061613593 写道:

我想让精灵可以设置 色相 饱和度 亮度(HSL),但我还想在这同时实现对透明度色设置。不知道能不能实现。注:色相 饱和度 亮度 我通过粘贴复制实现了 但是精灵无法设置透明度了

ifdef GL_ES

    precision mediump float;

endif

    varying vec2 v_texCoord;
    uniform float u_dH;
    uniform float u_dS;
    uniform float u_dL;
    void main() { 
        vec4 texColor = texture2D(CC_Texture0, v_texCoord); 
        float r = texColor.r; 
        float g = texColor.g; 
        float b = texColor.b; 
        float a = texColor.a; 
        //convert rgb to hsl 
        float h; 
        float s; 
        float l; 
        { 
            float max = max(max(r, g), b); 
            float min = min(min(r, g), b); 
            //----h 
            if (max == min){ 
                h = 0.0; 
            } 
            else if (max == r&&g >= b){ 
                h = 60.0*(g - b) / (max - min) + 0.0; 
            } 
            else if (max == r&&g < b){ 
                h = 60.0*(g - b) / (max - min) + 360.0; 
            } 
            else if (max == g){ 
                h = 60.0*(b - r) / (max - min) + 120.0; 
            } 
            else if (max == b){ 
                h = 60.0*(r - g) / (max - min) + 240.0; 
            } 
            //----l 
            l = 0.5*(max + min); 
            //----s 
            if (l == 0.0 || max == min){ 
                s = 0.0; 
            } 
            else if (0.0 <= l&&l <= 0.5){ 
                s = (max - min) / (2.0*l); 
            } 
            else if (l > 0.5){ 
                s = (max - min) / (2.0 - 2.0*l); 
            } 
        } 
        //(h,s,l)+(dH,dS,dL) -> (h,s,l) 
        h = h + u_dH; 
        s = min(1.0, max(0.0, s + u_dS)); 
        l = l + u_dL; 
        //convert (h,s,l) to rgb and got final color 
        vec4 finalColor; 
        { 
            float q; 
            if (l < 0.5){ 
                q = l*(1.0 + s); 
            } 
            else if (l >= 0.5){ 
                q = l + s - l*s; 
            } 
            float p = 2.0*l - q; 
            float hk = h / 360.0; 

            float t[3]; 
            t[0] = hk + 1.0 / 3.0; 
            t[1] = hk; 
            t[2] = hk - 1.0 / 3.0;  

            float c[3]; 
            for (int i = 0; i < 3; i++){ 
                if (t[i] < 0.0)t[i] += 1.0; 
                if (t[i] > 1.0)t[i] -= 1.0; 

                if (t[i] < 1.0 / 6.0){ 
                    c[i] = p + ((q - p)*6.0*t[i]); 
                } 
                else if (1.0 / 6.0 <= t[i] && t[i] < 0.5){ 
                    c[i] = q; 
                } 
                else if (0.5 <= t[i] && t[i] < 2.0 / 3.0){ 
                    c[i] = p + ((q - p)*6.0*(2.0 / 3.0 - t[i])); 
                } 
                else{ 
                    c[i] = p; 
                }
            } 
            finalColor = vec4(c[0], c[1], c[2], a); 
        } 
        finalColor += vec4(u_dL, u_dL, u_dL, 0.0); 
        gl_FragColor = finalColor; 
    }

帖子: 1

参与者: 1

阅读整个主题

求大佬解救萌新

$
0
0

@771472194qq.com 写道:

PopMgr 管理类增加监听
creatPop(){
cc.vv.glb.regEventLis(EventType.POP_LAYER,function(msg){
if(msg!=null){
var thatScene = cc.director.getScene().getChildByName("Canvas")
cc.loader.loadRes("prefabs/shopPop",function(err,loadedResource){
if( err )
{
cc.log("加载预制体失败--->" + err.message)
return
}
if( !( loadedResource instanceof cc.Prefab ) )
{
cc.log( '你载入的不是预制资源!' )
return
}
var thatPop = cc.instantiate(loadedResource)
if(thatPop!=null){
thatPop.parent = thatScene
}
})
}
},
在运行最开始start脚本
var PopMgr = require("PopMgr")
cc.vv.PopMgr = new PopMgr()
cc.vv.PopMgr.creatPop()

在游戏大厅发送一个打开弹窗指令:
cc.vv.glb.sendEvent(EventType.POP_LAYER,PopLayer.POP_ACTIVE)

问题: 第一次执行者这条指令报错 base-node.js:392 Uncaught TypeError: Cannot read property 'push' of null
at cc_Node.setParent (base-node.js:392)
at PopMgr.js:50
at CCLoader. (CCLoader.js:479)
at CCLoader.js:271
at utils.js:81
第一次之后执行指令 预制体能被创建但立马删除

帖子: 1

参与者: 1

阅读整个主题

Viewing all 91396 articles
Browse latest View live