CocosCreator-常见问题和解决/过时API-持续更新

Posted 瑶山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CocosCreator-常见问题和解决/过时API-持续更新相关的知识,希望对你有一定的参考价值。

目录

3.x

 ccc 3.x 弃用 cc 全局变量

类型“Vec2”上不存在属性“mul”。

类型“never”上不存在属性“instantiate”

类型node不存在width 

2.x

Sorry, cc.Director.getWinSize is deprecated. Please use cc.winSize instead

Sorry, cc.p is deprecated

v2.1.0以,“旋转”已被弃用,请改为设置“-angle”

Sorry, cc.Node.getPositionY is removed, please use y instead.

其他

设置刚体.y方向速度不生效

tiledMap地图在ccc里不显示图块资源图

使用tiledmap时发现图快拼接处有间隙


  • ccc常见问题
  • 持续更新

3.x

 ccc 3.x 弃用 cc 全局变量

import * as cc from 'cc';

类型“Vec2”上不存在属性“mul”。

 在3.x中,将2.x里的函数定义ccp***(如ccp,ccpAdd,ccpSub)相关的操作都封装到了这个Vec2的类

2.4文档:Vec2 · Cocos Creator

3.2文档:Vec2 | CocosCreatorAPI

// Vec2.sub向量减法, Vec2.mag返回该向量的长度
// let linelen = posBegin.sub(posEnd).mag();
let linelen = posBegin.subtract(posEnd).length();

// Vec2.add元素向量加法, Vec2.mul缩放向量,并返回新结果
// let midPos = posBegin.add(posEnd).mul(0.5);
let midPos = posBegin.add(posEnd).multiply(v2(0.5, 0.5));

类型“never”上不存在属性“instantiate”

// this.curGrNode = cc.instantiate(this.node);

import  instantiate, director  from 'cc';
// Instantiate node from prefab.
const node = instantiate(prefabAsset);

类型node不存在width 

需要先获取节点上的 UITransform 组件,再使用对应的接口

        const uiTransform = this.getComponent(UITransform);
        // 方法一
        uiTransform.setContentSize(200, 120);
        uiTransform.setAnchorPoint(0, 0.5);

        // 方法二
        uiTransform.width = 200;
        uiTransform.height = 120;
        uiTransform.anchorX = 0;
        uiTransform.anchorY = 0.5;

event.stopPropagation() 过时

event.stopPropagation();
        event.preventDefault();


// EventTouch 里属性可以设置, 停止传递当前事件
        event.propagationStopped = true
        event.propagationImmediateStopped = true

2.x

Sorry, cc.Director.getWinSize is deprecated. Please use cc.winSize instead

升级2.xjingg

cc.Director.getWinSize获取视图的大小,以点为单位。

Sorry, cc.p is deprecated

cocos creator 2.0的废除cc.p接口Sorry, cc.p is deprecated. Please use cc.v2 instead

cc.p(500, 500); 改为

cc.Vec2(500, 500);  或  cc.v2(500, 500);

v2.1.0以,“旋转”已被弃用,请改为设置“-angle”

cc.Node.rotation` is deprecated since v2.1.0, please set `-angle` instead. (`this.node.rotation = x` -> `this.node.angle = -x`)

Sorry, cc.Node.getPositionY is removed, please use y instead.

一起的还有Sorry, cc.Node.setPositionY is removed, please use y instead

修改:

api调整,全局替换 cc.Node.setPositionY 为 cc.Node.y;
全局替换 cc.Node.setPositionX 为 cc.Node.x;
 
 // if (btnStyle.getPositionY() == 0) 
      if (btnStyle.getPosition.y == 0) 

其他

设置刚体.y方向速度不生效

this.body = this.getComponent(cc.RigidBody);

var speed = this.body.linearVelocity;

speed.x = 500;

speed.y = 500;

this.body.linearVelocity = speed;

改为

var speed = this.body.linearVelocity;

this.body.linearVelocity = cc.v2(500, 500);

tiledMap地图在ccc里不显示图块资源图

使用tiledmap时发现图快拼接处有间隙

全局关闭抗锯齿


        // 全局关闭抗锯齿
        cc.view.enableAntiAlias(false);

在编辑器里把地图使用的贴图资源的Filter Mode设置为Point

通过脚本一键修改所有图片的.meta文件里的filter mode为point:

find . -name "*.meta" | xargs perl -pi -e 's|\\bbilinear\\b|point|g'

(转)CocosCreator零基础制作游戏《极限跳跃》制作游戏障碍物实现碰撞检测

 

CocosCreator零基础制作游戏《极限跳跃》六、制作游戏障碍物实现碰撞检测

 

前面我们实现了背景和主角的操作,下面我们开始添加游戏的障碍物以及碰撞检测的功能。

一、制作障碍物Prefab(预制)

Prefab(预制)是cocoscreator官方文档提出的,是为了解决需要重复使用的节点问题。

如何制作预制体prefab呢?具体可以参照官方文档,这里简单的说下,就是在场景中编辑好节点后,直接将节点从 层级管理器 拖到 资源管理器 中即可。

我们来看下极限跳跃的游戏截图分析下。。

技术分享图片

 

游戏中障碍物我们分为2种,一个是向左移动的,一个是向右移动的,这里我就简单省事了,直接创建了2个预制体,每个预制体实现自己的脚本。可以集成在一起的。

我们先制作左边的障碍物,首先把障碍物素材拖进层级管理器取名zhangaiwu1。然后我们来实现并制作左边的脚本,创建脚本guawuleft。实现代码。

01 //guaiwuleft.js
02 cc.Class({
03     extends: cc.Component,
04     properties: {
05          
06         times: 0,//控制时间
07          
08         },
09     },
10     onLoad: function () {
11        
12         this.moveRight();
13     },
14 //左右移动
15     moveRight: function(){
16          
17         var seq = cc.repeatForever(
18              cc.sequence(
19                  cc.moveBy(this.times, cc.p(240, 0)), cc.moveBy(this.times, cc.p(-240,0))
20              ));
21         this.node.runAction(seq);
22     },

脚本写好了,我们对节点进行绑定。

技术分享图片

绑定好后,我们把层级管理器中的节点zhangaiwu1拖进我们资源管理器的Texture文件夹中,成功后我们的层级管理器中的节点就会变成蓝色,同时我们会在资源管理器中得到一个预制体文件zhangaiwu1,我们这里改成zhangaiwuleft,方便和辨认。

技术分享图片

 

预制体文件zhangaiwu1,我们这里改成zhangaiwuleft。然后删除层级管理器的zhangaiwu1节点。使用同样的方法,我们创建脚本zhangaiwuright,并制作预制体zhangaiwuright。

01 //guawuright.js
02 cc.Class({
03     extends: cc.Component,
04     properties: {
05          
06         times: 0,//控制时间
07          
08         },
09     },
10     onLoad: function () {
11        
12         this.moveRight();
13     },
14     //左右移动
15     moveRight: function(){
16          
17          
18         var seq = cc.repeatForever(
19              cc.sequence(
20                  cc.moveBy(this.times, cc.p(-240, 0)), cc.moveBy(this.times,cc.p(240,0))
21              ));
22        this.node.runAction(seq);
23     },

这样我们就制作好了2个预制体,分别为zhangaiwuleft和 zhangaiwuright。可以在资源管理器中看到。

技术分享图片

制作好了2个障碍物,我们开始在场景中添加我们的障碍物了。

分析下游戏我们可以发现障碍物是可以根据游戏背景移动的,所以我们要把障碍物添加到背景上。

我们开始制作背景bg1的障碍物,首先把zhangaiwuleft和zhangaiwuright两个预制体拖到层级管理器bg1节点,使其成为bg1的子节点。布局时候把zhangaiwuleft放到屏幕左边,zhangaiwuright放到右边,调整位置。同样的方法给bg2添加障碍物。。如图:

技术分享图片

通过我们给不同高度的障碍物设置不同的移动时间,我们的游戏看起来更好玩,来运行测试下效果。

技术分享图片

好了。我们的游戏看起来还不错吧,下面我们来做碰撞检测,也就是说如果玩家和障碍物碰到了,那么我们的角色就会死掉,游戏就会结束。结束场景等会我们在做,现在我们先做碰撞检测,如果碰到障碍物我们停止触摸来达到玩家不可操作的目的。

打开guaiwuleft脚本,来给左边的障碍物添加碰撞检测的事件。

01 //guaiwuleft.js
02 var hero2 = require("HeroPlayer");//引用玩家的操作脚本
03 //....省略..
04 //当前节点世界坐标系下的范围包围盒
05  noteBox: function(){
06          
07         return this.node.getBoundingBoxToWorld();
08         
09     },  
10      
11     // called every frame, uncomment this function to activate update callback
12     update: function (dt) {
13          
14         var _label = cc.find("Canvas/hero").getComponent(hero2);
15          
16       //障碍物碰撞框
17     if(cc.rectIntersectsRect(_label.node.getBoundingBoxToWorld(), this.noteBox())){
18              
19            cc.eventManager.removeAllListeners();//移除所有事件监听
20                  
21             }
22          
23     },

同样的方法,我们在guaiwuright中添加碰撞事件。天下代码一大抄,直接抄过去就行了。

我们在此运行检测下。。

技术分享图片

我们的角色被障碍物碰到,就死掉了,然后就会屏蔽游戏的触摸事件,玩家角色开始掉落。当角色掉落到屏幕底部时候游戏结束。会切换到结束场景。这里大家看到角色掉没了,不要在意这些细节。。我们接下来开始制作结束场景。

原文地址:https://www.byjth.com/jixiantiaoyue/71.html

以上是关于CocosCreator-常见问题和解决/过时API-持续更新的主要内容,如果未能解决你的问题,请参考以下文章

解决CocosCreator 在微信小游戏中使用Socket.io 报错的问题

(转)CocosCreator零基础制作游戏《极限跳跃》制作游戏障碍物实现碰撞检测

CocosCreator经验总结——Typescript实现俄罗斯方块

CocosCreator游戏开发---菜鸟学习之路SocketIO简易教程

插件CocosCreator Spine在场景编辑器实时预览(论坛水友分享的)

cocoscreator运行时发生的那些报错(持续更新)