原生渲染

BK.Node 节点

添加节点到root:

  1. var node = new BK.Node();
  2. node.id = 1;
  3. node.name = "test";
  4. node.position = {x:100,y:100};
  5. node.scale = {x:1.5,y:1.5};
  6. node.rotation = {x:0,y:0,z:0};
  7. node.hidden = false;
  8. node.vertexColor = {r:1,g:1,b:1,a:1};
  9. node.canUserInteract = true;
  10. node.zOrder = 1;
  11. BK.Director.root.addChild(node);

接口说明:BK.Node 节点

示例代码:script/demo/render/node_demo.js

BK.Sprite 精灵

Sprite 是游戏中常见的显示图像的方式,多用于游戏中的人物和可移动物品:

  1. var tex = new BK.Texture('GameRes://texture/test.png');
  2. var sp = new BK.Sprite(200,200,tex,0,1,1,1);
  3. sp.size = {width:200,height:200}; //大小
  4. sp.anchor = {x:0.5,y:0.5}; //锚点
  5. sp.cornerRadius = 50; //圆角

接口说明:BK.Sprite 精灵

示例代码:script/demo/render/sprite_demo.js

BK.Texture 纹理

Texture 是游戏中的纹理贴图,可以为图层(如背景)甚至 Sprite 设置纹理:

  1. var tex = new BK.Texture('GameRes://texture/plane_blue.png');
  2. var size = tex.size; //纹理的实际像素宽高
  3. var width = size.width;
  4. var height = size.height;

接口说明:BK.Texture 纹理

示例代码:script/demo/render/texture_demo.js

BK.Mesh 网格

Mesh 通过自定义顶点数组,映射到纹理中的不同位置中,可以做成非常灵活的多边形等。

我们可以通过 Mesh 让下面这张草地图来生成山坡状的网格:

 1.1.3.2.渲染  - 图1

 1.1.3.2.渲染  - 图2

  1. //生成如山坡状的网格
  2. BK.Script.loadlib('GameRes://script/demo/tinyfly/terrain.js');
  3. var controlPoints = [
  4. {"x":0,"y":100,"isup":true},
  5. {"x":20,"y":300,"isup":false},
  6. {"x":20,"y":200,"isup":false},
  7. {"x":20,"y":300,"isup":true},
  8. {"x":20,"y":200,"isup":false},
  9. {"x":20,"y":200,"isup":true},
  10. {"x":20,"y":100,"isup":false}
  11. ];
  12. var tex =new BK.Texture('GameRes://resource/texture/terrain.png');
  13. var terr =new terrain(10,controlPoints);
  14. terr.processData();
  15. var vertexes = terr.vertexes;
  16. var indices = terr.indics;
  17. var moutainMesh = new BK.Mesh(tex,vertexes,indices);
  18. BK.Director.root.addChild(moutainMesh);
  19. var scale = BK.Director.screenPixelSize.width / 640;
  20. BK.Director.root.scale = {x:scale,y:scale};

接口说明:BK.Mesh 网格

示例代码:script/demo/render/mesh_demo.js

BK.SkeletonAnimation 骨骼动画

基于 spine 的骨骼动画。

 1.1.3.2.渲染  - 图3

接口说明:BK.SkeletonAnimation 骨骼动画

示例代码:script/demo/spine/skeletonAnimation_demo.js

BK.AnimatedSprite 帧动画

帧动画的每一帧都是角色特定姿势的一个快照,动画的流畅性和平滑效果都取决于帧数的多少。

 1.1.3.2.渲染  - 图4

接口说明:BK.AnimatedSprite 帧动画

示例代码:script/demo/render/animatedSprite_demo.js

BK.SpriteSheetCache 图集

可以使用 SpriteSheetCache 图集生成精灵或者九宫图:

  1. BK.Script.loadlib('GameRes://script/core/render/SpriteSheetCache.js');
  2. BK.Script.loadlib('GameRes://script/core/render/Sprite9.js');
  3. //加载图集
  4. var texPath = "GameRes://resource/texture/spritesheet/test.png";
  5. var jsonPath = "GameRes://resource/texture/spritesheet/test.json";
  6. //生成图集缓存对象
  7. var sheetCache = new SpriteSheetCache();
  8. sheetCache.loadSheet(jsonPath,texPath);
  9. //1.通过图集生成精灵
  10. var sp = sheetCache.createSheetSprite("icon.png",200,200);
  11. if(sp){
  12. BK.Director.root.addChild(sp);
  13. }
  14. //2.通过图集生成九宫图
  15. var texture = sheetCache.getTextureByFilename("green_btn.png");
  16. var frameInfo = sheetCache.getFrameInfoByFilename("green_btn.png");
  17. if (frameInfo && texture) {
  18. var sprite9 = new Sprite9(frameInfo.frame.w,frameInfo.frame.h,texture,{top:32,bottom:32,left:64,right:64},{x:frameInfo.frame.x,y:frameInfo.frame.y},true);
  19. BK.Director.root.addChild(sprite9);
  20. sprite9.size = {width:300,height:150};
  21. sprite9.position = {x:200,y:200};
  22. }

接口说明:BK.SpriteSheetCache 图集

示例代码:script/demo/render/spriteSheetCache_demo.js

BK.ClipMask 蒙版

  1. var sp = new BK.Sprite(200, 200, tex, 0, 1, 1, 1);
  2. sp.name = "sp";
  3. sp.anchor = {x: 0.5, y : 0.5};
  4. sp.position = {x: 350, y : 600, z: 0};
  5. sp.mask = new BK.ClipMask(stencilSp2, false, 0.0);
  6. sp.mask = new BK.ClipMask(tempSP, false, 0.0);
  7. sp.mask.inverted = false;
  8. sp.mask.alphaThreshold = 0.0;

接口说明:BK.ClipMask 蒙版

示例代码:script/demo/render/clip_node_demo.js

BK.ClipNode 蒙版节点

ClipNode 是利用模板遮罩来完成对 Node 区域裁剪的方法。

 1.1.3.2.渲染  - 图5

使用:

  • 新增一个模板纹理
  • 通过模板纹理创建蒙版节点
  • 加入一个叠加精灵
  • 设置叠加参数
  1. //对应图例1
  2. var wid = BK.Director.screenPixelSize.width
  3. var stencilTex = new BK.Texture("GameRes://texture/mask/mask1.png");
  4. var stencilSp = new BK.Sprite(wid, wid, stencilTex, 0, 1, 1, 1);
  5. var clipNode =new BK.ClipNode(stencilSp);
  6. var tex = new BK.Texture("GameRes://texture/icon.png");
  7. var sp =new BK.Sprite(wid,wid,tex,0,1,1,1);
  8. BK.Director.root.addChild(clipNode);
  9. clipNode.addChild(sp);
  10. clipNode.inverted = true;
  11. clipNode.alphaThreshold = 0.5;
  12. //对应图例2
  13. var wid = BK.Director.screenPixelSize.width
  14. var stencilTex = new BK.Texture("GameRes://texture/mask/mask1.png");
  15. var stencilSp = new BK.Sprite(wid, wid, stencilTex, 0, 1, 1, 1);
  16. var clipNode =new BK.ClipNode(stencilSp);
  17. var tex = new BK.Texture("GameRes://texture/icon.png");
  18. var sp =new BK.Sprite(wid,wid,tex,0,1,1,1);
  19. BK.Director.root.addChild(clipNode);
  20. clipNode.addChild(sp);
  21. clipNode.inverted = false;
  22. clipNode.alphaThreshold = 0.5;

接口说明:BK.ClipNode 蒙版节点

示例代码:script/demo/render/clip_node_demo.js

BK.ClipRectNode 裁剪节点

ClipRectNode 是对指定x、y坐标、高、宽的区域进行裁剪的方法。

 1.1.3.2.渲染  - 图6

使用:

  • 创建BK.ClipRectNode
  • 创建BK.Sprite并加入到 BK.ClipRectNode中,作为子节点
  • 设置裁剪参数(也可以在创建BK.ClipRectNode时指定)
    1. var clipNode = new BK.ClipRectNode( 125, 125, 125, 125);
    2. clipNode.position = {x: 125, y: 125, z: 0};
    3. BK.Director.root.addChild(clipNode);
    4. var tex = new BK.Texture("GameRes://texture/icon.png");
    5. var sp =new BK.Sprite(250,250,tex,0,1,1,1);
    6. clipNode.addChild(sp);

接口说明:BK.ClipRectNode 裁剪节点

示例代码:script/demo/render/clip_rect_node_demo.js

canvas

canvas 是一个可以使用脚本来绘制图形的画布,可以用于绘制图表、制作图片构图或者制作动画。

示例代码:script/demo/render/canvas_demo.js

webgl

WebGL 用于呈现交互式3D和2D图形。

示例代码:script/demo/render/webgl_texture_demo.js

原文: https://hudong.qq.com/docs/engine/engine/native/func/funcs/render.html