這篇文章是柳佳淇翻譯的,但是她沒有翻譯完,誰能幫忙翻譯完呢?
我們UNIR工作室在大陸的人都不會日本語,先謝謝了。
翻譯完直接貼出來即可,如果要用附件貼HTML的話請用UTF8格式存檔。
[前半部分已經翻譯完畢]- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html lang="en">
- <head>
- <meta [url]http-equiv=[/url]"Content-Type" content="text/html; charset=UTF-8">
- <meta [url]http-equiv=[/url]"Content-Style-Type" content="text/css">
- <title>Cache 模塊</title>
- <link href="../style.css" type="text/css" rel="stylesheet">
- </head>
- <body>
- <h1>Cache 模塊</h1>
- <ul>
- <li><a href="#what">什麼是Cache</a></li>
- <li><a href="#use">Cache的使用方法</a></li>
- <li><a href="#detail">細節</a></li>
- <li><a href="#@cache">@cache</a></li>
- <li><a href="#bitmap">bitmap的作成</a></li>
- </ul>
- <p>Cache 是高速讀取圖像文件的模塊。</p>
- <h2><a name="what">什麼是Cache</a></h2>
- <p>在基礎篇裡<a href="109_graphics.html">顯示圖像</a>的時候,使用了<a href="../rgss/gc_bitmap.html">Bitmap</a>這個類 </p>
- <pre>skeleton.bitmap = Bitmap.new("Graphics/Battlers/Skeleton")<br></pre>
- <p>就像這樣Bitmap 類的實變量作成的時候,作為參數可以讀取指定圖像文件。</p>
- <p>可是每次讀取圖像的效率很低。能夠保存 Bitmap 對像這一功能正是 Cache 模塊的作用。</p>
- <p>Cache 原本是「儲藏庫」的英語單詞,在計算機的世界是「頻繁使用數據存儲的地方」的意思也是這個模塊命名的由來。</p>
- <h2><a name="use">Cache的使用方法</a></h2>
- <p>比起說Cache 模塊件內部是如何定義的,還是說怎麼使用比較重要。</p>
- <p>使用方法如下 (注意: Cache 模塊的定義沒完成的 TEST 項裡不能使用)。</p>
- <pre>skeleton.bitmap = Cache.battler("Skeleton", 0)<br></pre>
- <p>這個腳本是從戰鬥圖文件裡取得 "Skeleton"這個位圖內容的。不指定Graphics/Battlers/"文件夾名也沒有問題。</p>
- <p>第2個參數的「0」,表示色相變化值。值的範圍從 0~360 ,僅僅使用在動畫圖像和戰鬥圖像裡。</p>
- <p>與各種素材文件夾對應的方法參考下面</p>
- <table border="1" cellpadding="2" cellspacing="0">
- <tbody>
- <tr>
- <th>方法名</th>
- <th>參數</th>
- <th>文件夾</th>
- </tr>
- <tr>
- <td>Cache.animation</td>
- <td>文件夾,色相</td>
- <td>Graphics/Animations/</td>
- </tr>
- <tr>
- <td>Cache.battler</td>
- <td>文件夾,色相</td>
- <td>Graphics/Battlers/</td>
- </tr>
- <tr>
- <td>Cache.character</td>
- <td>文件夾</td>
- <td>Graphics/Characters/</td>
- </tr>
- <tr>
- <td>Cache.face</td>
- <td>文件夾</td>
- <td>Graphics/Faces/</td>
- </tr>
- <tr>
- <td>Cache.parallax</td>
- <td>文件夾</td>
- <td>Graphics/Parallaxes/</td>
- </tr>
- <tr>
- <td>Cache.picture</td>
- <td>文件夾</td>
- <td>Graphics/Pictures/</td>
- </tr>
- <tr>
- <td>Cache.system</td>
- <td>文件夾</td>
- <td>Graphics/System/</td>
- </tr>
- </tbody>
- </table>
- <p>與Sound 模塊一樣,即使是不存在的文件名也不會產生錯誤。只是返回32×32 大小的空位圖而已。之所以不是1×1 ,是因為要和RGSS 內部兼容。
- </p>
- <h2><a name="detail">細節</a></h2>
- <p>キャッシュについての理解をより深めるためにも、<br>
- 实装がどのようになっているのかを见ていきましょう。<br>
- <br>
- 首先从 Cache.battler 这个方法定义。</p>
- <pre> def self.battler(filename, hue)<br> load_bitmap("Graphics/Battlers/", filename, hue)<br> end<br></pre>
- <p>シンプルですね。引数として战斗グラフィックのフォルダ名を追加し、load_bitmap という别のメソッドを呼び出しているだけです。では、呼び出し先の
- load_bitmap メソッドを见てみます。</p>
- <pre> def self.load_bitmap(folder_name, filename, hue = 0)<br> @cache = {} if @cache == nil<br> path = folder_name + filename<br> if not @cache.include?(path) or @cache[path].disposed?<br> if filename.empty?<br> @cache[path] = Bitmap.new(32, 32)<br> else<br> @cache[path] = Bitmap.new(path)<br> end<br> end<br> if hue == 0<br> return @cache[path]<br> else<br> key = [path, hue]<br> if not @cache.include?(key) or @cache[key].disposed?<br> @cache[key] = @cache[path].clone<br> @cache[key].hue_change(hue)<br> end<br> return @cache[key]<br> end<br> end<br></pre>
- <p>これは解读が大变そうです。细切れにして读んでいきましょう。</p>
- <pre> def self.load_bitmap(folder_name, filename, hue = 0)<br></pre>
- <p>最上行はモジュールメソッドの定义ですね。フォルダ名、ホトシシミ、色相を引数として取るように定义されています。色相 (hue)
- に指定されている“0”は<strong>デフォルト引数</strong>です。これは<a href="107_function.html">关数</a>の场合とまったく同じです。</p>
- <h2><a name="@cache">@cache</a></h2>
- <p>2 行目は少々厄介です。</p>
- <pre> @cache = {} if @cache == nil<br></pre>
- <p>まずは文法ですが、これは基础编の<a href="105_branch.html">条件分岐</a>で最后に解说した、<strong>修饰子</strong>形式の条件分岐です。意味的には、以下と同じです。</p>
- <pre> if @cache == nil<br> @cache = {}<br> end<br></pre>
- <p>このほうが普通の书き方ですが、より短く简洁に书くために if 修饰子を使用しています。</p>
- <p>{} という记号は何だったか觉えていますか? これは、空の<a href="111_hash.html">ハッシュ</a>を作成する方法でした。まとめると、@cache というインスタンス变数の值が nil
- のとき、空のハッシュオブジェクトを作成して代入するという意味になります。インスタンス变数は、クラスで定义される通常のメソッドで使用するのが一般的ですが、ここはモジュールメソッドの中です。この场合、インスタンス变数は
- Cache モジュールそのものに属する变数と解释されます。</p>
- <p>ところで、基础编で最初に<a href="103_variable.html">变数</a>の解说をしたとき、一度も代入されていない变数を参照しようとしてはいけないと说明しました。</p>
- <pre>p zzz # ERROR!!<br></pre>
- 实はこれは<strong>ローカル变数</strong>のみに当てはまるルールです。インスタンス变数やグローバル变数の场合、一度も代入されていない变数を参照してもエラーにはならず、nil
- が返されます。これを利用して、@cache 变数の初期化がされたか否かを判定しているわけです。
- <h2><a name="bitmap">ビットマップの作成</a><a name="bitmap"></a></h2>
- <p>续いて 3 行目です。</p>
- <pre> path = folder_name + filename<br></pre>
- <p>これは简单ですね。<a href="104_string.html">文字列</a>の足し算です。たとえば folder_name が
- "Graphics/Battlers/"、filename が "Skeleton" であるときは、それを连结した
- "Graphics/Battlers/Skeleton" という文字列がローカル变数 path に代入されます。</p>
- <p>4 行目にいきましょう。</p>
- <pre> if not @cache.include?(path) or @cache[path].disposed?<br></pre>
- <p>复杂な条件分岐です。ここでは、@cache が指しているハッシュオブジェクトに path
- の文字列がキーとして含まれておらず、かつ、そのビットマップが解放されていない场合、という条件を判定しています。include? や disposed?
- といったメソッドについては、<a href="../rgss/sc_hash.html">Hash</a>、<a href="../rgss/gc_bitmap.html">Bitmap</a> のリファレンスを参照してください。</p>
- <p>5 行目以降です。</p>
- <pre> if filename.empty?<br> @cache[path] = Bitmap.new(32, 32)<br> else<br> @cache[path] = Bitmap.new(path)<br> end<br></pre>
- <p>リファレンスに书かれているとおり、<a href="../rgss/gc_bitmap.html#new">Bitmap.new</a>
- は二通りの呼び出し方が可能です。ひとつの文字列を引数として渡した场合は、それを画像ファイルのパス名と解释して读み迂みを行います。ふたつの整数を引
- 数として渡した场合は、それをビットマップのサイズと解释し、空のビットマップを作成します。ここでは、指定されたホトシシミが空でなければ前者の呼び
- 出し方を、空であれば后者の呼び出し方をしています。</p>
- <p>この时点で、@cache[path]
- にビットマップが格纳されていることが保证されました。これ以降は色相变化の对应处理を行っていますが、烦杂なだけで见るべき个所はありませんので、解说は省略します。</p>
- <h6></h6>
- </body>
- </html>
复制代码 |