毕业设计

微信小程序

  1. 把项目托管到gitee,git push -u origin “master”报错。 解决办法:修改本地仓库的分支为master分支git push -u origin "master"
  2. 更改分支 git checkout “分支名”
  3. 新建自己的工程:
    1
    2
    3
    4
    5
    1. usb开发者调试
    2. 添加blockly除了demo以外的三个module
    3. 出现com.xxx.xxx, 回到Project模式,分别删除引入的三个module的build.gradle中的除了dependency和android标签以外的所有标签
    4. 由于只是引入了,还没有与三个module之间建立依赖,在project structure中的dependency中自己的blocklydemo中添加与vertical的连接
    5. 出现bug,在vertical和core中删除flavor和sourceSets标签

    安卓开发

    activity跳转

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // 1. login案例中使用了register作为从某一个activity返回该activity传回的值
    register = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
    @Override
    public void onActivityResult(ActivityResult result) {
    Intent intent = result.getData();
    if(intent!=null && result.getResultCode() == Activity.RESULT_OK){
    realPass=intent.getStringExtra("new_password");
    }
    }
    });
    // 2. register从该activity携带参数跳转到另一个activity
    Intent intent=new Intent(this,LoginForgetActivity.class);
    intent.putExtra("phone",phone);
    register.launch(intent);
    // 3. startActivity()
    Intent intent =new Intent(this,xxx.class);
    intent.setFlags(Intent.FLAG_xxxx); // 避免多次跳转到同一个页面 清除栈中的本页面的顶部的所有的activity
    startActivity(intent);
    //4. - activity中的 onResume重写可以实现重新打开该页面时(可以是重新启动该app,也可以是从某一个activity返回该activity)

    blockly

  • 在body中定义xml,category代表某一大类,block代表块
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <xml id="toolbox" style="display: none">
    <category name="Text">
    <block type="controls_if"></block>
    <block type="logic_compare"></block>
    <block type="controls_repeat_ext"></block>
    <block type="math_number"></block>
    <block type="math_arithmetic"></block>
    <block type="text"></block>
    <block type="text_print"></block>
    <block type="string_length"></block>
    <block type="my_text"></block>
    <block type="div_move"></block>
    </category>
    </xml>
  • 自定义代码块json格式(JavaScript也可以)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Blockly.Blocks['div_move'] = {
    init: function() {
    this.jsonInit({
    "message0": 'show_img',
    // "output": "Number",
    "colour": 160,
    "nextStatement":null,
    "tooltip": "Returns number of letters in the provided text.",
    "helpUrl": "http://www.w3schools.com/jsref/jsref_length_string.asp"
    });
    }
    };
  • 给自定义代码块添加函数,locations为自定义函数,点击事件
    1
    2
    3
    4
    5
    6
    Blockly.JavaScript['div_move'] = function(block) {
    // String or array length.
    // var str=block.getFieldValue('TEXT')

    return "this.locations()";
    };
  • 给执行按钮添加监听事件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function runCode(){
    window.LoopTrap = 1000;
    Blockly.JavaScript.INFINITE_LOOP_TRAP =
    'if (--window.LoopTrap == 0) throw "Infinite loop.";\n';
    var code = Blockly.JavaScript.workspaceToCode(demoWorkspace);
    Blockly.JavaScript.INFINITE_LOOP_TRAP = null;
    try{
    eval(code);
    }catch(e){
    alert(e);
    }
    }
  • 将xml注入div标签中
    1
    2
    3
    4
    var demoWorkspace = Blockly.inject('blocklyDiv',
    { media: '../../media/',
    toolbox: document.getElementById('toolbox')}
    );

    1.19日

  • python运行环境出错导致接下的环节进行不下去,重装系统

4.8日

  • node.js建立websocket服务器,socket.on(‘messageName’,(data)=>{logic}),其中第一个参数有message,close,第二个参数是传递的内容。若想从一端发送给另一端,用socket.emit(‘messageName’,{messageContent})

    服务器端的代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    //创建socket服务器
    let Ws = require("ws").Server;
    let wss = new Ws({
    port: 8282
    })
    wss.on("connection", function(ws) {
    console.log("Server has a new connection")
    //接收客户端接收的json数据
    ws.on("message", res => {
    //转成对象
    console.log(JSON.parse(res))
    //发送数据给客户端
    ws.send(JSON.stringify({
    data: "serverData"
    }));
    })
    ws.on("close", res => {
    console.log('Server is now closed');
    // ws.close();
    })
    ws.on('error', function(err) {
    console.log('Error occurred:', err.message);
    });
    })

微信小程序端的代码init.js

由于微信小程序只能同时存在一个websocket连接,所以这里只有在等待断开连接之后才能继续下一个连接
第一次建立连接用ws.onOpen(),之后想要继续发送数据用wx.onSocketMessage({data: JSON.stringify({})});

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// pages/init/init.js
let ws;
Page({
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
console.log('onLoad');
},
// 绑定按钮 <button bindtap="socketButtonClick1">发送数据</button>
socketButtonClick1: function () {
ws = wx.connectSocket({
url: 'ws://localhost:8282',
})
console.log('but1')
ws.onMessage(function (res) {
console.log("onMessage", res)
})
ws.onOpen(function () {
// 发送消息给服务器端
ws.send({
data: JSON.stringify({
data: "clientData",
})
});
})
// 断开连接的时间
setTimeout(() => {
ws.close()
}, 5000);
},
})

4.10日

学会查阅开发者文档,不要一个人揣摩函数的用途
开发者文档:nodejs端的socket.io文档以及微信小程序端的wx.connectSocket()函数

4.16日

每个玩家输入各自的操作码,服务端负责接受操作码,然后广播。客户端拥有每个用户的操作码,然后为各自的用户执行操作。(有先后性,无法判断谁先完成动作或者后完成动作).

5.24日

微信小程序的客户端和Javascript搭建的客户端的websocket发送json的区别

  • mini Programme
    1
    2
    3
    4
    5
    6
    7
    ws.send({
    // 外层data不能改变变量名
    data: JSON.stringify({
    name: inputName,
    roomId: inputRoomId
    })
    })
  • 普通的javascript
    1
    2
    3
    4
    5
    let data={
    name:ipt1,
    roomNo:ipt2
    }
    ws.send(JSON.stringify(data))