Skip to content

dev

赶工

Shopping NPC 的神奇实现

还记得我说的要实现纯 NPC 嘛

然后,然后

我们也穿了一个构造器

但是对于交易迟迟不知如何决定

本来计划的是用一个 Exchange 类传递

灵光一现

解包!!!

然后就有了

self.npcs.add(ShopNPC(self.width // 5, self.height // 5,
    name = "不坑爹的商人", 
    dialog = lambda npc, name : ShoppingBox(self.window, npc, name, Archive.player, items = {"Attack +1": "Coin -15", "Defence +1": "Coin -15",
      "HP +1": "Coin -15", "送你一程": "HP -5", "Exit": ""}, 
      actions =  [{"addAttack": 1, "addCoins": -15},
                  {"addDefence": 1, "addCoins": -15},
                  {"addHP": 1, "addCoins": -15},
                  {"addHP": -5, "addCoins": 0},
                  {"addCoins": 0}])))

更新属性由 **actions 完成

哈哈!

20240127

丝滑小动画

我们添加了一个 cursor 高亮框

毕竟做 UI ,还是更拿手一些(bushi

其实一开始想要用缓动函数的

但是发现,30 fps🤔

直接每次都移动 Δx,Δy 的一半算了!

我真是个天才!!!

20240126

NPC 分好类了

我们的NPC实现非常的诡异

由于我们想要实现纯 NPC,希望定义的时候就能够实现大部分功能

因此我们传递了一个构造器

比如:

self.npcs.add(DialogNPC(self.width // 3, self.height // 3, "和蔼的新手村导师",
    dialog = lambda skinPath, name : DialogBox(self.window, skinPath, name, [f"你好,{os.getlogin()},欢迎来到靶场","你将扮演一位名为「旅行者」的神秘角色,逐步发掘原神的真相"], Archive.talkType)))

因为我们不仅需要 NPC 本身的信息(名字,图片),还想要能够自定义说话内容,而且在定义的时候就决定了其功能

于是我们直接传入一个 lambda 表达式用来构造

非常诡异的做法

对不起

本人在此郑重宣布

由于淑芬考试即将来临

停止更新到1月16日

——唯一的Contributor

2024-01-04 开发手记

今天依然是完善 docstring 的一天

实现了生成地图函数从 MapsScene 的迁移

Maps 中的 generate_map 等函数现在已经被移动到 Scene

Bugfix: StartMenu 缩进错误

实现了 obstacle 等静态对象的相对位移

由于 camera 的存在,obstacle 的位置需要相对于 camera 的位置进行计算

我们新定义了一个 actualRectrect深复制,并且将 rect 位置进行相对位移(actualRect.x/y -= camera.x/y

于是 rect 不会因为失去准心而飞走,而且可以方便地调用精灵组的 draw 函数绘制 😄

NPC 的位移?

很不幸,在移植上述方法的时候,居然失效了 😢

具体表现为,NPC 不会自动移动,但是当 Player 走出内区使得 camera 在横轴移动一定(可能是巡逻范围)的时候,会左右抽搐,说明出发了回头

经测试,对于是否抽搐的 NPC 均可在正确位置触发交互


哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦!

原来是 rect 移动时候 actualRect 没有更新

看起来只需要更新 actualRect 就好了,rect 老逼登该入土了!

好了,已经 2:58 了,准时(bushi)睡觉