Lazuplis-Mei / pvzclass

pvzclass 是一个用于控制植物大战僵尸游戏内部运行实体的一套框架
234 stars 56 forks source link

绘制相关代码 #72

Closed Moon-404 closed 1 year ago

Moon-404 commented 1 year ago

代码可以运行了,但是表现上还有点问题,我是没有更好的实现方式了,需要更多技术支持

Violet-Nonbloosom commented 1 year ago

测试出来所谓“漏洞”的原因了。绘制代码没有问题,但是绘制事件的状况欠佳。 绘制事件高频触发,使得 PVZ 本体无法运行。 而如果尝试用 Sleep() 进行延时,虽然 PVZ 本体没事了,但绘制过程前功尽弃,这些代码就废了。 总之,我不同意合并这些代码,你可以接着改代码了。

Moon-404 commented 1 year ago

测试出来所谓“漏洞”的原因了。绘制代码没有问题,但是绘制事件的状况欠佳。 绘制事件高频触发,使得 PVZ 本体无法运行。 而如果尝试用 Sleep() 进行延时,虽然 PVZ 本体没事了,但绘制过程前功尽弃,这些代码就废了。 总之,我不同意合并这些代码,你可以接着改代码了。

我现在的思路是,在每一次刷新画面前中断,由pvzclass把所有需要输出的字保存到结构体中,由pvz主程序依次处理。 我最新的commit有这个实现方式的例子,但它还远没有完成,暂时不要合并,但我觉得你可以看一下效果。 使用方式是,将贴字.CT中的贴字(pvzclass)启用,然后启动我这个commit里面的pvzclass文件,效果是在关卡中显示植物的生命值。 问题在于58EB50这段被注释掉的代码会导致PVZ卡顿,但是不加上它又会使得无法调整字体大小,需要一些新的灵感。 在找到合适的解决方案后,我会移除无效的代码,并使其可以仅通过pvzclass实现。

image

Violet-Nonbloosom commented 1 year ago

我目前的测试情况也是这样。 我的话,可能会考虑写一个汇编脚本生成器吧。

Moon-404 commented 1 year ago

如果使用 6A72EC 这个 ImageFont,则可以默认不提供修改字体大小的功能,因为它的初始大小还是比较合适的。 另外,经测试,原来是 50FPS 的场景,在使用绘制字符串时帧数会大致减半,我不确定这是否足够高效。 还需要更多 ImageFont 常量地址的资料,以便测试出最适合用来绘制字的字体。另外,也许可以优化一下汇编码以提高效率。

Moon-404 commented 1 year ago

现在这个基本上就是终版了,手头上有点别的事,测试出的问题等我空下来再看看能不能解决。 可以先看一看,等我把问题解决再合并,万一有我没测出来的问题也说不定呢。