109-2024-06-22周总结

  1. iOS泰文问题
  2. jenkins windows节点git没有权限
  3. mongo entity framework core问题
  4. cocos spine computeWorldVertices问题

1. iOS泰文问题

老项目在做泰文多语言的时候发现iOS泰文没有任何显示,即使iOS切到泰文语言也一样,怀疑是没有泰文字体,找了个泰文字体放进去之后泰文显示出来了,但是还是有部分地方不显示。最终定位到原因是泰文字体比想象中的高,修改Text组件的VerticalOverflow为Overflow解决

2. jenkins windows节点git没有权限

比较奇怪相同的凭证linux节点可以,但是windows节点用不了,最后定位到是本地小乌龟记录的凭证冲突了,小乌龟设置里面把记录的git凭证清楚了就可以了

3. mongo entity framework core问题

上周说过要把统一后台干的事情下沉到各个游戏,这周把一个游戏替换成这样,主要就是账号,充值,事件,服务器列表这几块。

因为线上只有一台mongo,而我又比较希望后续能快速将代码改成支持mysql,所以首先想到的是mongo能否支持entity framework core。

搜了下还真有(链接),但是只能使用.net8,为了使用它我还特意把项目升级到.net8。

在使用过程中比较恶心的就是设置Primary Key问题,mongo默认将_id作为主key,所以就需要在Model结构里面默认填个结构

1
2
3
[BsonId]
[Key]
public ObjectId _id { get; set; }

这个结构必须加,最好直接拷贝过去,少了某个属性标签或者 get set都可能导致问题。

目前遇到的问题:

  1. 报错没有设置Key
  2. 报错_id不能转成对象key数据类型
  3. 多个类型执行mongodb的_id

4. cocos spine不同平台不一致问题

我们用了spine,同时需要用到spine播放过程中的顶点来实时设置包围盒位置,所以用到了相关函数

1
2
3
4
5
6
7
let attachment = sk.getAttachment('dragon_collider01', 'dragon_collider02') as sp.spine.VertexAttachment;
//获取hero的骨骼
let slot = sk.findSlot("dragon_collider01");
//获取hero的骨骼
//获取hurt的顶点数组
let arr = [];
attachment.computeWorldVertices(slot, 0, attachment.worldVerticesLength, arr, 0, 2)

但是computeWorldVertices在H5和小游戏平台下都好的,但是android下面会报错,找不到这个函数。

无奈只能自己网上找了一个这个实现方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private computeWorldVertices(slot, start, count, worldVertices, offset, stride) {
count = offset + (count >> 1) * stride;
let deformArray = slot.deform;
let vertices;
if (deformArray.length > 0)
vertices = deformArray;

if (!vertices)
return;

let bone = slot.bone;
let x = bone.worldX;
let y = bone.worldY;
let a = bone.a, b = bone.b, c = bone.c, d = bone.d;
for (let v_1 = start, w = offset; w < count; v_1 += 2, w += stride) {
let vx = vertices[v_1], vy = vertices[v_1 + 1];
worldVertices[w] = vx * a + vy * b + x;
worldVertices[w + 1] = vx * c + vy * d + y;
}
return;
};