猫史档案馆


【API系列教程】教你捡垃圾发家致富!知识量巨大,慎入……(下篇)

用户:神岛吉吉喵神岛吉吉喵查看:59 回复:44 评论:59 创建时间:2020-12-20T12:53:38


center_image

在上一篇api教程中

教会了大家如何建造小卖部并查找实体

本期的知识点是用对话框和按钮与实体互动

并实现和NPC的金币交易~

emotion_编程猫_点赞

本期教程涉及API:

1.world.onPlayerJoin (例如让玩家加入时没有任何东西)

2.player.onPress 按下按钮触发事件(例如点击右键弹出对话框)

center_image

3.entity.destroy 让实体消失(捡垃圾)

center_image

4.player.directMessage,让世界对玩家发送私人消息

center_image

5.player.dialog,对玩家显示对话框

center_image

首先是捡垃圾——收集地图中的瓶盖和空瓶垃圾

↓↓具体方法戳视频↓↓

https://www.bilibili.com/video/BV1xt4y1k7nk

捡完垃圾后,就可以和npc进行交易

并且用赚到的钱买零食吃啦~

https://www.bilibili.com/video/BV1ma4y1H7iX

本期教程用到的代码

1、捡垃圾

//封装成函数是因为它会被多次用到(显示玩家状态, 显示与NPC交互结果)
function textDialog(entity, content, title) {
    return entity.player.dialog({ //弹出对话框
        type: Box3DialogType.TEXT, //对话框类型为纯文本
        content, //文本内容
        title, //对话框左上角标题内容
    })
}

world.onPlayerJoin(({ entity }) => { //玩家进入游戏时在这里初始化玩家的资产
    entity.junk = 0 //废品
    entity.money = 0 //钱
    entity.itemList = [] //口袋里的货品

    entity.player.onPress(({ button }) => { //每当有按钮被按下
        if (button == Box3ButtonType.ACTION1) { //如果按钮是右键
            textDialog(entity, `你身上有:\n\n${entity.money}元, ${entity.junk}个废品\n道具: [${entity.itemList}]`)
        }
    })
})

2、与npc交互

//NPC是non-player character的简称, 表示游戏里无人控制的虚构人物
for (const npc of world.querySelectorAll('.NPC')) {
    npc.enableInteract = true //允许当前npc实体触发交互
    npc.interactRadius = 4.5 //交互范围
    npc.interactHint = npc.id //交互提示文本显示实体名字
    npc.interactColor.set(0, 1, 0) //交互提示文本颜色为绿色

    if (npc.id == '学生') { //如果实体名是'学生'
        npc.onInteract(async ({ entity }) => { //当玩家对这个npc按E触发交互, npc对玩家打招呼
            textDialog(entity, `${entity.player.name}, 你好呀~`, npc.id)
        })
    }
}

3、将垃圾卖给回收员工

if (amount > 0 && amount <= entity.junk) { //如果持有的废品数符合输入的数值
                entity.junk -= amount //交出废品
                const gain = amount * 2 //废品换算成钱
                entity.money += gain //钱入账到玩家
                textDialog(entity, `${amount}废品卖得${gain}元`)
            }

4、向小卖部大叔买零食

else if (npc.id == '小卖部老板') { //如果实体名是'小卖部老板'
        npc.onInteract(async ({ entity }) => { //当玩家对这个npc按E触发交互, npc问你想买哪些商品
            const goodsList = ['薯片', '可乐', '糖果'] //货品列表
            const priceList = [7, 5, 4] //价格列表
            const selection = await entity.player.dialog({
                type: Box3DialogType.SELECT, //对话框类型为选择框
                content: `你有${entity.money}元, 想买点什么呢?`,
                title: npc.id, //对话框左上角显示NPC名字
                options: ['薯片 (7元)', '可乐 (5元)', '糖果 (4元)'], //选项
            })
        })
    }

5、吃掉零食!

else if (button == Box3ButtonType.ACTION0) { //如果按钮是左键
            const eaten = entity.itemList.pop() //口袋列表最右边的一个物品拿出来
            if (eaten) {
                entity.player.directMessage(`${entity.player.name}吃掉了"${eaten}"`)
            }
        }

这两节课知识量巨大

大家记得回去练习哦~

emotion_编程猫_加油

本期互动作业:

1、让老板出售一个价格10元的热狗,该怎样修改代码呢?

2、代码处只写了当输入的数值合理的情况

如果玩家输入了一个很离谱的值

让地图弹出一个提醒

这个该怎么实现?

3、修改代码,让小女孩从原来的问好

变成我们请她吃东西

她吃掉我们的零食会说:“谢谢喵,某某”

记得把你的回答写在评论区哦

我们下期再见啦~

emotion_编程猫_晚安

- 相关API文档:https://docs.box3.codemao.cn/

加入代码岛3.0官方内测Q喵

官网:box3.codemao.cn

(づ。◕‿‿◕。)づ


回复

上一页1 页 / 共 2下一页
阳光的流熔怪Uyt5阳光的流熔怪Uyt5

沙发

点赞0


评论


SKQASKQA

沙发!!!!

点赞0


评论


传闻中的五音璃音传闻中的五音璃音

地板

点赞0


评论


小小爱html小小爱html

天花板

点赞0


评论


async_functionasync_function

板凳

点赞0


评论


ZNS_RemytowerJimmyZNS_RemytowerJimmy

emmm

点赞0


评论


柚子味儿的糖柚子味儿的糖

az

 

点赞0


评论


86135clc86135clc

地下一层

点赞0


评论


MA辰MA辰

前排

点赞0


评论


追梦喵aowC追梦喵aowC

地下二层~~

点赞0


评论


冬a_夜星源晨冬a_夜星源晨

地下3层~~

点赞0


评论


望_庐山望_庐山

地下4层~

点赞0


评论


Architect_煎饼Architect_煎饼

地下五层

点赞0


评论


武功君武功君

地下六层

点赞0


评论


­­­­­­­­­­­­­­

啊这!!!!!

点赞0


评论


锦茸残叶锦茸残叶

地下七层~

点赞0


评论


Chengxuyee_已退Chengxuyee_已退

还能这样?我直接world.onPress

点赞1


评论


YKS羊驼君YKS羊驼君

地下八层

点赞0


评论


KiahKiah

辐射4既视感emotion_doge

点赞0


评论


帅狮_帅狮_

qp

点赞0


评论


ZNS_哪吒ZNS_哪吒

前排

点赞0


评论


未命名用户015734未命名用户015734

建议改成:如何成为百万富翁

(啊不)

点赞0


评论


柒小枫柒小枫

地下九层~az

点赞0


评论


指令者指令者

dd

点赞0


评论


不知道该叫啥的一只萌新不知道该叫啥的一只萌新

dd

点赞0


评论


凌_墨水凌_墨水

前排坐坐

点赞0


评论


离谱的正经人离谱的正经人

帮忙做一下https://box3.codemao.cn/e/2cf4a48b3822df6e812f

点赞0


评论


SSR级学霸_拉文克劳SSR级学霸_拉文克劳

哇,那我们可以用钱买废品了!

点赞0


评论


lon江航lon江航

emotion_编程猫_点赞

点赞0


评论


学霸8号学霸8号

帮我看看这段代码有啥问题

for (const e of world.querySelectorAll('.瓶盖垃圾,.空瓶垃圾')){ //搜索每一个废品实体
    e.enableInteract = true //开启交互
    e.interactRadius = 2.5 //交互范围
    e.interactHint = e.tags() //交互提示文本显示标签名
    e.interactColor.set(0, 1, 0) //交互提示文本为绿色

点赞0


评论