交互

BK.Text 文本

给一段文字设置样式:

  1. var style = {
  2. "fontSize":20,
  3. "textColor" : 0xFFFF0000,
  4. "maxWidth" : 200,
  5. "maxHeight": 400,
  6. "width":100,
  7. "height":200,
  8. "textAlign":0,
  9. "bold":1,
  10. "italic":1,
  11. "strokeColor":0xFF000000,
  12. "strokeSize":5,
  13. "shadowRadius":5,
  14. "shadowDx":10,
  15. "shadowDy":10,
  16. "shadowColor":0xFFFF0000
  17. }
  18. var txt = new BK.Text(style,"test");
  19. txt.content = "new test";

接口说明:BK.Text 文本

示例代码:script/demo/ui/text_demo.js

BK.Button 按钮

bricks 引擎中的 button 类继承自 BK.Sprite 。可以使用图片或者图集给按钮设置默认态图片、点击态图片以及禁止态图片,也可以通过回调实现一些复杂逻辑。

 1.1.3.3.交互  - 图1

添加按钮到某节点:

  1. //callbackFunc中的参数为BK.Button对象
  2. var btn = new BK.Button(100,50,'GameRes://texture/btn.png',function (btn) {
  3. BK.Script.log("button click!");
  4. });
  5. var superNode = new BK.Node();
  6. //其父节点都需要将canUserInteract置true
  7. superNode.canUserInteract = true;
  8. superNode.addChild(btn);

接口说明:BK.Button 按钮

示例代码:script/demo/ui/button_demo.js

BK.Editor 输入框

通过 BK.Editor 可以显示键盘、隐藏键盘以及设置默认输入:

  1. BK.Editor.ShowKeyBoard(onBtnClick, onTextChange); //显示键盘
  2. BK.Editor.hideKeyBoard(); //隐藏键盘
  3. BK.Editor.setText("默认输入"); //设置默认输入

 1.1.3.3.交互  - 图2

接口说明:BK.Editor 输入框

示例代码:script/demo/ui/editor_demo.js

BK.TouchEvent 触摸事件

简单触摸事件原理

用户点屏幕后,将引擎将生成触摸数据(支持多点触控),并存放到引擎的触摸数据缓存中,通过调用BK.TouchEvent.getTouchEvent()获取触摸数据,当调用BK.TouchEvent.updateTouchStatus()时清空触摸数据缓存,进入下一次的触摸事件中。大体流程如下图:

 1.1.3.3.交互  - 图3

因此,每当调用BK.TouchEvent.updateTouchStatus()后马上调用调用BK.TouchEvent.getTouchEvent()时,如果无新的用户点击将获取不到新的点击事件。同时也决定了js调用时,整个游戏中仅能有一处处理触摸事件的代码,若出现多次则会发生紊乱。

实例代码

  1. BK.Director.ticker.add(function(ts,du) {
  2. //获取触摸数据
  3. var touchArr = BK.TouchEvent.getTouchEvent();
  4. if(touchArr == undefined){
  5. return;
  6. }
  7. for(var i=0;i < touchArr.length;i++){
  8. var x = touchArr[i].x;
  9. var y = touchArr[i].y;
  10. var status = touchArr[i].status;
  11. var id = touchArr[i].id;
  12. BK.Script.log(0,0,"id:"+id+" status:"+status+" x:"+x+" y:"+y);
  13. }
  14. //清空触摸数据
  15. BK.TouchEvent.updateTouchStatus();
  16. });

复杂的触控事件原理

如需要对触控事件更细粒度的处理,上面说到简单的触控事件可能便无法满足。 通过设置BK.Script.getTouchModeAll = 1后便可以获取所有的点击历史记录。 第一维为每次点击的历史记录。第二唯为某次点击的事件。

  1. var moveCount = 0;
  2. BK.Script.getTouchModeAll = 1;
  3. BK.Director.ticker.add(function (ts,duration) {
  4. var touchArr = BK.TouchEvent.getAllTouchEvent();
  5. if (touchArr == undefined){
  6. return;
  7. }
  8. for(var i = 0; i < touchArr.length; i++) {
  9. for(var j = 0;j < touchArr[i].length; j++){
  10. if(touchArr[i][j].status == 2 ){
  11. }
  12. if(touchArr[i][j].status == 3 ){
  13. moveCount++;
  14. txt.content = moveCount;
  15. }
  16. if(touchArr[i][j].status == 1){
  17. }
  18. }
  19. }
  20. })

简单的点击、移动、抬起事件封装

引擎封装了简单的点击、移动、抬起事件。若需使用需预先引用script/core/ui/ui_event.js文件。

实例代码:

下例子为使用ui_event.js的监听函数,监听sp对象的点击,移动,抬起事件。

  1. BK.Script.loadlib('GameRes://script/core/ui/ui_event.js');
  2. //使用BK.Sprite对点击,移动,抬起事件进行监听
  3. function onBegin(node,evt,x,y) {
  4. //do something
  5. }
  6. function onMove(node,evt,x,y) {
  7. //do something
  8. }
  9. function onEnd(node,evt,x,y) {
  10. //do something
  11. }
  12. var backTex =new BK.Texture('GameRes://texture/star.png');
  13. var sp =new BK.Sprite(200,200,backTex,0,1,1,1);
  14. sp.position = {x:x,y:y};
  15. sp.canUserInteract = true;
  16. UIEventHandler.addNodeEvent(sp,UI_NODE_ENENT_TOUCH_BEGIN,onBegin);
  17. UIEventHandler.addNodeEvent(sp,UI_NODE_ENENT_TOUCH_MOVED,onMove);
  18. UIEventHandler.addNodeEvent(sp,UI_NODE_ENENT_TOUCH_END,onEnd);
  19. BK.Director.root.addChild(sp);

注意事项

ui_event.js中使用到的触摸事件粒度如果不满足开发者的需求,开发者可以模仿ui_event.js对于触摸事件的分发处理进行二次开发。但需要注意的是,单个游戏中处理触摸事件的地方仅能有一处,也就是一旦使用ui_event.js了,不可有第二处代码进行处理触摸事件。

接口说明:BK.TouchEvent 触摸事件

示例代码:script/demo/ui/touch_event_demo.js

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