幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4332|回复: 2

[其他] [KCDDP]Krkr推进委员会专题站点公开

[复制链接]

18

主题

428

帖子

5260

积分

⑦老手

在美工荒中挣扎的全能

积分
5260
QQ
发表于 2006-7-21 21:09:24 | 显示全部楼层 |阅读模式
为了给各位Kirikiri用户提供一个专门的交流空间,同时也为了迎接KAGeXpress 3的发布,KeyFC同人发展促进会准备了新的吉里吉里/KAG专题站点。
欢迎各位对Kirikiri/KAG有兴趣的朋友来这里访问。

地址:http://krkr.keyfc.net

以后的技巧收集、教程等都会以这里为主发布。
回复

使用道具 举报

122

主题

3954

帖子

24万

积分

超级版主

传说中的Bunny坑神~!

Rank: 8Rank: 8

积分
244543

声命组铜赏

发表于 2006-10-12 18:20:09 | 显示全部楼层
在得到无数教程及shawind样的帮助,并在犯了无数傻错误之后的成果。
自定义弹出询问框。
包括窗口背景及按钮用图片代替。
自定义消息字体(需要把字体打成tft包)及颜色,居中和换行。
换行方式:在需要换行的地方插入换行符\\n。
一般的类似存储、退出等询问是在mainwindow中修改文字。
  1. // YesNoDialog.tjs - はい/いいえを選択するダイアログボックス
  2. // Copyright (C)2001-2005, W.Dee and contributors  改変.配布は自由です
  3. class YesNoDialogWindow extends Window
  4. {
  5.     var yesButton; // [はい] ボタン
  6.     var noButton; // [いいえ] ボタン
  7.     var result = false; // no:false yes:true
  8.     function YesNoDialogWindow(message, cap)
  9.     {
  10.         super.Window();
  11.         // メインウィンドウから cursor**** の情報をとってくる
  12.         if(global.Window.mainWindow !== null &&
  13.             typeof global.Window.mainWindow.cursorDefault != "undefined")
  14.             this.cursorDefault = global.Window.mainWindow.cursorDefault;
  15.         if(global.Window.mainWindow !== null &&
  16.             typeof global.Window.mainWindow.cursorPointed != "undefined")
  17.             this.cursorPointed = global.Window.mainWindow.cursorPointed;
  18.         // 外見の調整
  19.         borderStyle = bsNone; //无风格窗口
  20.         innerSunken = false;
  21.         // プライマリレイヤの作成
  22.         add(new Layer(this, null));
  23.         // プライマリのマウスカーソルを設定
  24.         if(typeof this.cursorDefault !== "undefined")
  25.             primaryLayer.cursor = cursorDefault;
  26.                     primaryLayer.loadImages("pop.jpg"); //对话框的底图
  27.                     primaryLayer.setSizeToImageSize();
  28.                     primaryLayer.type = ltTransparent;
  29.                     
  30.         // 文字样式设定        
  31.         primaryLayer.font.mapPrerenderedFont("font.tft");//选择特殊字体包
  32.         
  33.         var tw = primaryLayer.font.getTextWidth(message);
  34.         var th = primaryLayer.font.getTextHeight(message);
  35.         
  36.               var max_tw = 0;
  37.               var sum_th = 0;
  38.               var messages = message.split('\\n');
  39.               for (var i=0; i < messages.count; i++){
  40.               var lw = primaryLayer.font.getTextWidth(messages[i]);
  41.               var lh = primaryLayer.font.getTextHeight(messages[i]);
  42.               if (lw > max_tw)
  43.               max_tw = tw;
  44.               sum_th += lh + 0; // 行間が必要なら+0より大きくする
  45.               }
  46.               tw = max_tw;
  47.               th = sum_th;
  48.         var w =primaryLayer.width;
  49.         var h = primaryLayer.height;
  50.         setInnerSize(w, h);
  51.         primaryLayer.width = w;
  52.         primaryLayer.height = h;
  53.         // ウィンドウ位置の調整
  54.         if(global.Window.mainWindow !== null && global.Window.mainWindow isvalid)
  55.         {
  56.             var win = global.Window.mainWindow;
  57.             var l, t;
  58.             l = ((win.width - width)>>1) + win.left;
  59.             t = ((win.height - height)>>1) + win.top;
  60.             if(l < 0) l = 0;
  61.             if(t < 0) t = 0;
  62.             if(l + width > System.screenWidth) l = System.screenWidth - width;
  63.             if(t + height > System.screenHeight) t = System.screenHeight - height;
  64.             setPos(l, t);
  65.         }
  66.         else
  67.         {
  68.             setPos((System.screenWidth - width)>>1, (System.screenHeight - height)>>1);
  69.         }
  70.         // message文字的描绘
  71.               var msgpos_y = 60;
  72.               for (var i=0; i < messages.count; i++){
  73.                var lw = primaryLayer.font.getTextWidth(messages[i]);
  74.                var lh = primaryLayer.font.getTextHeight(messages[i]);
  75.                var msgpos_x = (w - lw)\\2;
  76.               primaryLayer.drawText(msgpos_x, msgpos_y, messages[i],0x804040);//修改颜色
  77.                msgpos_y += lh + 10; // 调整行间距
  78.               }
  79.         
  80.               primaryLayer.font.unmapPrerenderedFont(); //还原字体样式
  81.         // Yesボタン
  82.         add(yesButton = new ButtonLayer(this, primaryLayer));
  83.         yesButton.loadImages("yes.jpg",);//确认按钮的图片
  84.         yesButton.top = 167;//调整按钮显示位置
  85.         yesButton.left = 40;//调整按钮显示位置
  86.         yesButton.visible = true;
  87.         // Noボタン
  88.         add(noButton = new ButtonLayer(this, primaryLayer));
  89.         noButton.loadImages("no.jpg",);//取消按钮的图片
  90.         noButton.top = 167;//调整按钮显示位置
  91.         noButton.left = 220;//调整按钮显示位置
  92.         noButton.visible = true;
  93.     }
  94.     function finalize()
  95.     {
  96.         super.finalize(...);
  97.     }
  98.     function action(ev)
  99.     {
  100.         // action
  101.         if(ev.type == "onClick")
  102.         {
  103.             if(ev.target == yesButton)
  104.             {
  105.                 result = true;
  106.                 close();
  107.             }
  108.             else if(ev.target == noButton)
  109.             {
  110.                 result = false;
  111.                 close();
  112.             }
  113.         }
  114.         else if(ev.type == "onKeyDown" && ev.target === this)
  115.         {
  116.             // パッド入力に対応する処理
  117.             switch(ev.key)
  118.             {
  119.             case VK_PADLEFT:
  120.                 yesButton.focus();
  121.                 break;
  122.             case VK_PADRIGHT:
  123.                 noButton.focus();
  124.                 break;
  125.             case VK_PAD1:
  126.                 if(focusedLayer == yesButton)
  127.                 {
  128.                     result = true;
  129.                     close();
  130.                 }
  131.                 else if(focusedLayer == noButton)
  132.                 {
  133.                     result = false;
  134.                     close();
  135.                 }
  136.                 break;
  137.             case VK_PAD2:
  138.                 result = false;
  139.                 close();
  140.                 break;
  141.             }
  142.         }
  143.     }
  144.     function onKeyDown(key, shift)
  145.     {
  146.         super.onKeyDown(...);
  147.         if(key == VK_ESCAPE)
  148.         {
  149.             // ESC キーが押された
  150.             // 「いいえ」として処理
  151.             result = false;
  152.             close();
  153.         }
  154.     }
  155. }
  156. // Yes か No かはっきりさせる関数
  157. function askYesNo(message, caption = "確認")
  158. {
  159.     var win = new YesNoDialogWindow(message, caption);
  160.     win.showModal();
  161.     var res = win.result;
  162.     invalidate win;
  163.     return res;
  164. }
复制代码
~效果图~
http://www.nvlmaker.net/
回复 支持 反对

使用道具 举报

1

主题

7

帖子

79

积分

②入门

积分
79
发表于 2007-2-5 19:33:15 | 显示全部楼层
很不错了,我学一下。
请问有其他源码可以提供吗?除了美化,更关心热区,存档一类的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-5-10 13:22 , Processed in 0.043654 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表