Project1

标题: 【已經解決】如何單純的控制地圖的色調,不控制事件以... [打印本页]

作者: 卡奥尼特    时间: 2017-5-25 20:10
标题: 【已經解決】如何單純的控制地圖的色調,不控制事件以...
本帖最后由 卡奥尼特 于 2017-5-27 15:28 编辑


嗯,最近無聊玩了很多RPG。
而且遇敵方式也有很多種。

有一次玩UT。所以也想把這樣的方式搬到VA內使用。如果沒猜錯的話,著名的口袋妖怪也沿用了這樣的方式。

也就是,單純的更改地圖的色調。 主角以及事件均不受影響。
所以我的要求如下:
1、除了指定的事件,能單純的更改地圖色調,指定的事件不受色調更改的限制
2、除了主角以外,能單純的更改地圖的色調,主角均不受色調更改的限制
3、除了指定的事件以及主角以外,能單純的更改地圖的色調,指定的事件以及主角均不受色調更改的限制


結貼補充內容
也許我的表達方面很單純,或許我理想中的和妳們理解中的可能會有些差異。
主要的是,我到底想實現什麼,真正想要的效果到底是什麼?
寫一個開關不是問題,感覺要理解你真正想要的效果是什麼才是大問題..沒玩過什麼UT..

嗯,這裡引用一下13樓的話。
以後我提問題的時候還是先把問題整理好了再來發問,免得像今天一樣尷尬。。
所以,給大家添麻煩了。抱歉。。

其次,我並不是擅長寫代碼。 0.0 嗯,好像重點不在這裡。

其餘我想說的話,在14樓

作者: soulsaga    时间: 2017-5-25 20:54
事件命令更改画面色调不是这个效果么?
作者: 卡奥尼特    时间: 2017-5-25 21:28
soulsaga 发表于 2017-5-25 20:54
事件命令更改画面色调不是这个效果么?


只能更改畫面色調,事件以及主角都會受影響。
作者: fux2    时间: 2017-5-25 22:08
Spriteset_Map里面,你得先新建一个viewport,因为默认地图和人物都在viewport1,然后在update里面不更新新建的这个viewport的色调
演示代码,自己把修改部分移动到自己的工程里。
1.创建
  1. def create_viewports
  2.     @viewport1 = Viewport.new
  3.     @viewportX = Viewport.new
  4.     @viewport2 = Viewport.new
  5.     @viewport3 = Viewport.new
  6.     @viewportX.z = 25
  7.     @viewport2.z = 50
  8.     @viewport3.z = 100
  9.   end
复制代码


2.然后create_characters这个方法里面的viewport1全部换成viewportX

3.更新
  1. def update_viewports
  2.     @viewport1.tone.set($game_map.screen.tone)
  3.     @viewport1.ox = $game_map.screen.shake
  4.     @viewportX.ox = $game_map.screen.shake
  5.     @viewport2.color.set($game_map.screen.flash_color)
  6.     @viewport3.color.set(0, 0, 0, 255 - $game_map.screen.brightness)
  7.     @viewport1.update
  8.     @viewportX.update
  9.     @viewport2.update
  10.     @viewport3.update
  11.   end
复制代码


4.释放
  1. def dispose_viewports
  2.     @viewport1.dispose
  3.     @viewport2.dispose
  4.     @viewport3.dispose
  5.     @viewportX.dispose
  6.   end
复制代码

作者: 卡奥尼特    时间: 2017-5-25 22:43
本帖最后由 卡奥尼特 于 2017-5-25 22:51 编辑
fux2 发表于 2017-5-25 22:08
Spriteset_Map里面,你得先新建一个viewport,因为默认地图和人物都在viewport1,然后在update里面不更新新 ...



嗯,這個好像只提供了思路吧。     自己測試了下雖然地圖色調被改變,事件的色調並沒有被改變呢。
好像默認的更改畫面色調只改變了viewport2?? (嗯,腳本盲沒看懂。)


作者: gforce    时间: 2017-5-26 00:28
你的意思是指定的事件及主角不變色, 其他事件會變?
你的要求不太能看明白....
  1. class Game_Event
  2.   attr_reader   :name
  3.   
  4.   def name
  5.       return @event.name  
  6.   end
  7. end


  8. class Spriteset_Map
  9.   def create_viewports
  10.     @viewport1 = Viewport.new
  11.     @viewportX = Viewport.new
  12.     @viewport2 = Viewport.new
  13.     @viewport3 = Viewport.new
  14.     @viewportX.z = 25
  15.     @viewport2.z = 50
  16.     @viewport3.z = 100
  17.   end



  18. def create_characters
  19.     @character_sprites = []
  20.     $game_map.events.values.each do |event|
  21.       if event.name =~ /<c>/i
  22.       @character_sprites.push(Sprite_Character.new(@viewportX, event))
  23.       else
  24.       @character_sprites.push(Sprite_Character.new(@viewport1, event))
  25.       end
  26.       end
  27.     $game_map.vehicles.each do |vehicle|
  28.       @character_sprites.push(Sprite_Character.new(@viewportX, vehicle))
  29.     end
  30.     $game_player.followers.reverse_each do |follower|
  31.       @character_sprites.push(Sprite_Character.new(@viewportX, follower))
  32.     end
  33.     @character_sprites.push(Sprite_Character.new(@viewportX, $game_player))
  34.     @map_id = $game_map.map_id
  35.   end
  36.   
  37.   def update_viewports
  38.     @viewport1.tone.set($game_map.screen.tone)
  39.     @viewport1.ox = $game_map.screen.shake
  40.     @viewportX.ox = $game_map.screen.shake
  41.     @viewport2.color.set($game_map.screen.flash_color)
  42.     @viewport3.color.set(0, 0, 0, 255 - $game_map.screen.brightness)
  43.     @viewport1.update
  44.     @viewportX.update
  45.     @viewport2.update
  46.     @viewport3.update
  47.   end
  48.   
  49.   def dispose_viewports
  50.     @viewport1.dispose
  51.     @viewport2.dispose
  52.     @viewport3.dispose
  53.     @viewportX.dispose
  54.   end
  55.   end
复制代码


樓上的code多加兩句就可以了吧
指定事件的方法: 在事件的名稱加上
  1. <c>
复制代码


測試圖:

bandicam 2017-05-26 00-16-24-516.jpg (86.85 KB, 下载次数: 41)

bandicam 2017-05-26 00-16-24-516.jpg

作者: 卡奥尼特    时间: 2017-5-26 00:50
本帖最后由 卡奥尼特 于 2017-5-26 12:01 编辑
gforce 发表于 2017-5-26 00:28
你的意思是指定的事件及主角不變色, 其他事件會變?
你的要求不太能看明白....



好吧,收回前言。測試了下是成功了呢。 那,如果要包括玩家一起受影響要怎麼辦呢?
(也就是直接執行變換畫面色調,所有畫面均受影響。我的意思是,如果不使用此功能的話。 )

作者: 芯☆淡茹水    时间: 2017-5-26 08:07
6L的效果不就是只改变地图色调么!
当然,有选择性的指定某事件或玩家不受色调影响,这个就比较麻烦。
不可能一个事件或角色用一个显示端口。或者事件和角色的色调,就用色调颜色来填充其本身的精灵,不受影响的事件或角色就不填充。
作者: 精灵使者    时间: 2017-5-26 16:03
给你个思路
如果事件名字里包含“不变色”的特殊字符,就可以不影响他的色调转换。
很多脚本都可以这样做呢
作者: 卡奥尼特    时间: 2017-5-26 16:55
精灵使者 发表于 2017-5-26 16:03
给你个思路
如果事件名字里包含“不变色”的特殊字符,就可以不影响他的色调转换。
很多脚本都可以这样做呢 ...

或许我的表达能力有些缺陷。
脚本确实测试成功了,毕竟。7L的截图,我没看出什么效果来。具体还是要自己去测试的。

然后,虽然能实现这样的效果了,如果不想使用以及想用回原来的更改画面色调的功能,也不知道怎么做

恕我脚本小白。。。。。。 也从来没写过脚本= =、

作者: fux2    时间: 2017-5-26 23:37
卡奥尼特 发表于 2017-5-25 22:43
嗯,這個好像只提供了思路吧。     自己測試了下雖然地圖色調被改變,事件的色調並沒有被改變 ...

你不是要求不改变事件的色调吗?
作者: 卡奥尼特    时间: 2017-5-27 01:21
本帖最后由 卡奥尼特 于 2017-5-27 01:26 编辑
fux2 发表于 2017-5-26 23:37
你不是要求不改变事件的色调吗?


嗯,我确实说过。 然后6L也给了脚本,因为只有一张浏览图,所以我没看出什么效果。

因为那时候没亲自去测试,所以当时判断得很果断。。

然后呢,如果我。某些情况下不想使用这样的功能的话,也不知道该怎么办。

毕竟脚本盲,因为我本来就不擅长写代码。。。 抱歉。

作者: gforce    时间: 2017-5-27 14:19
嗯,我确实说过。 然后6L也给了脚本,因为只有一张浏览图,所以我没看出什么效果。

因为那时候没亲自去测试,所以当时判断得很果断。。

然后呢,如果我。某些情况下不想使用这样的功能的话,也不知道该怎么办。

毕竟脚本盲,因为我本来就不擅长写代码。。。 抱歉。



那個腳本大部分都是4樓/11樓為你寫的

基於我的理解,viewport好像一塊畫板,默認地圖跟事件都預設畫在同一塊畫板上面

RM的地圖色調改變其實是畫板的色調改變,所以它們會一起變。

一開始你的要求是 "單純的更改地圖的色調, 主角以及事件均不受影響"。 所以11樓為你增加了一塊畫板,事件都畫在這一塊不會變色的畫板上面。

基本上滿足了你一開始的要求。


後來發現你其實還是想改變事件的色調?

於是我在11樓的腳本上加上一個條件分岐,名字帶<c>的才畫在新畫板上面。

然後你現在想要一個取消腳本效果的開關?

寫一個開關不是問題,感覺要理解你真正想要的效果是什麼才是大問題..沒玩過什麼UT..

  1. module CANOITE_VIEWPORT
  2.   
  3.   CAONITE_SWITCHES_ID = 1 #系統開關編號
  4.   
  5. end

  6. class Game_Event
  7.   attr_reader   :name
  8.   
  9.   def name
  10.       return @event.name  
  11.   end
  12. end


  13. class Spriteset_Map
  14.   def create_viewports
  15.     @viewport1 = Viewport.new
  16.     @viewportX = Viewport.new
  17.     @viewport2 = Viewport.new
  18.     @viewport3 = Viewport.new
  19.     @viewportX.z = 25
  20.     @viewport2.z = 50
  21.     @viewport3.z = 100
  22.   end



  23. def create_characters
  24.     @viewportX = @viewport1 if $game_switches[CANOITE_VIEWPORT::CAONITE_SWITCHES_ID] != true
  25.     @character_sprites = []
  26.     $game_map.events.values.each do |event|
  27.        if event.name =~ /<c>/i
  28.        @character_sprites.push(Sprite_Character.new(@viewportX, event))
  29.        else
  30.        @character_sprites.push(Sprite_Character.new(@viewport1, event))
  31.        end
  32.     end
  33.     $game_map.vehicles.each do |vehicle|
  34.       @character_sprites.push(Sprite_Character.new(@viewportX, vehicle))
  35.     end
  36.     $game_player.followers.reverse_each do |follower|
  37.       @character_sprites.push(Sprite_Character.new(@viewportX, follower))
  38.     end
  39.     @character_sprites.push(Sprite_Character.new(@viewportX, $game_player))
  40.     @map_id = $game_map.map_id
  41.   end
  42.   
  43.   def update_viewports
  44.     @viewport1.tone.set($game_map.screen.tone)
  45.     @viewport1.ox = $game_map.screen.shake
  46.     @viewportX.ox = $game_map.screen.shake
  47.     @viewport2.color.set($game_map.screen.flash_color)
  48.     @viewport3.color.set(0, 0, 0, 255 - $game_map.screen.brightness)
  49.     @viewport1.update
  50.     @viewportX.update
  51.     @viewport2.update
  52.     @viewport3.update
  53.   end
  54.   
  55.   def dispose_viewports
  56.     @viewport1.dispose
  57.     @viewport2.dispose
  58.     @viewport3.dispose
  59.     @viewportX.dispose
  60.   end
  61.   end
复制代码


預設開關 1 開啟/結束 腳本效果

不過已經畫在畫板上的事件還得重畫一次才行

開啟腳本效果的場合,於事件中陷入腳本
  1. $game_switches[CANOITE_VIEWPORT::CAONITE_SWITCHES_ID] = true
  2. SceneManager.call(Scene_Map)
复制代码


結束腳本效果的場合,於事件中陷入腳本
  1. $game_switches[CANOITE_VIEWPORT::CAONITE_SWITCHES_ID] = false
  2. SceneManager.call(Scene_Map)
复制代码


開關的時候畫面會頓一下, 這個在下解決不了

如果這個腳本不能滿足你,只能說在下沒本事解決你的問題
作者: 卡奥尼特    时间: 2017-5-27 15:01
本帖最后由 卡奥尼特 于 2017-5-27 15:27 编辑
gforce 发表于 2017-5-27 14:19
那個腳本大部分都是4樓/11樓為你寫的

基於我的理解,viewport好像一塊畫板,默認地圖跟事件都預設畫在同 ...

在自己的測試工程測試了下這腳本,測試可用。

畢竟,我一開始的需求的初衷就是這些

也就是,單純的更改地圖的色調。 主角以及事件均不受影響。
所以我的要求如下:
1、除了指定的事件,能單純的更改地圖色調,指定的事件不受色調更改的限制
2、除了主角以外,能單純的更改地圖的色調,主角均不受色調更改的限制
3、除了指定的事件以及主角以外,能單純的更改地圖的色調,指定的事件以及主角均不受色調更改的限制

也許我的表達能力不夠好,所以我理想中的和你們理解中的可能會有些差異。


然後4樓給出了思路,只是,我並不會Ruby,並且不擅長寫代碼,所以暫時先等下一人回覆

然後6樓也增加了可以指定不受影響的NPC。這些呢,基本已經滿足我的需求了。


雖然指定了是指定了,但我覺得少了點什麼, 就是開關。 某些情況下暫時不想用這功能。

至於其他方面,我會自己想辦法。 (比如主角自己。)

寫一個開關不是問題,感覺要理解你真正想要的效果是什麼才是大問題..沒玩過什麼UT..

嗚,畢竟我的表達方面不是很擅長,所以我理想中的和妳們理解當中的可能會有些差異。。
UT就是傳說之下了 0.0





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1