RenPy中文空间

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 100|回复: 0

[转载] 第七回:粒子之下,色彩之上

[复制链接]
发表于 2019-2-15 18:00:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
本帖最后由 BuErShen 于 2019-2-14 20:57 编辑

雪凡與好朋友們的 Ren'Py 遊戲引擎初學心得提示

第七回:粒子之下,色彩之上

又到了眾所期待的 Ren'Py 節目時間。大家好,我是節目主持人雪凡。

Head_Secure_1_1.jpg 「我是絲蔻兒。」

Head_Info_1_3.jpg 「我是音符呀。」

啊哈,兩位熟悉的搭檔再次登場,在下可是無任歡迎的呢。

不過,本回的內容......也算是上回的擴展與補充。程式碼可是有相當份量的說。看到程式碼就該咚咚登場的泰克斯 (text),人又到哪去了?

Head_Secure_1_3.jpg 「那傢伙狀況挺糟的,壓根就沒出門啊。」

Head_Info_1_2.jpg 「呀......那、那個......小泰他,好像是在煩惱些什麼......我們有點不好叫他......」

哈啊?

Head_Secure_1_3.jpg 「嘛啊~也不知怎麼搞的...... 自從上次上完節目,就看他一臉失魂落魄的樣子,嘴裏總在喃喃自語:『我絕對不可能和絲蔻兒越來越像』什麼的......完全不知道在想什麼呢!」

arrow.jpg Head_Text_1_16.jpg 「我不可能和絲蔻兒越來越像,我不可能和絲蔻兒越來越像......」

Head_Info_1_8.jpg 「大、大概就像這樣......」

......

呃,好,咱大概懂了,這真是一椿悲哀的意外。不過這個話題和我無關,完全無關,就此跳過吧。

今天要帶給大家的主題有兩大項。

首先擋在面前的是「粒子系統」。在這個主題中,咱們會聊到如何使用大量的小圖片來創造動畫。至於第二個,則是動態的圖片修改器 "Image Manipulators"。

前者能讓您大量創造像是「雨水落下」一類的畫面效果。至於後者,則能讓遊戲無需預存圖片的全部版本--只需保存少少幾張圖,與之相關的衍生版本(如一張背景圖可能有多種打光變化)就能透過即時算圖自動搞定--這不光是節約儲存空間,也可減少您需要管理的圖片總量,是相當方便的功能。

Head_Info_1_5.jpg 「雖然程式碼確實不少,但本回的內容遠遠沒有上回那麼繁瑣。請不要被上回嚇倒倒了。」

Head_Secure_1_4.jpg 「那麼,這就開始吧!」

走囉!

Sprite 粒子系統
照慣例,最難的東西放在最前面--今天就從粒子系統開始。

要讓畫面上出現一大堆,具有隨機動畫的相似小圖片(比方說水花、雨點、雪片、花瓣等等),一張張貼圖、手工寫 ATL 做動畫這種事,多半不是個好主意。畢竟結局我已經見到了:「少女(年)伏在桌上,臉上帶著一絲笑容,彷彿睡著了那般,靜靜地陷入了永眠」--世界線變動率 怎樣也無法超過一啊!

一言以蔽之,會累死的。

雖然說過勞死也是遊戲製作者的本職學能,不過如此一來,會給社會版記者造成很大的困擾,還請不要那麼做。

為了減少社會版記者......不對,應該說各位遊戲作者的麻煩,Ren'Py 提供了相當不錯用的 Sprite 系統。

如前所述,Sprite 系統能在畫面上隨機顯示很多小圖片,並附上相應的移動特效......像雪花或櫻花紛紛飄落這種效果,用本系統就能輕易做到。

renpy_07_01_sprite.jpg
▲ 圖:官網對粒子效果的示範之一--讓多片櫻花瓣從邊緣的隨機位置,以隨機的速度與方向飄落。以上這種簡單的粒子效果,用 SnowBlossom() 函式就能創造出來;稍後會有示範的,請別著急。另一方面,圖上標出的 Sprite 就是 Ren'Py 粒子系統中的「粒子」了。

【Sprite 與 Particle 的用語解說】
說到這裡,我已經聽到有熟悉遊戲引擎設計的同學在慘叫了。
--「不對......不對不對不對!"Sprite" 再怎麼翻譯也不會變成『粒子』,粒子系統應該是 Particle System 才對。Sprite 系統明明是別的東西。這兩者在遊戲引擎的世界中是完全不一樣的呀!」
啊啊,非常遺憾,您的說法完全正確。在一般的遊戲引擎中,Sprite 確實是被翻成「精靈系統」而非「粒子系統」,而其功能也和我們這邊要講的粒子系統完全不同。
但我也沒說錯!Ren'Py 引擎中,就是將粒子系統命名為 Sprite,我也沒辦法啊!這都是世界的錯!


Head_Info_1_9.jpg 音符:「不,世界是無辜的......」

咳!誰的錯先不管。那麼在一般的遊戲引擎中,Sprite 系統(精靈系統)又是指什麼呢?
一般來說,Sprite 是指一個「2D 圖片的容器」。
這個容器具有自己的長寬大小、具有在螢幕上的座標位置、甚至具有自己的旋轉角度、透明度等等。但是這個容器實際顯示些什麼,卻不是由容器自己決定,而是由容器中裝入的圖片來決定。
......聽起來似乎很熟悉?之前好像用過這個概念?
是的!之前我們操控立繪時,Sprite 的概念確實早就已經包含於其中了。


以下是一段連續的圖片操作。您可以試試看,看看自己認不認得出來,一般遊戲引擎中所謂的 Sprite 究竟是哪一部份?
[RenPy] 纯文本查看 复制代码
show elminster smile
show elminster at right
show elminster at left
show elminster:
    alpha 0.5
show elminster confuse
show elminster at center with ease

......答案是 "elminster" 這個標籤 (tag)。之前我們將其稱之為「圖片名稱中的第一字節」,不過(僅管 Ren'Py 官方沒有這麼稱呼),事實上它就是其他遊戲引擎中會見到的那種 Sprite。

注意:前面的解說乃是針對一般遊戲引擎的補充,而非針對 Ren'Py 的。如果您感到非常困惑甚至開始混淆,那麼請把這部份的內容忘光光。這對後續的說明沒有任何影響。

知道粒子系統是什麼後,就從最簡單的開始吧。

SnowBlossom(...)
如果您只是想要櫻花、雪花紛紛飄落的那類效果,您可以直接使用「SnowBlossom()」函式來創造。【新注:中文文档参考这里:https://www.renpy.cn/doc/sprites.html#SnowBlossom】如下:
[RenPy] 纯文本查看 复制代码
image snowflakes = SnowBlossom("snowflake.png")     # 定義雪片飄飄落下的效果
                                                    # 注意:這其實也是一張圖片 (image)。

label start:
    scene black         # 黑底
    show snowflakes     # 顯示飄落效果

snowflake.png 新注:原图白色透明,论坛无法显示,加了灰色背景,可在此下载 snowflake.zip (5.25 KB, 下载次数: 1)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|RenPy中文空间 ( 苏ICP备17067825号 | 苏公网安备 32092302000068号 )

GMT+8, 2019-3-26 08:50 , Processed in 0.164248 second(s), 23 queries , File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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