猫史档案馆


ui-排行榜显示beta 1.0

用户:WorldcodeWorldcode查看:0 回复:1 评论:0 创建时间:2024-04-05T13:18:54


具体代码:

Server:

let namesd = 'list_0' class list {     constructor(name) {         if (!name) {             this.name = namesd             namesd = 'list_' + (Math.ceil(namesd.slice(5)) + 1)         }         this.lists = {}         this.x = 0         this.y = 0         this.a = 200         this.b = 323         this.lists_b = 10         this.visible = true         this.backgroundcolor = [255 ,255 ,255]         this.backgroundopacity = 1         this.color = [0, 0, 255]         this.onTick()     }     onTick() {         world.onTick(() => {             this.upDate()         })     }     upDate() {         let list_arrange = []         list_arrange = Object.values(this.lists)         let list_show = []         let list_show_entity = []         let max = 0         while (list_arrange.length !== 0) {             max = list_arrange[0]             for (let i of list_arrange) {                 if (i > max) {                     max = i                 }             }             list_show.push(max)             for (let i of Object.keys(this.lists)) {                 if (this.lists[i] == max) {                     if (list_show_entity.length !== 0) {                         for (j of list_show_entity) {                             if (j[0] == i) {                                 break                             } else {                                 if (list_show_entity.indexOf(j) == list_show_entity.length - 1) {                                     list_show_entity.push([i, userKey_to_name[i], userKey_to_avatar[i]])                                     break                                 }                                 continue                             }                         }                     } else {                         list_show_entity.push([i, userKey_to_name[i], userKey_to_avatar[i]])                     }                 }             }             list_arrange.splice(list_arrange.indexOf(max), 1)         }         let show = []         for (let i of list_show_entity) {             show.push(i[1])         }         for (let entity of world.querySelectorAll('player')) {             remoteChannel.sendClientEvent([entity], [list_show, list_show_entity, this.name, [[this.x, this.y], [this.a, this.b]], this.lists_b, [this.color, this.visible, this.backgroundcolor, this.backgroundopacity]])         }
    } } const player_datas = storage.getDataStorage('players') async function player_data_upload(names, avatars) {     let player_name = await player_datas.get('name')     let player_avatar = await player_datas.get('avatar')     if (player_name) {         await player_datas.update('name', (preData) => { return names })     } else {         await player_datas.set('name', names)     }     if (player_avatar) {         await player_datas.update('avatar', (preData) => { return avatars })     } else {         await player_datas.set('avatar', avatars)     } } async function player_data_get() {     let returns = []     let player_Data_name = await player_datas.get('name')     let player_Data_avatar = await player_datas.get('avatar')     if (player_Data_name) {         returns.push(player_Data_name.value)     } else {         returns.push({})     }     if (player_Data_avatar) {         returns.push(player_Data_avatar.value)     } else {         returns.push({})     }     return returns }
let userKey_to_avatar = {} let userKey_to_name = {} async function load() {     userKey_to_name = (await player_data_get())[0]     userKey_to_avatar = (await player_data_get())[1] } load() world.onPlayerJoin(({ entity }) => {     userKey_to_name[entity.player.userKey] = entity.player.name     userKey_to_avatar[entity.player.userKey] = entity.player.avatar     player_data_upload(userKey_to_name, userKey_to_avatar) })   Client: remoteChannel.events.on('client', (arg) => {     if (!ui.findChildByName(arg[2])) {         let list = UiBox.create()         list.name = arg[2]         list.position.offset.x = arg[3][0][0]         list.position.offset.y = arg[3][0][1]         list.size.offset.x = arg[3][1][0]         list.size.offset.y = arg[3][1][1]         list.parent = ui     } else {         for (let i = arg[0].length - 1; i >= 0; i--) {             if (!ui.findChildByName(arg[2]).findChildByName(arg[1][i][0])) {                 let player = UiBox.create()                 player.name = arg[1][i][0]                 player.size.offset.x = 0                 player.size.offset.y = arg[4]                 player.backgroundColor.r = 0                 player.backgroundColor.g = 0                 player.backgroundColor.b = 0                 player.parent = ui.findChildByName(arg[2])                 let text_show = UiText.create()                 text_show.name = arg[1][i][0] + 'text'                 text_show.position.offset.y = -20 + arg[4] / 2 - 5                 text_show.textFontSize = 10                 text_show.position.offset.x = -arg[3][1][0] / 2 + text_show.textFontSize * text_show.textContent.length / 2                 text_show.parent = player                 let text_name_show = UiText.create()                 text_name_show.name = arg[1][i][0] + 'name_and_score'                 text_name_show.position.offset.y = -20 + arg[4] / 2 - 5                 text_name_show.textFontSize = 10                 text_name_show.textContent = `${arg[1][i][1]}:${arg[0][i]}`                 text_name_show.position.offset.x = 0                 text_name_show.parent = player             } else {                 ui.findChildByName(arg[2]).position.offset.x = arg[3][0][0]                 ui.findChildByName(arg[2]).position.offset.y = arg[3][0][1]                 ui.findChildByName(arg[2]).size.offset.x = arg[3][1][0]                 ui.findChildByName(arg[2]).size.offset.y = arg[3][1][1]                 //console.log(arg[5][1])                 ui.findChildByName(arg[2]).visible = arg[5][1]                 ui.findChildByName(arg[2]).backgroundColor.r = arg[5][2][0]                 ui.findChildByName(arg[2]).backgroundColor.g = arg[5][2][1]                 ui.findChildByName(arg[2]).backgroundColor.b = arg[5][2][2]                 ui.findChildByName(arg[2]).backgroundOpacity = arg[5][3]                 if (ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).position.offset.y < arg[3][1][1] || i * arg[4] < arg[3][1][1]) {                     ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).visable = false                     ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).findChildByName(arg[1][i][0] + 'text').visable = false                     ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).findChildByName(arg[1][i][0] + 'name_and_score').visable = false                     if (ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).position.offset.y !== i * arg[4]) {                         ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).position.offset.y += (i * arg[4] - ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).position.offset.y) / 10                     }                     if (ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).position.offset.y + arg[4] > arg[3][1][1]) {                         ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).size.offset.y = arg[3][1][1] - ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).position.offset.y                     } else {                         ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).size.offset.y = arg[4]                     }
                    if (ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).size.offset.x !== arg[0][i] / arg[0][0] * arg[3][1][0]) {                         if (arg[0][0] !== 0) {                             ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).size.offset.x += (arg[0][i] / (arg[0][0]) * arg[3][1][0] - ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).size.offset.x) / 10                         } else {                             ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).size.offset.x = 0                         }                     }                     if (ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).backgroundColor.r !== arg[5][0][0] * (i + 1) / arg[0].length) {                         ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).backgroundColor.r += (arg[5][0][0] * (i + 1) / arg[0].length - ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).backgroundColor.r) / 10                     }                     if (ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).backgroundColor.g !== arg[5][0][1] * (i + 1) / arg[0].length) {                         ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).backgroundColor.g += (arg[5][0][1] * (i + 1) / arg[0].length - ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).backgroundColor.g) / 10                     }                     if (ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).backgroundColor.b !== arg[5][0][2] * (i + 1) / arg[0].length) {                         ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).backgroundColor.b += (arg[5][0][2] * (i + 1) / arg[0].length - ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).backgroundColor.g) / 10                     }
                    let j = 0                     for (j = i; j >= 0; j--) {                         if (arg[0][j] !== arg[0][i]) {                             break                         }                     }                     ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).findChildByName(arg[1][i][0] + 'text').textContent = `第${j + 2}名:`                     ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).findChildByName(arg[1][i][0] + 'name_and_score').textContent = `${arg[1][i][1]}:${arg[0][i]}`                 } else {                     ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).visable = true                 }                 if (ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).position.offset.y + arg[4] / 2 - 2.5 > arg[3][1][1]) {                     ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).findChildByName(arg[1][i][0] + 'text').textContent = ''                     ui.findChildByName(arg[2]).findChildByName(arg[1][i][0]).findChildByName(arg[1][i][0] + 'name_and_score').textContent = ''                 }             }
        }     } })   调用方法: let/var/const 自定义 = list(“自定义名称()”(可不填,需保证不重名)) 自定义.lists = {}(数据字典(注意!!!需保证字典的键是玩家userKey,值是分数)) 自定义.name = '自定义名称'(需保证不重名) 自定义.x = 0'排行榜x坐标' 自定义.y = 0'排行榜y坐标' 自定义.a = 200'排行榜长度' 自定义.b = 323'排行榜宽度' 自定义.lists_b = 10'排行榜每一项的宽度' 自定义.color = [0, 0, 255]'排行榜第一项的颜色(向后依次递减)' 自定义.visible = true'排行榜是否显示(当前为显示)' 自定义.backgroundcolor = [255, 255 ,255]'排行榜背景颜色' 自定义.backgroundopacity = 1'排行榜背景透明度'   具体事例: world.onPress(({ entity, button }) => {     if (button == 'action0') {         entity.pressed += 1     } }) world.onPlayerJoin(({ entity }) => {     entity.pressed = 0 })
let list_s = {} const tests = new list() const test = world.onTick(() => {     for (let entity of world.querySelectorAll('player')) {         list_s[entity.player.userKey] = entity.pressed     }     tests.lists = list_s }) '将玩家的左键点击次数作为分数录入排行榜'     以上代码均为本人1人所做(肝喵了qwq) 如果有大佬想简化代码或者改进代码的话尽管去改(改好了可以跟我说一下我看看qwq) 如果有建议可以提出来(列如背景改成图片什么的) 目前版本为beta(测试版)我会尽量采取你们的建议qwq  


回复

上一页1 页 / 共 1下一页
追梦ez追梦ez

虽然没格式,但是沙发~

点赞0


评论