第29届极短篇游戏制作比赛
登录
Project1
»
论坛
›
技术讨论
›
RPG Maker MZ 讨论区
›
需要在队伍类.加入角色()时显示对话文本,如何刷新脸图绘 ...
返回列表
发新帖
查看:
1524
|
回复:
2
[有事请教]
需要在队伍类.加入角色()时显示对话文本,如何刷新脸图绘制
[复制链接]
hsy_999999999
hsy_999999999
当前离线
赞
12
VIP
好人卡
积分
8
经验
最后登录
2023-12-10
在线时间
57 小时
写轮眼
梦石
0
星屑
779
在线时间
57 小时
注册时间
2019-10-9
回帖
117
发消息
发表于 2023-6-2 16:59:08
|
显示全部楼层
|
阅读模式
悬赏
200
星屑
已解决
本帖最后由 hsy_999999999 于 2023-6-2 22:22 编辑
我打算在 角色加入时 (代码判断) 展示一个对话框,上面写几句台词
虽然我明白在 数据类 里操作 窗口/画面类 是很不好的现像(例如操作 开关或变量 更快捷合理)
但我打算尝试一些有点难度的操作, 出现了一个bug: 当一次性加入多个角色(使用了编辑器--事件)时 多句"对话本文"正常刷新了, 他们的"名字"和"脸图"却没有刷新
代码大致是这样写的:
var hsyq22_addActor=Game_Party.prototype.addActor
// 增加角色(加入队员)
Game_Party.prototype.addActor = function(actorId) {
if ( !this._actors.includes(actorId) ) {
$gameMessage.setFaceImage(某某某);
$gameMessage.setSpeakerName(某某某);
$gameMessage.add( 某某某);
$gameMessage.newPage(); //文本刷新了 //名字和脸图没有刷新(只显示 最后一个 加入的队员)
SceneManager._scene._messageWindow.某某某() ; //尝试了多个方法,似乎都无效
}
hsyq22_addActor.call(this,actorId) //原
};
============================================================================================
==================问题解决了,具体做法是:
1-- $gameMessage.newPage(); 放 $gameMessage.add(某某某); 上面, 有个最后一次重复的bug
2--在方法外部设置 4个自定义堆栈标记的全局数组, 也可以用$gameTemp.某某某 属性
然后将 4个 $gameMessage.set某某某(某某某); 改成 堆栈到 4个自定义堆栈标记的全局数组 里
如:
hsyq22.mingzi_duizhan.push( hsyq22.jiaru["jiaru_"+actorId][1] );
3-- 发现$gameMessage.newPage()会调用Window_Message里的.newPage
在Window_Message.prototype.newPage = function(textState) { 里判断上面堆栈的标记
如:
if ( hsyq22.mingzi_duizhan && hsyq22.mingzi_duizhan[0] ){
//console.log( hsyq22.mingzi_duizhan )
//console.log( hsyq22.liantu_duizhan[0] )
//console.log( hsyq22.weizhi_duizhan )
//console.log( hsyq22.beijing_duizhan )
$gameMessage.setSpeakerName( hsyq22.mingzi_duizhan[0] ); hsyq22.mingzi_duizhan.shift();
}
4-- 解决了 名字和脸图不冒泡的问题 , 又发现窗口位置和透明度却依然无法冒泡,原因是缺少两个更新方法
this.updatePlacement(); //new // 更新放置位置(上/中/下[默认])
this.updateBackground(); //new // 更新背景(的透明度)
5-- 又发现 对话框 旁边的 小名称框 位置不会变化,以及绘制文字的x轴位置不对,再次增加两句代码
this._nameBoxWindow.start() //new // 开始 创建/更新 地图对话框 旁边的 小名称框 (的所有)
textState.startX=152; //new 手动增加一个脸图的间隔 (128+24)
===============================ok了
最佳答案
rfvtgbzxc
查看完整内容
$gameMessage.setFaceImage()和$gameMessage.setSpeakerName()不像$gameMessage.add()一样维护着自己的一个缓冲区,所以最新的操作会覆盖旧的操作,而不是像add()一样把调用过的行为都记录下来,并全部输出到屏幕上。 而实际要做到像事件那样弹三次对话窗口,表现也跟事件一样的话,需要有能维护一个缓冲区的能力,就像$gameTemp.requestAnimation一样,然后再考虑怎么把缓冲区的数据一个个读出来,交给场景去处理。 具体使用这些 ...
作者习惯写php(不再写mz以外的 其他rm版本).
论坛不常在,有事可以qq联系我 766336948.
回复
使用道具
举报
提升卡
沉默号角
喧嚣号角
变色卡
升龙剑
rfvtgbzxc
rfvtgbzxc
当前离线
赞
11
VIP
好人卡
积分
52
经验
最后登录
2026-4-19
在线时间
457 小时
写轮眼
梦石
0
星屑
5204
在线时间
457 小时
注册时间
2011-3-26
回帖
100
发消息
发表于 2023-6-2 16:59:09
|
显示全部楼层
$gameMessage.setFaceImage()和$gameMessage.setSpeakerName()不像$gameMessage.add()一样维护着自己的一个缓冲区,所以最新的操作会覆盖旧的操作,而不是像add()一样把调用过的行为都记录下来,并全部输出到屏幕上。
而实际要做到像事件那样弹三次对话窗口,表现也跟事件一样的话,需要有能维护一个缓冲区的能力,就像$gameTemp.requestAnimation一样,然后再考虑怎么把缓冲区的数据一个个读出来,交给场景去处理。
具体使用这些数据的细节涉及场景们各自的update函数,可能有现成的可复用功能,也可能自己写。标记待更,也作抛砖引玉。
点评
hsy_999999999
感谢大佬提供思路
发表于 2023-6-2 22:09
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册会员
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
浏览过的版块
RPG Maker XP 讨论区
Archiver
|
手机版
|
小黑屋
|
Project1游戏制作
Powered by
Discuz!
X5.0
© 2001-2026
Discuz! Team
.
在本版发帖
返回顶部
快速回复
返回顶部
返回列表