今年前11月企业需求增长11%。
+11%
增长速度
2022年较2021年
2022-11:增长3300%
2022-10:增长2800%
2022-09:增长25%
2022-08:下降30%
cocos游戏开发工程师近两年招聘职位量/就业形势对比
查看近2年招聘趋势
cocos游戏开发工程师今年就业形势怎么样?好就业吗?数据统计依赖于各大平台发布的公开数据,系统稳定性会影响客观性,仅供参考。
#查看所在地区情况
近年企业需求趋势,2021较2020增长62%
+62%
增长速度
2021年较2020年
2020:增长23%
2019:下降34%
2018:增长156%
2017:增长259%
cocos游戏开发工程师历年就业情况
查看历年招聘趋势
cocos游戏开发工程师发展前景怎么样?就业难吗?曲线越向上代表市场需求量越大,就业情况相对较好。数据由各地招聘网站统计而来,仅检索职位名称。
哪个城市好找工作:北京,广州需求最高
招聘需求量地区排名:全国
北京 108,19.2%
广州 103,18.3%
深圳 96,17.1%
上海 68,12.1%
杭州 38,6.7%
成都 30,5.3%
武汉 30,5.3%
厦门 21,3.7%
南京 12,2.1%
天津 6,1.1%
福州 6,1.1%
长沙 6,1.1%
cocos游戏开发工程师去哪个城市工作好?cocos游戏开发工程师去北京工作好还是广州好?北京cocos游戏开发工程师招聘需求量最高,占19.2%,在全国中排名第1。其次是广州占18.3%,深圳占17.1%,上海占12.1%。统计依赖于各平台发布的公开数据,系统稳定性会影响客观性,仅供参考。
加班情况调查
经常加班:(
0
不用或偶尔:)
0
cocos游戏开发工程师经常加班吗?加班严重不?暂无反馈
工资待遇2022较2021下降21%
更多
-21%
增长速度
2022年较2021年
2021:增长21%
2020:增长18%
2019:下降5%
2018:增长17%
历年工资变化(月薪,单位¥)
查看历年工资变化
cocos游戏开发工程师今年工资怎么样?
哪个城市工资高:北京,上海
更多
工资待遇地区排名:全国
北京¥23.5K
上海
深圳
南京
杭州
福州
成都
广州
武汉
长沙
厦门
天津
cocos游戏开发工程师工资高吗?平面设计去哪个城市工资高?北京cocos游戏开发工程师工资最高,平均¥23.5K,其次是上海,深圳,南京,杭州,福州,成都,广州,武汉,长沙,厦门,天津
学历要求:本科最多
更多
本科 71.6%
大专 24.3%
不限学历 3.9%
cocos游戏开发工程师要求学历吗?本科占比最多达71.6%,其次是大专占24.3%,不限学历占3.9%
查看高学历人才需求
高学历人才需求
硕士 0.19%
cocos游戏开发工程师学历要求高吗?硕士占0.19%
经验要求:3-5年最多
更多
3-5年 33.6%
1-3年 26.5%
5-10年 9.9%
10年以上 0.71%
cocos游戏开发工程师经验要求高吗?cocos游戏开发工程师经验要求:3-5年占33.6%,1-3年占26.5%,5-10年占9.9%,10年以上占0.71%
零经验占比
不限经验 25.8%
应届毕业生 3.6%
没有经验可以做cocos游戏开发工程师吗?不限经验占25.8%,应届毕业生占3.6%
职业信心调查
嗯,有信心
0
准备转行
0
cocos游戏开发工程师行业现状?就业难吗?暂无反馈
推荐岗位
cocos开发工程师
游戏开发工程师
游戏客户端开发工程师
h5游戏开发工程师
cocos2dx开发工程师
游戏前端开发工程师
前端开发工程师
小游戏开发工程师
c++客户端开发工程师
客户端开发工程师
高级游戏开发工程师
展开更多
cocos游戏开发工程师与其他岗位就业前景PK
PK cocos开发工程师
PK游戏开发工程师
PK游戏客户端开发工程师
PK h5游戏开发工程师
PK cocos2dx开发工程师
PK游戏前端开发工程师
PK前端开发工程师
PK小游戏开发工程师
PK c++客户端开发工程师
PK客户端开发工程师
PK高级游戏开发工程师
展开更多
当前地区职位量比例变化
cocos游戏开发工程师就业形势分析图
*此图为cocos游戏开发工程师就业前景分析相对比例图,代表cocos游戏开发工程师职位占当前地区总职位量的比例变化,它通常能反应一个地区的产业变化。
个人比较推荐学Unity。
首先cocos它目前只支持2D游戏的制作,所有在可制作的游戏类型上有很大的局限性,而且版本更新也很慢,基本落后于游戏时代的发展。
而Unity是目前最主流的游戏制作引擎之一,开发难度相对其他平台,已经算是十分简单。自带资源下载平台,可以下载海量资源。网上也有很多教程和论坛,可以解答新手在开发过程中遇到的疑问和技术问题。而且支持2D、3D游戏类型的制作,然后也是一键打包,支持手机、网页、PC端平台的输出。对没什么经验的开发小白而言,的确算是最合适的。
简介使用cocos creator2.x版本制作的拼图游戏,移动图块,还原最终的样子
开始,我们分析一下这个游戏的几个要点 1,是如何将一张完整的图片分成3*3 5*5个小图,并且这些小图要可以保存自己的位置信息,等一些属性 2,是如何表示小图合集的位置,用什么数据结构保存,且怎么让图片逻辑,与数据逻辑对应 3,是如何判断游戏结束
上图是游戏的场景结构,可以看到2.x版本和1.x版本有一些区别,最突出的就是新增了一个默认的carmera结点这个我会在别的帖子内仔细介绍,这里不再多说
首先我们解决第一个问题,如何将一个大图切成一个个小图,并让这个小图保存一些属性值,我们先新建一个脚本, puzzlePiece.ts,
const{ ccclass, property}= cc._decorator;
@ccclass
exportclassPieceextendscc.Component{
@property({
type: cc.Texture2D
})
privatetexture: cc.Texture2D=null;
publicoriCol: number;
publicoriRow: number;
publiccurCol: number;
publiccurRow: number;
publicisBlank:boolean;
publicgetisRight(){
returnthis.curCol===this.oriCol&&this.curRow===this.oriRow;
}
publicinit(col: number, row: number, colNum: number, colWidth: number){
this.oriCol= col;
this.oriRow= row;
this.curCol= col;
this.curRow= row;
let sprite=this.node.addComponent(cc.Sprite);
//升级2.0后setRect失效
// sprite.spriteFrame= new cc.SpriteFrame(this.texture);
// let rect= sprite.spriteFrame.getRect();
let rect= cc.rect(0,0,this.texture.width,this.texture.height);
let newRectWidth= rect.width/ colNum;
let newRectHeight= rect.height/ colNum;
let newRectX= col* newRectWidth;
let newRectY=(colNum- row-1)* newRectHeight;
let newRect= cc.rect(newRectX, newRectY, newRectWidth, newRectHeight);
// sprite.spriteFrame.setRect(newRect);
sprite.spriteFrame=newcc.SpriteFrame(this.texture, newRect);
this.node.width= colWidth;
this.node.height= colWidth;
this.isBlank=this.oriCol=== colNum-1&&this.oriRow===0;
if(this.isBlank){
this.node.active=false;
}
}
}
将小图看做一个类,使用texture保存图片纹理,在通过new cc.SpriteFrame(this.texture, newRect);获取某一个矩形区域内的纹理,这样就可以把一张大图切成一张张小图,并添加几个属性,保存位置和其他的信息
那么开始解决第二个问题,我们可以采取二维数组的数据结构保存数据信息private pieceMap: Array;讲一个个切好的小图保存在内,然后随机移动(为了保证图片可以还原,我采取的方法是将一个正确摆放好的小图数组,按照游戏规定的移动方式随机移动1000次),这样图片一定可以被还原
import{ Piece} from"./PuzzlePiece";
import{ PuzzleScene} from"./PuzzleScene";
const{ ccclass, property, executeInEditMode}= cc._decorator;
@ccclass
//@executeInEditMode
exportclassPuzzleBoardextendscc.Component{
@property(cc.Prefab)
privatepiecePrefab: cc.Prefab=null;
@property(cc.Integer)
privatecolNum: number=5;
@property(cc.Integer)
privatecolSpace: number=5;
privatecolWidth: number=0;
privatepieceMap: Array;
privateblankPiece: Piece=null;
privatepuzzleScene: PuzzleScene=null;
init(puzzleScene: PuzzleScene){
this.puzzleScene= puzzleScene;
this.addListeners();
}
publicreset(colNum?: number){
this.colNum= colNum;
this.colWidth=(this.node.width-this.colSpace*(this.colNum+1))/this.colNum;
this.node.removeAllChildren();
this.pieceMap= [];
for(let x=0; x
this.pieceMap[x]= [];
for(let y=0; y
let pieceNode= cc.instantiate(this.piecePrefab);
this.node.addChild(pieceNode);
pieceNode.x= x*(this.colWidth+this.colSpace)+this.colSpace;
pieceNode.y= y*(this.colWidth+this.colSpace)+this.colSpace;
this.pieceMap[x][y]= pieceNode.getComponent(Piece);
this.pieceMap[x][y].init(x, y,this.colNum,this.colWidth);
if(this.pieceMap[x][y].isBlank){
this.blankPiece=this.pieceMap[x][y];
}
}
}
this.shuffle();
}
privateshuffle(){
for(let i=0; i<1000; i++){
let nearPieces=this.getNearPieces(this.blankPiece);
let n= Math.floor(Math.random()* nearPieces.length);
this.exchangeTwoPiece(this.blankPiece, nearPieces[n]);
}
}
privateonBoadTouch(event: cc.Event.EventTouch){
let worldPos= event.getLocation();
let localPos=this.node.convertToNodeSpaceAR(worldPos);
let x= Math.floor((localPos.x-this.colSpace)/(this.colWidth+this.colSpace));
let y= Math.floor((localPos.y-this.colSpace)/(this.colWidth+this.colSpace));
this.puzzleScene.onBoardTouch(x, y);
}
publicmovePiece(x, y):boolean{
let piece=this.pieceMap[x][y];
let nearPieces=this.getNearPieces(piece);
for(let nearPiece of nearPieces){
if(nearPiece.isBlank){
this.exchangeTwoPiece(piece, nearPiece);
returntrue;
}
}
returnfalse;
}
publicjudgeWin():boolean{
for(let x=0; x
for(let y=0; y
if(!this.pieceMap[x][y].isRight){
returnfalse;
}
}
}
this.blankPiece.node.active=true;
returntrue;
}
privategetNearPieces(piece: Piece): Array{
let nearPieces= [];
if(piece.curCol>0){// left
nearPieces.push(this.pieceMap[piece.curCol-1][piece.curRow]);
}
if(piece.curCol
nearPieces.push(this.pieceMap[piece.curCol+1][piece.curRow]);
}
if(piece.curRow>0){// bottom
nearPieces.push(this.pieceMap[piece.curCol][piece.curRow-1]);
}
if(piece.curRow
nearPieces.push(this.pieceMap[piece.curCol][piece.curRow+1]);
}
returnnearPieces;
}
publicexchangeTwoPiece(piece1: Piece, piece2: Piece){
this.pieceMap[piece2.curCol][piece2.curRow]= piece1;
this.pieceMap[piece1.curCol][piece1.curRow]= piece2;
[piece1.curCol, piece2.curCol]= [piece2.curCol, piece1.curCol];
[piece1.curRow, piece2.curRow]= [piece2.curRow, piece1.curRow];
[piece1.node.position, piece2.node.position]= [piece2.node.position, piece1.node.position];
}
privateaddListeners(){
this.node.on(cc.Node.EventType.TOUCH_END,this.onBoadTouch,this);
}
privateremoveListeners(){
}
}
解决第三个问题,其实这个很简单,因为我们已经在小图类中保存了小图本身的位置信息,我们只需要,每次移动图片都遍历一个二维数组判断其是否在正确的位置,判断成功,结束游戏 点击链接加入群聊【cocos/unity交流群】
声明:发布此文是出于传递更多知识以供交流学习之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与我们联系,我们将及时更正、删除,谢谢
上一篇:cocos+游戏排行榜
下一篇:coc策略游戏排行榜