设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4672|回复: 9
打印 上一主题 下一主题

[已经解决] 立繪顯示在對話框前

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
46 小时
注册时间
2015-1-22
帖子
24
跳转到指定楼层
1
发表于 2015-2-26 17:37:58 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
爬文爬了很久,找不到想要的效果
找到的都是頭像在對話框之中,而且只能100x100
不知道能不能讓頭像超出對話框範圍,而且能夠顯示在對話框前
我知道其他版本的好像可以,但是xp的不知道要怎麼弄
就是像這樣的效果的
http://www.rpgchina.net/simple/?t34256.html
他裡面的對話框前有人物頭像,而且不受限於對話框
不知道該怎麼做呢?

然後我目前用的腳本是
https://sites.google.com/site/rp ... -xian-shi-qiang-hua
可以從這邊擴充?還是?

另一個問題,要如何從我上面那個腳本,將對話框的x y軸移動、長寬變更? 我在windows-Message更改的,被上面那個腳本覆蓋,所以沒有效果

点评

你说的第三张图呀  发表于 2015-2-26 18:42

评分

参与人数 1星屑 +35 收起 理由
︶ㄣ牛排ぶ + 35 认可答案

查看全部评分

Lv1.梦旅人

梦石
0
星屑
50
在线时间
186 小时
注册时间
2014-6-14
帖子
213
2
发表于 2015-2-26 18:39:40 | 只看该作者
直接——显示图片
然后把对话框的Z坐标改了

点评

好吧 只好等等看有沒有其他人回了,還是謝謝你囉~  发表于 2015-2-26 19:43
找大神吧,我也不清楚  发表于 2015-2-26 19:30
在哪裡改z座標? 要改多少?  发表于 2015-2-26 19:21
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
155
在线时间
332 小时
注册时间
2013-7-6
帖子
356
3
发表于 2015-2-27 18:53:01 | 只看该作者

点评

你可以把范例里面的Game.rxproj用记事本打开变成RPGXP 1.02  发表于 2015-2-28 16:42
显示文章前面加上脚本  发表于 2015-2-28 16:40
$text_menu=[[name1(,left_fix1,top_fix1)],[name2(,left_fix2,top_fix2)], [zoom_x,zoom_y](,type)] 不好意思這個是要寫在? 因為我是舊版的,所以開不了範例  发表于 2015-2-27 23:00
偶是熬夜学编程的傻子
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
65 小时
注册时间
2013-4-18
帖子
81
4
发表于 2015-2-28 00:06:29 | 只看该作者
本帖最后由 Thylakoid 于 2015-2-28 00:10 编辑

第二個鏈接內地這邊無法直連。我記得樓主以前有一次提問也有鏈接無法直連的情況,當時那個是巴哈姆特哈啦板的鏈接。所以首先建議樓主,如果以後發文還要做“我參考了某網站上的某個方法”這種描述,請不要只給出網址,以免造成因地域不同而打不開網頁進而無法提供幫助的狀況。希望樓主利用好論壇的功能,貼出所參考腳本以及相關說明,當然最好能直接上傳工程附件。

我翻墻把第二個鏈接打開看並把腳本下載了。這裡先替樓主貼一下這個腳本。

点评

重新编辑。折叠一下,之前脚本太长影响显示了。  发表于 2015-2-28 00:14
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
65 小时
注册时间
2013-4-18
帖子
81
5
发表于 2015-2-28 00:07:45 | 只看该作者
本帖最后由 Thylakoid 于 2015-2-28 00:36 编辑

接下來回答問題。
1、你想要的用半身像做頭像,一部分壓住對話框、一部分超出對話框的效果可以在這個腳本上直接改。以下是我改完之後的樣子,如果你沒有動這個腳本中的其他內容,可以直接替換成我改完的這個。(重新编辑,折叠一下,否则容易影响显示,抱歉之前忘了有折叠功能,只好分成两层楼来发。结果还是因脚本过长而显示不出内容了)

2、如何調節對話框的坐標、長度、寬度

這部分在改過之後的腳本中,514~578行名為【窗口和不透明度的設定】這裡面修改。其中設定了不同狀況下對話框的位置。其中比較常用的部分是這裡
  1. case $game_system.message_position #使用了更改文章選項
  2.         when 0  # 上  對話框在屏幕上方
  3.           self.y = 16
  4.         when 1  # 中   對話框在屏幕中間
  5.           self.y = 160
  6.         when 2  # 下   對話框在屏幕下方
  7.           self.y = 304
  8.         end
  9.         self.x = 80
  10.         if @face_file == nil  #不顯示頭像的時候
  11.           self.width = 480   #對話框的左右長度
  12.         else                         #顯示頭像的時候
  13.           self.width = 600   #對話框的左右長度
  14.           self.x -= 60
  15.         end
  16.         self.height = 160    #對話框的上下寬度
复制代码
self.x和self.y是對話框左上角的橫縱坐標,self.width是對話框的左右長度,self.height是對話框的上下寬度。不同狀況下,你可以根據自己的視覺喜好去修改這些數值。

這裡注意:我做的時候,頭像的坐標是以你對話框的坐標為參考系的。你如果手動修改對話框的坐標、上下寬度,頭像會跟隨你改過之後的對話框坐標顯示在合適的位置。但由於你要顯示的頭像是半身立繪,其高度會超過對話框的上下寬度。因此在手動調節對話框縱坐標的時候,如果y值過小(即對話框位置過高),有可能會出現頭像上端超出屏幕的狀況。這裡尤其要注意
  1. when 0  # 上  對話框在屏幕上方
  2. self.y = 16
复制代码
這個狀況,最容易超出屏幕。所以請注意根據你自己的素材大小適當調節這裡的幾個y值。

頭像與對話框的相對位置是這裡,共兩處:86~91行,以及560~565行。內容一樣,作用稍有區別。要修改的話兩處要一起改。
  1. @face = Sprite.new
  2.           @face.bitmap = RPG::Cache.picture(@face_file)
  3.           @face.opacity = 255
  4.           @face.x = self.x
  5.           @face.y = self.y + self.height - @face.bitmap.height
  6.           @face.z = 9999
复制代码
目前我設定的是頭像左下角的坐標等於對話框左下角的坐標。@face.x是頭像左上角的橫坐標,目前用對話框左上角的橫坐標來賦值;@face.y是頭像左上角的縱坐標,目前用“對話框左上角的縱坐標+對話框的上下寬度-頭像的上下寬度”所得值來賦值。根據自己素材的實際情況,如果你覺得視覺效果不合適,可以自行調整這部分內容。@face.z是頭像圖片的深度,這個值越大,圖像顯示的層次越高。視覺效果就是,如果多個圖像有重疊,那麼z值大的能蓋住z值小的。目前@face.z = 9999,這個值也可以改,但只能改大不能改小。因為對話框的默認z值為9998,如果把頭像的z值改小的話就蓋不住對話框了。由此我們可以注意到沙發所說的“顯示圖片,改對話框z坐標”的一個很大的局限性。目前圖像層次的視覺效果應該是這樣的:“作為頭像的半身像立繪”最高,它高於“對話框”高於“其他圖像”。即對話框的z值應該夾在兩者之間。如果用事件中顯示圖片的方法去顯示頭像,那它就要走腳本Sprite_Picture裡面那套z值的算法
  1. self.z = @picture.number  #當前圖片的z值等於圖片編號
复制代码
這樣蓋不住z值為9998的對話框。但如果把對話框的z值調低,或者更改Sprite_Picture裡面的算法使顯示圖片的默認z值升高,就會牽扯到其他的需要顯示對話框或者顯示圖片時圖像的層次情況,可能造成該蓋住的沒蓋住,該露出來的卻被蓋住了。而且你不能絕對確定一個場景中的圖片編號上限是多少,這個真有可能會超過50(個人實際經歷過),所以無法統一去特指顯示頭像時用的圖片編號。這樣一來,即使改了默認的z值算法,也未必能在各種特殊狀況下保證“對話框的z值夾在頭像和其他圖片之間”,更不用說其他場景裡面的圖像疊加狀況了。所以沙發那個方法(其實是以前在論壇裡有人說過的方法)我不推薦。我認為就應該直接用腳本生成所需的圖像,然後單獨調節這個圖像的z值,其餘默認的東西什麼都不去動。這樣既滿足了該圖像的特定層次,又不會影響其他。      

点评

如果不想改檔名的話,可以做API聲明,讓rmxp調用電腦內部的方法來使FileTest.exist?識別中文名字的文件。這個方法我寫到樓下。  发表于 2015-2-28 14:35
↓我試了一下。“\f[檔名]”這個指令要寫在最前面。如:\f[1]你好。不能寫成:你好\f[1]。另外,默認狀態下,中文檔名不會被識別。請改成英文或數字  发表于 2015-2-28 14:25
我先用了你第一個修改好的腳本,貼上去後 是要在事件中打\f[檔名]就會出現那張立繪是嗎? 可是圖片顯示不出來要怎麼辦?  发表于 2015-2-28 10:10
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
1961
在线时间
21 小时
注册时间
2014-10-7
帖子
3
6
发表于 2015-2-28 10:59:18 | 只看该作者
脚本渣的办法,可以直接把立绘和对话框做成一张图片,然后隐藏系统默认的对话框,直接显示图片。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
65 小时
注册时间
2013-4-18
帖子
81
7
发表于 2015-2-28 14:47:12 | 只看该作者
識別中文文件。
在腳本編輯器的最上端新建一個腳本,然後把下面這段插進去。
  1. PathFileExist = Win32API.new("shlwapi", "PathFileExistsW", "P", "I")
  2. MultiByteToWideChar = Win32API.new("kernel32", "MultiByteToWideChar", "ILPIPI", "I")
  3. def FileTest.exist?(filename)
  4.   len = MultiByteToWideChar.call(65001, 0, filename, -1, 0, 0) << 1
  5.   buf = " " * len
  6.   MultiByteToWideChar.call(65001, 0, filename, -1, buf, len)
  7.   return PathFileExist.call(buf) == 0 ? false : true
  8. end
复制代码
其中kernel32是電腦系統中的一個dll文件,不同電腦可能用的版本不同,保險起見,在把成品給別人的時候,記得把kernel32.dll放在遊戲的根目錄下。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
206 小时
注册时间
2014-2-8
帖子
396
8
发表于 2015-2-28 20:27:13 | 只看该作者
改Z,Z高的遮盖低的
刚接触RPG的新人们裤艾来这里!在这里能够帮助你们提高自身的能力,让大家来帮助每个人实现自己的创意、构想!
也许你只是正在看RPG教程的新人,或者是正在努力学着制作自己的RPG的制作者,或者是狂热的RPG游戏喜爱者,
但都不重要!
加入我们,我们会帮助你实现梦想,或者帮助你更好的运用RPG并且创造个人的一片天地!周末我们会不定时间开放RM技术讨论活动或者RM经验交流课!
加入我们,我们愿意与你共同创造奇迹,共同进步!
QQ群号:329443038  
或者联系QQ:573932914
我们和你站在同一线!
要求只有:常能上线
我们会用十分的热情接纳你!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
46 小时
注册时间
2015-1-22
帖子
24
9
 楼主| 发表于 2015-3-1 21:41:03 | 只看该作者
Thylakoid 发表于 2015-2-28 00:07
接下來回答問題。
1、你想要的用半身像做頭像,一部分壓住對話框、一部分超出對話框的效果可以在這個腳本上 ...

感謝你的細心講解~讓我懂得滿多的了~
想問一下另一個問題

就是像左邊放圖片,如果直接打字的話,圖片會蓋到字
那要怎麼修改字的位置?
是改字的X座標?是的話在哪裡呢?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
65 小时
注册时间
2013-4-18
帖子
81
10
发表于 2015-3-1 23:05:05 | 只看该作者
龍月 发表于 2015-3-1 21:41
感謝你的細心講解~讓我懂得滿多的了~
想問一下另一個問題

不好意思,這裡是我忘記講解了。
在我沒改之前,原腳本就已經為頭像留下了顯示空間,原腳本第79行
  1. @x = @face_indent = 128
复制代码
這裡預留給頭像圖片的寬度就是定值128。之後在接下來每一個可能顯示頭像的場合,計算文本內容的起始位置時,都代入了變量@face_indent ,你可以用“ctrl+F”依次看一下。

我改過腳本之後,在第93行,把這一部分改成了
  1. @x = @face_indent = @face.bitmap.width
复制代码
即預留出來給圖片的空間等於圖片的左右寬度。如果你沒有改過其他東西,按我設計的那樣讓“圖片的左下角坐標=對話框的左下角坐標”,那麼圖片不會擋字。但如果你調節了頭像和對話框的相對坐標,將頭像相對於對話框向右移動的話,比如改成了
  1. @face.x = self.x + 40
复制代码
那麼頭像的左邊和對話框的左邊就會產生40像素的空隙,可是這40像素沒有被計入到@face_indent 裡面,所以顯示文本時,文本的起始位置還是按照“頭像圖片的橫坐標=對話框的橫坐標”來計算的。於是,相對於對話框向右移動了40像素的頭像圖片就可能蓋到文字。

解決辦法:
如果你改了頭像相對於對話框的橫坐標,如
  1. @face.x = self.x + 40
复制代码
那麼就把
  1. @x = @face_indent = @face.bitmap.width
复制代码
對應改成
  1. @x = @face_indent = @face.bitmap.width + 40
复制代码
讓這40像素被計算到@face_indent裡面,問題就解決了。
+50、+60同理,只要兩處對應成一樣的就行。

另外提醒一下,頭像素材的規格最好統一成一致的,而且圖片兩側盡量不要有過寬的透明的空白處,否則容易影響美觀。

点评

了解~感謝你囉~  发表于 2015-3-2 19:49

评分

参与人数 1梦石 +1 收起 理由
︶ㄣ牛排ぶ + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-13 23:00

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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