如何获取cocos studio2.2.1中定义的用户数据

如何获取cocos studio2.2.1中定义的用户数据,第1张

所有继承自Node类型的节点都支持使用getChildByName(name)和getChildByTag(tag)来获取当前节点的某个子节点。这两个函数已经能够满足我们大部分的需求 但有时候我们需要获取某个节点的子节点的子节点、甚至子节点的子节点的子节点、甚至 这样

buttonclick:function(event){

        let exportJson = {};

        let sysInfo = windowwxgetSystemInfoSync();

        //获取微信界面大小

        let width = sysInfoscreenWidth;

        let height = sysInfoscreenHeight;

        windowwxlogin({

            success: (res) => {

                if (rescode) {

                    consolelog("rescode:", res);

                    exportJsoncode = rescode;//向服务端传递code用于获取微信小游戏的用户唯一标识

                    windowwxgetSetting({

                        success (res) {

                            consolelog(resauthSetting);

                            if (resauthSetting["scopeuserInfo"]) {

                                consolelog("用户已授权");

                                windowwxgetUserInfo({

                                    success(res){

                                        consolelog(res);

                                        exportJsonuserInfo = resuserInfo;

                                        //此时可进行登录 *** 作

                                    }

                                });

                            }else {

                                consolelog("用户未授权");

                                let button = windowwxcreateUserInfoButton({

                                    type: 'text',

                                    text: '',

                                    style: {

                                        left: 0,

                                        top: 0,

                                        width: width,

                                        height: height,

                                        backgroundColor: '#00000000',//最后两位为透明度

                                        color: '#ffffff',

                                        fontSize: 20,

                                        textAlign: "center",

                                        lineHeight: height,

                                    }

                                });

                                buttononTap((res) => {

                                    if (resuserInfo) {

                                        consolelog("用户授权:", res);

                                        exportJsonuserInfo = resuserInfo;

                                        //此时可进行登录 *** 作

                                        buttondestroy();

                                    }else {

                                        consolelog("用户拒绝授权:", res);

                                    }

                                });

                            }

                        }

                    })

                }else{

                    consolelog('登录失败!' + reserrMsg)

                }

            },

        });

    },

先从客户端开始

因为pomelo本身并没有给出对cocos creator的支持,所以要自己写,创建如上图4个js文件

emitterjs

pomelo-clientjs

protobufjs

protocoljs

客户端初始化连接服务器

初次连接服务器

后续连接,init每次只需要换账户的时候调用

服务器相关

客户端初始化连接的是gate服,与之对应

初次与客户端连接

后续连接,客户端请求id可以直接从session获取

服务器推送,前面rpc调用的时候已经在game服的gameRemote里创建了channelService并把用户添加进去了

推送方法

CocosCreate可以使用引擎提供的系统事件脚本,来实现鼠标点哪去哪的功能。当使用鼠标点击对象时,游戏会检测并把点击点信息发送至相应的勾子函数,如onClick;onMouseDown、onMouseMemory等;在这些函数里可以读取到点击点的位

Cocos2d-x游戏引擎中的ScrollView在滑动时出现抖动的问题,可以尝试以下方法解决:

1 增加ScrollView的滑动阻尼或者回d效果,这样可以降低ScrollView的灵敏度,减少抖动的发生。可以通过设置ScrollView的"inertia"属性或者"bounceEnabled"属性来实现。

2 减少ScrollView中子节点的绘制量,这样可以减少渲染的负荷,提高ScrollView的性能。可以通过设置ScrollView的"decelerateable"属性或者"scissorRectDirty"属性来实现。

3 对于需要频繁更新的节点,可以将它们拆分成多个小的节点,分别添加到ScrollView中,这样可以避免单一节点过于复杂,导致出现抖动的情况。

4 禁用ScrollView的"scrollbarEnabled"属性,这样可以避免ScrollView中滚动条的显示,减少卡顿的情况。

如果以上方法无法解决问题,建议在Cocos2d-x社区论坛上寻求帮助,获取更详细的技术支持。

在Android环境中,可以使用 androidcontentClipboardManager 来复制和粘贴数据

在iOS环境中,可以使用 UIPasteboard 来复制和粘贴数据

在网上中复制粘贴是最麻烦的,要考虑到不同系统不同浏览器的情况,复制(设置剪切版)稍微还好一点,但是要获取剪切版的内容就太麻烦了,暂时还未找到兼容性很好的方法。

简介使用cocos creator2x版本制作的拼图游戏, 移动图块, 还原最终的样子

开始, 我们分析一下这个游戏的几个要点 1, 是如何将一张完整的分成33 55个小图, 并且这些小图要可以保存自己的位置信息, 等一些属性 2, 是如何表示小图合集的位置, 用什么数据结构保存, 且怎么让逻辑, 与数据逻辑对应 3, 是如何判断游戏结束 

上图是游戏的场景结构, 可以看到2x版本和1x版本有一些区别, 最突出的就是新增了一个默认的carmera结点 这个我会在别的帖子内仔细介绍, 这里不再多说 

首先我们解决第一个问题, 如何将一个大图切成一个个小图, 并让这个小图保存一些属性值, 我们先新建一个脚本, puzzlePiecets, 

const{ ccclass, property } = cc_decorator;

@ccclass

exportclassPieceextendsccComponent{

@property({

type: ccTexture2D

})

privatetexture: ccTexture2D =null;

publicoriCol: number;

publicoriRow: number;

publiccurCol: number;

publiccurRow: number;

publicisBlank:boolean;

publicgetisRight(){

returnthiscurCol ===thisoriCol &&thiscurRow ===thisoriRow;

}

publicinit(col: number, row: number, colNum: number, colWidth: number){

thisoriCol = col;

thisoriRow = row;

thiscurCol = col;

thiscurRow = row;

let sprite =thisnodeaddComponent(ccSprite);

// 升级20后setRect失效

// spritespriteFrame = new ccSpriteFrame(thistexture);

// let rect = spritespriteFramegetRect();

let rect = ccrect(0,0,thistexturewidth,thistextureheight);

let newRectWidth = rectwidth / colNum;

let newRectHeight = rectheight / colNum;

let newRectX = col newRectWidth;

let newRectY = (colNum - row -1) newRectHeight;

let newRect = ccrect(newRectX, newRectY, newRectWidth, newRectHeight);

// spritespriteFramesetRect(newRect);

spritespriteFrame =newccSpriteFrame(thistexture, newRect);

thisnodewidth = colWidth;

thisnodeheight = colWidth;

thisisBlank =thisoriCol === colNum -1&&thisoriRow ===0;

if(thisisBlank) {

thisnodeactive =false;

}

}

}

将小图看做一个类, 使用texture保存纹理,在通过new ccSpriteFrame(thistexture, newRect);获取某一个矩形区域内的纹理, 这样就可以把一张大图切成一张张小图, 并添加几个属性, 保存位置和其他的信息 

那么开始解决第二个问题, 我们可以采取二维数组的数据结构保存数据信息private pieceMap: Array; 讲一个个切好的小图保存在内, 然后随机移动(为了保证可以还原, 我采取的方法是将一个正确摆放好的小图数组, 按照游戏规定的移动方式随机移动1000次), 这样一定可以被还原

import{ Piece } from"/PuzzlePiece";

import{ PuzzleScene } from"/PuzzleScene";

const{ ccclass, property, executeInEditMode } = cc_decorator;

@ccclass

// @executeInEditMode

exportclassPuzzleBoardextendsccComponent{

@property(ccPrefab)

privatepiecePrefab: ccPrefab =null;

@property(ccInteger)

privatecolNum: number =5;

@property(ccInteger)

privatecolSpace: number =5;

privatecolWidth: number =0;

privatepieceMap: Array;

privateblankPiece: Piece =null;

privatepuzzleScene: PuzzleScene =null;

init(puzzleScene: PuzzleScene) {

thispuzzleScene = puzzleScene;

thisaddListeners();

}

publicreset(colNum: number){

thiscolNum = colNum;

thiscolWidth = (thisnodewidth -thiscolSpace (thiscolNum +1)) /thiscolNum;

thisnoderemoveAllChildren();

thispieceMap = [];

for(let x =0; x

thispieceMap[x] = [];

for(let y =0; y

let pieceNode = ccinstantiate(thispiecePrefab);

thisnodeaddChild(pieceNode);

pieceNodex = x (thiscolWidth +thiscolSpace) +thiscolSpace;

pieceNodey = y (thiscolWidth +thiscolSpace) +thiscolSpace;

thispieceMap[x][y] = pieceNodegetComponent(Piece);

thispieceMap[x][y]init(x, y,thiscolNum,thiscolWidth);

if(thispieceMap[x][y]isBlank) {

thisblankPiece =thispieceMap[x][y];

}

}

}

thisshuffle();

}

privateshuffle(){

for(let i =0; i <1000; i++) {

let nearPieces =thisgetNearPieces(thisblankPiece);

let n = Mathfloor(Mathrandom() nearPieceslength);

thisexchangeTwoPiece(thisblankPiece, nearPieces[n]);

}

}

privateonBoadTouch(event: ccEventEventTouch){

let worldPos = eventgetLocation();

let localPos =thisnodeconvertToNodeSpaceAR(worldPos);

let x = Mathfloor((localPosx -thiscolSpace) / (thiscolWidth +thiscolSpace));

let y = Mathfloor((localPosy -thiscolSpace) / (thiscolWidth +thiscolSpace));

thispuzzleSceneonBoardTouch(x, y);

}

publicmovePiece(x, y):boolean{

let piece =thispieceMap[x][y];

let nearPieces =thisgetNearPieces(piece);

for(let nearPiece of nearPieces) {

if(nearPieceisBlank) {

thisexchangeTwoPiece(piece, nearPiece);

returntrue;

}

}

returnfalse;

}

publicjudgeWin():boolean{

for(let x =0; x

for(let y =0; y

if(!thispieceMap[x][y]isRight) {

returnfalse;

}

}

}

thisblankPiecenodeactive =true;

returntrue;

}

privategetNearPieces(piece: Piece): Array {

let nearPieces = [];

if(piececurCol >0) {// left

nearPiecespush(thispieceMap[piececurCol -1][piececurRow]);

}

if(piececurCol

nearPiecespush(thispieceMap[piececurCol +1][piececurRow]);

}

if(piececurRow >0) {// bottom

nearPiecespush(thispieceMap[piececurCol][piececurRow -1]);

}

if(piececurRow

nearPiecespush(thispieceMap[piececurCol][piececurRow +1]);

}

returnnearPieces;

}

publicexchangeTwoPiece(piece1: Piece, piece2: Piece){

thispieceMap[piece2curCol][piece2curRow] = piece1;

thispieceMap[piece1curCol][piece1curRow] = piece2;

[piece1curCol, piece2curCol] = [piece2curCol, piece1curCol];

[piece1curRow, piece2curRow] = [piece2curRow, piece1curRow];

[piece1nodeposition, piece2nodeposition] = [piece2nodeposition, piece1nodeposition];

}

privateaddListeners(){

thisnodeon(ccNodeEventTypeTOUCH_END,thisonBoadTouch,this);

}

privateremoveListeners(){

}

}

解决第三个问题, 其实这个很简单, 因为我们已经在小图类中保存了小图本身的位置信息, 我们只需要,每次移动 都遍历一个二维数组判断其是否在正确的位置, 判断成功, 结束游戏  点击链接加入群聊cocos/unity交流群

声明 :发布此文是出于传递更多知识以供交流学习之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与我们联系,我们将及时更正、删除,谢谢

以上就是关于如何获取cocos studio2.2.1中定义的用户数据全部的内容,包括:如何获取cocos studio2.2.1中定义的用户数据、cocos creator 小游戏登录、pomelo服务器对接cocos creator客户端相关(面向纯小白)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9479450.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存