- 注册时间
- 2020-7-24
- 最后登录
- 2024-12-8
游戏开发者
- 积分
- 48
|

楼主 |
发表于 2020-8-20 21:51:02
|
显示全部楼层
替换之后 还是无法显示按钮 以防万一贴一下
//
// YesNoDialog の改変
// レイヤダイアログで処理可能にする
//
/**
* ウインドウ版
* ムービー再生中などはこちらを利用
*/
/*
添加方法:
1、在必然被加载的脚本内任意地方添加一行KAGLoadScript("MyYesNoDialog.tjs");
2、根据MainWindow.tjs里的各种询问对话,改写本插件内的字典yesnoMap的询问对话,用于对应图片
3、改造版本的效果:会将询问对话直接描绘在背景层上。当视频播放时,背景层不会透明这点请注意
*/
class MyYesNoDialogWindow extends Window
{
var yesButton; // [はい] ボタン
var noButton; // [いいえ] ボタン
var tempLayer; // テンポラリレイヤ
var result = false; // no:false yes:true
property temporaryLayer
{
// ワークエリアとして一時的に使用できるレイヤを返す
getter()
{
if(tempLayer === void)
{
tempLayer = new KAGLayer(this, primaryLayer);
tempLayer.name = "一時ワークレイヤ";
}
return tempLayer;
}
}
var baseStorage;
var message;
function MyYesNoDialogWindow(baseStorage,message="")
{
super.Window();
//非常规情况,独立底图
/*
if (message=="")
{
this.baseStorage = baseStorage;
this.message="";
}
//其他情况,显示默认底图
else
{
this.baseStorage = "Sample_ASKPANEL"; //改造过的,直接显示空白底图
this.message=message;
}
*/
// メインウィンドウから cursor**** の情報をとってくる
if(global.Window.mainWindow !== null &&
typeof global.Window.mainWindow.cursorDefault != "undefined")
this.cursorDefault = global.Window.mainWindow.cursorDefault;
if(global.Window.mainWindow !== null &&
typeof global.Window.mainWindow.cursorPointed != "undefined")
this.cursorPointed = global.Window.mainWindow.cursorPointed;
// 外見の調整
borderStyle = bsNone;
innerSunken = false;
showScrollBars = false;
// プライマリレイヤの作成
add(new Layer(this, null));
// プライマリのマウスカーソルを設定
if(typeof this.cursorDefault !== "undefined")
primaryLayer.cursor = cursorDefault;
// 拡大率の設定
if (kag.fullScreen) {
if (kag.innerWidth / kag.scWidth < kag.innerHeight / kag.scHeight)
setZoom(kag.innerWidth, kag.scWidth);
else
setZoom(kag.innerHeight, kag.scHeight);
} else {
setZoom(kag.zoomNumer, kag.zoomDenom);
}
primaryLayer.loadImages(baseStorage);
primaryLayer.setSizeToImageSize();
setInnerSize(primaryLayer.width * zoomNumer / zoomDenom,
primaryLayer.height * zoomNumer / zoomDenom);
setMaskRegion();
// ウィンドウ位置の調整
if(global.Window.mainWindow !== null && global.Window.mainWindow isvalid)
{
var win = global.Window.mainWindow;
var l, t;
l = ((win.width - width)>>1) + win.left;
t = ((win.height - height)>>1) + win.top;
if(l < 0) l = 0;
if(t < 0) t = 0;
if(l + width > System.screenWidth) l = System.screenWidth - width;
if(t + height > System.screenHeight) t = System.screenHeight - height;
setPos(l, t);
}
else
{
setPos((System.screenWidth - width)>>1, (System.screenHeight - height)>>1);
}
var ynset=Scripts.evalStorage("uiyesno.tjs");
// Yesボタン
add(yesButton = new ButtonLayer(this, primaryLayer));
yesButton.loadButtons(ynset.btnyes.normal, ynset.btnyes.over, ynset.btnyes.on);
yesButton.top = ynset.btnyes.y;
yesButton.left = ynset.btnyes.x;
yesButton.visible = true;
// Noボタン
add(noButton = new ButtonLayer(this, primaryLayer));
noButton.loadButtons(ynset.btnno.normal, ynset.btnno.over, ynset.btnno.on);
noButton.top = ynset.btnno.y;
noButton.left = ynset.btnno.x;
noButton.visible = true;
//--------------------------------------------------------
//自定义文字样式
primaryLayer.font.face=kag.scflags.chDefaultFace;
primaryLayer.font.height=ynset.msg.textsize;
primaryLayer.font.bold=ynset.msg.bold;
primaryLayer.font.italic=ynset.msg.italic;
var color=ynset.msg.color;
var edge=ynset.msg.edge;
var shad=ynset.msg.shadow;
var edgec=ynset.msg.edgecolor;
var shadc=ynset.msg.shadowcolor;
//预渲染文字
if (ynset.msg.face!=void)
{
primaryLayer.font.face=ynset.msg.face;
//预渲染字体加这行
//primaryLayer.font.mapPrerenderedFont("Font_s.tft");
}
// 取得单行文字长、宽
var tw = primaryLayer.font.getTextWidth(message);
var th = primaryLayer.font.getTextHeight(message);
//读取换行符\n效果
var max_tw = 0;
var sum_th = 0;
var messages = message.split('\n');
for (var i=0; i < messages.count; i++)
{
var lw = primaryLayer.font.getTextWidth(messages);
var lh = primaryLayer.font.getTextHeight(messages);
if (lw > max_tw)
max_tw = tw;
sum_th += lh + 0;
}
tw = max_tw;
th = sum_th;
var w =primaryLayer.width;
var h = primaryLayer.height;
//设定位置
var msgpos_x = ynset.msg.centerleft-tw/2;
var msgpos_y = ynset.msg.centertop-th/2;
// message文字的描绘
for (var i=0; i < messages.count; i++)
{
var lw = primaryLayer.font.getTextWidth(messages);
var lh = primaryLayer.font.getTextHeight(messages);
msgpos_x = ynset.msg.centerleft-lw/2;
//根据样式描绘文字
if (edge) {primaryLayer.drawText(msgpos_x, msgpos_y, messages, color, 255, true, 255, edgec, 1, 0, 0);}
else if (shad) {primaryLayer.drawText(msgpos_x, msgpos_y, messages, color, 255, true, 255, shadc, 0, 2, 2);}
else {primaryLayer.drawText(msgpos_x, msgpos_y, messages, color, 255, true);}
msgpos_y += lh + 3; // 调整行间距
}
//--------------------------------------------------------
}
function finalize()
{
invalidate tempLayer if tempLayer !== void;
super.finalize(...);
}
function action(ev)
{
// action
if(ev.type == "onClick")
{
if(ev.target == yesButton)
{
result = true;
close();
}
else if(ev.target == noButton)
{
result = false;
close();
}
}
else if(ev.type == "onKeyDown" && ev.target === this)
{
// パッド入力に対応する処理
switch(ev.key)
{
case VK_PADLEFT:
yesButton.focus();
break;
case VK_PADRIGHT:
noButton.focus();
break;
case VK_PAD1:
if(focusedLayer == yesButton)
{
result = true;
close();
}
else if(focusedLayer == noButton)
{
result = false;
close();
}
break;
case VK_PAD2:
result = false;
close();
break;
}
}
}
function onKeyDown(key, shift)
{
super.onKeyDown(...);
if(key == VK_ESCAPE)
{
// ESC キーが押された
// 「いいえ」として処理
result = false;
close();
}
}
function onMouseDown(x, y, button)
{
if(button == mbRight) {
result = false;
close();
}
}
}
/**
* ダイアログ版
*/
class MyYesNoDialogLayer extends DialogLayer
{
var baseStorage;
var result = false;
var yesFunc;
var noFunc;
var param;
var doneFunc;
function MyYesNoDialogLayer(baseStorage, yesFunc, noFunc, param, doneFunc, message)
{
super.DialogLayer(kag, kag.primaryLayer, baseStorage + "ダイアログ");
var ynset=Scripts.evalStorage("uiyesno.tjs");
this.yesFunc = yesFunc;
this.noFunc = noFunc;
this.param = param;
this.doneFunc = doneFunc;
this.baseStorage = ynset.bgd.frame;
setOption(%[frame : baseStorage]);
addButton(%[ x : ynset.btnyes.x, y : ynset.btnyes.y, normal:ynset.btnyes.normal, over:ynset.btnyes.over, on:ynset.btnyes.on]);
addButton(%[ x : ynset.btnno.x, y : ynset.btnno.y, normal:ynset.btnno.normal, over:ynset.btnno.over, on:ynset.btnno.on]);
//自定义文字样式
//this.font.face=kag.scflags.chDefaultFace;
this.font.height=ynset.msg.textsize;
this.font.bold=ynset.msg.bold;
this.font.italic=ynset.msg.italic;
var color=ynset.msg.color;
var edge=ynset.msg.edge;
var shad=ynset.msg.shadow;
var edgec=ynset.msg.edgecolor;
var shadc=ynset.msg.shadowcolor;
//修改字体
if (ynset.msg.face!=void)
{
this.font.face=ynset.msg.face;
//预渲染字体加这行
//this.font.mapPrerenderedFont("Font_s.tft");
}
else
{
this.font.face=kag.fore.messages[0].userFace;
}
// 取得单行文字长、宽
var tw = this.font.getTextWidth(message);
var th = this.font.getTextHeight(message);
//读取换行符\n效果
var max_tw = 0;
var sum_th = 0;
var messages = message.split('\n');
for (var i=0; i < messages.count; i++)
{
var lw = this.font.getTextWidth(messages);
var lh = this.font.getTextHeight(messages);
if (lw > max_tw)
max_tw = tw;
sum_th += lh + 0;
}
tw = max_tw;
th = sum_th;
var w =this.width;
var h = this.height;
//设定位置
var msgpos_x = ynset.msg.centerleft-tw/2;
var msgpos_y = ynset.msg.centertop-th/2;
// message文字的描绘
for (var i=0; i < messages.count; i++)
{
var lw = this.font.getTextWidth(messages);
var lh = this.font.getTextHeight(messages);
msgpos_x = ynset.msg.centerleft-lw/2;
//根据样式描绘文字
if (edge) {this.drawText(msgpos_x, msgpos_y, messages, color, 255, true, 255, edgec, 1, 0, 0);}
else if (shad) {this.drawText(msgpos_x, msgpos_y, messages, color, 255, true, 255, shadc, 0, 2, 2);}
else {this.drawText(msgpos_x, msgpos_y, messages, color, 255, true);}
msgpos_y += lh + 3; // 调整行间距
}
}
function finalize() {
super.finalize();
}
/**
* オープン直後によばれる
*/
function onOpen() {
setFocusToLink(1,true);
}
function processLink(num) {
super.processLink(num);
if (num == 0) {
result = true;
if (yesFunc !== void) {
yesFunc(param);
}
} else {
if (noFunc !== void) {
noFunc(param);
}
}
if (this isvalid) {
if (doneFunc !== void) {
doneFunc(param);
}
close();
}
}
}
KAGLoadScript("YesNoDialog.tjs");
var origAskYesNo = askYesNo;
var yesnoMap = %[
//"是否回到开始?" => "dialog_title_base",
//"是否退出?" => "dialog_exit_base"
// "上書きしてよろしいですか?" => "dialog_overwrite_base",
//"ロードしますか?" => "dialog_load_base",
//"初期化" => "dialog_configini_base"
];
// Yes か No かはっきりさせる関数をのっとる
var askYesNo = function(message, caption = "確認", yesFunc, noFunc, param, doneFunc)
{
if (kag.isMoviePlaying()) {
var win;
if (message.indexOf("まで戻りますか?") >= 0) {
win = new MyYesNoDialogWindow("dialogprev");
} else {
var bgd = yesnoMap[message];
//假如能够取得背景图,直接使用对应背景图+空白文字
if (bgd !== void) {
win = new MyYesNoDialogWindow(bgd,"");
}
//否则使用空白图+文字
else {
//win = new YesNoDialogWindow(message, caption);
var ynset=Scripts.evalStorage("uiyesno.tjs");
win = new MyYesNoDialogWindow(ynset.bgd.frame,message);
}
}
win.showModal();
var res = win.result;
invalidate win;
if (res) {
if (yesFunc !== void) {
yesFunc(param);
}
} else {
if (noFunc !== void) {
noFunc(param);
}
}
if (doneFunc !== void) {
doneFunc(param);
}
} else {
if (message.indexOf("まで戻りますか?") >= 0) {
var dialog = new MyYesNoDialogLayer("dialogprev", yesFunc, noFunc, param, doneFunc);
dialog.open();
} else {
var bgd = yesnoMap[message];
//假如能够取得对应信息的背景图,则直接显示背景图
if (bgd !== void) {
var dialog = new MyYesNoDialogLayer(bgd, yesFunc, noFunc, param, doneFunc,"");
dialog.open();
}
//假如不能取得对应信息的背景图,则显示空白图+文字
else {
//origAskYesNo(message, caption, yesFunc, noFunc, param, doneFunc);
var ynset=Scripts.evalStorage("uiyesno.tjs");
var dialog = new MyYesNoDialogLayer(ynset.bgd.frame, yesFunc, noFunc, param, doneFunc, message);
dialog.open();
}
}
}
};
|
|