LV. 17
GP 17

RE:【問題】請問如何更改角色的鏡像/水面倒影的行走圖?

樓主 洛可C cubag448
GP2 BP-
改造腳本要先懂一些術語,可以參考Q—S.T大寫的RGSS改造基礎知識
我先提供一些步驟和想法,之後如果想做其他改造也可以參考。

想要改造生成的鏡像圖,
我們首先要知道生成行走圖的類是Sprite_Character。
而鏡像圖就是產生一個與面向相反的行走圖,
由此推斷達成鏡像效果應該是定義在Sprite_Character這個類。

接著,在鏡像腳本裡找到class Sprite_Character < RPG::Sprite
裡面是作者定義生成鏡像的精靈叫@mirror_sprite,找到後改造就容易了

def mirror_set是定義鏡像的初始狀態的函數
下面發現@mirror_sprite = self.dup
dup是作者自己定義的函數,搜尋下def dup,
內容是獲取原本行走圖的資料來生成鏡像圖,
那麼,只要在這邊改變獲取的資料就好了
在@mirror_sprite = self.dup下面加入以下
if @character.id == 0 && $game_switches[1] == true
    @mirror_sprite.bitmap = RPG::Cache.character("002-Fighter02",
    @character.character_hue)
end

這邊的用意是如果角色是主角(@character.id為0)且1號開關為ON
將鏡像圖轉為"002-Fighter02"這張圖,你可以自己更改
你甚至可以自己定義一個專門用來記錄鏡像圖名稱的變數
但我覺得太麻煩,用到的場合不多的話這樣就好了

再來發現一個問題,假如行走圖是A鏡像圖是B,
A和B大小不一樣的話顯示會出錯,
這是因為生成的鏡像圖B是以A的長寬去做切割(把平常行走圖4X4切一張顯示)
需要更改鏡像圖切割的依據也就是@cw、@ch
這邊要注意前面有@的是實體變量,
在Sprite_Character類裡面顯示行走圖會用到
不能直接更改,於是另外定義一個局部變量

在剛剛加入的程式下面加上
cw = @mirror_sprite.bitmap.width / 4
ch = @mirror_sprite.bitmap.height / 4
@mirror_sprite.ox = cw / 2
@mirror_sprite.oy = ch
這邊的cw、ch是我定義的鏡像切割範圍
接著把下面用到實體變量的@cw、@ch改為剛剛定義的cw、ch,如下
sx = @character.pattern * cw
sy = (direction - 2) / 2 * ch
@mirror_sprite.src_rect.set(sx, sy, cw, ch)

然後在def update_mirror負責處理update的函數做下變更
cw = @mirror_sprite.bitmap.width / 4
ch = @mirror_sprite.bitmap.height / 4
@mirror_sprite.ox = cw / 2
@mirror_sprite.oy = ch
sx = @character.pattern * cw
sy = (direction - 2) / 2 * ch
@mirror_sprite.src_rect.set(sx, sy, cw, ch)
這樣part1就完成了,是的後面還有

我看了VA版的鏡像範例做得非常細緻,
即使角色遠離鏡像2格還是能露出半個頭,
或是小鏡子能露出半個身。
XP的角色離開鏡子左右一格鏡像會突然消失
這是這個腳本本身的問題,要做到VA那樣需要多圖層腳本
哈哈,真的用的到欸XD 有空的話我再整理一下作法
2
-
未登入的勇者,要加入討論嗎?
板務人員:

2685 筆精華,昨天 更新
一個月內新增 4
歡迎加入共同維護。


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】