SDL固有のエラーを表わす例外クラスです。StandardErrorを継承しています。
SDLのバージョンを表わす文字列です。"1.0.0"という形になっています。
Ruby/SDLを使う前には必ずSDL.initで初期化する必要があります。SDL.initは、 ユーザの指定したすべてのサブシステム(ビデオ、オーディオ、ジョイスティック、 タイマー、CD-ROMのいずれかあるいは全部)を初期化することができます。
SDL.init(flags)SDLを初期化します。 すべてのRuby/SDLのメソッドを呼び出す前にこの関数が呼ばれなければいけません。 flagsにはSDLのどの部分を初期化するかを指定します。
失敗すると例外SDL::Errorが発生します。
SDL.quit全てのSDLサブシステムをシャットダウンし、それらが確保したリソースをすべて解 放します。通常は自動で呼ばれるためユーザが明示的に呼びだす必要はありません。
SDLおよびRuby/SDLの仕様を理解した上で必要な場合のみ使ってください。
SDL.inited_system(flags)SDL.initedSystem(flags)これは、どのSDLサブシステムが初期化されているかを報告します。 flagsには、調べたいサブシステムの論理和を指定します (指定できるサブシステムのフラグについてはSDL.initの項を参照してください)。
初期化されているサブシステムの論理和を返します。
EXAMPLE
# SDL.inited_systemの使いかた # 全てのサブシステムの初期化状態を得ます subsystem_init = SDL.inited_system(SDL::INIT_EVERYTHING) if subsystem_init & SDL::INIT_VIDEO puts "ビデオは初期化されています。" else puts "ビデオは初期化されていません。" end # 1つのサブシステムだけをチェックします if SDL.inited_system(SDL::INIT_VIDEO) != 0 puts "ビデオは初期化されています。" else puts "ビデオは初期化されていません。" end # 2つのサブシステムをチェックします subsystem_mask = SDL::INIT_VIDEO|SDL::INIT_AUDIO; if SDL.inited_system(subsystem_mask) == subsystem_mask puts "ビデオとオーディオはどちらも初期化されています。" else puts "ビデオとオーディオのどちらか、または両方が初期化されていません。" end
See Also
SDL.getenv(var)varで指定した環境変数を得ます。
環境変数の値を文字列で返します。
SDL.putenv(string)環境変数の追加または値の変更を行います。string は "name=value" という形式を取ります。
Windows上でSDL_WINDOWIDやSDL_VIDEODRIVERといった環境変数を使って SDLの実行に影響を与えたいときに利用します。 SDLの仕様によりWindowsでは ENV を直接変更してもこれらの機能が使え ないためこのような関数が存在しま。Unix上では ENV を使うのと同じ 効果があります。
失敗時には例外SDL::Errorを発生させます。
EXAMPLE
# http://moriq.tdiary.net/20051006.html より
# Ruby/SDL と Apolloの併用
require 'phi'
require 'sdl'
# フォームの生成
form = Phi::Form.new
$terminated = false
form.on_close{ $terminated = true }
form.caption = "Ruby/SDL on Phi::Form"
# パネルをフォームの上に作る
panel = Phi::Panel.new(form)
panel.align = Phi::AL_LEFT
# WINDOWID hackを使い、パネルにSDLのウインドウをのせる
SDL.putenv("SDL_VIDEODRIVER=windib")
SDL.putenv("SDL_WINDOWID=#{panel.handle}")
form.show
# SDL本体の初期化など
SDL.init(SDL::INIT_VIDEO)
screen = SDL.setVideoMode(640, 480, 16, SDL::SWSURFACE)
# メインループ、とりあえず何もしない
unless $terminated
while event = SDL::Event2.poll
case event
when SDL::Event2::KeyDown, SDL::Event2::Quit
exit
end
end
sleep 0.05
endSDL は表示フレームバッファに対するとてもシンプルなインターフェースを 提供します。 フレームバッファはあなたが直接書くことができる オフスクリーンサーフェスとして表現されます。 スクリーンに書いたものを画面に表示させるには、 画面の必要な部分が更新されることを保証する 更新関数を呼んで下さい。
Ruby/SDL のいかなるビデオ関連メソッドを呼ぶ前に、 最初に SDL.init(SDL::INIT_VIDEO)を呼ばなければいけません。 これは SDL 内のビデオとイベントを初期化します。
アプリケーションでサウンドとビデオを共に使うときは、 サウンドデバイスをオープンする前に SDL.init(SDL::INIT_AUDIO|SDL::INIT_VIDEO) を呼ぶ必要があります。 そうしないと、Win32 の DirectX において フルスクリーン表示モードにセットすることができないでしょう。
ライブラリを初期化した後は、ビデオ表示を順番にスタートさせることができます。 最も簡単な方法は、共通のスクリーン解像度とピクセル深度を選び、 エラーをチェックしつつビデオを初期化することです。 おそらくあなたが望んだものが得られるでしょうが、 SDL はあなたが求めたモードをエミュレートし、 更新の際に変換しているかもしれません。 最もよい方法は、 望まれるものに最も近いビデオモードを 問い合わせ、 そのピクセルフォーマットに合わせて画像を 変換することです。
SDL は現在 1 ピクセル 8 bit 以上のいかなるピクセル深度もサポートしています。 8 bpp のフォーマットは 8 bit のパレットモードとしてみなされ、 12, 15, 16, 24, そして 32 bpp は 「パックドピクセル」モードとしてみなされます。 これは、個々のピクセルが RGB 各チャンネルの輝度を ピクセルのビットの中にパッキングして持っているということです。
ビデオモードを初期化した後は、 返値として得られたサーフェスに対し、他のフレームバッファのように書き込み、 いつものように更新処理を呼ぶことができます。
絵のサーフェスを表わすクラスです。
このクラスは描画される「絵」のメモリを表現しています。
メソッドおよびクラスメソッドのリスト
画面に対応するサーフェスを表わすクラスです。
このクラスは SDL::Surface のサブクラスであり、実際に画面に表示される サーフェスを表わします。
ビデオフレームバッファは SDL.set_video_mode と SDL.get_video_surface から得られます。
メソッドおよびクラスメソッドのリスト
ビデオターゲットの情報を表わすクラスです。 このクラスのインスタンスは SDL.video_info から返り値として得られます。 これは以下のメソッドを持ちます。
SDL::VideoInfo#hw_availableSDL::VideoInfo#wm_availableSDL::VideoInfo#blit_hwSDL::VideoInfo#blit_hw_CCSDL::VideoInfo#blit_hw_ASDL::VideoInfo#blit_swSDL::VideoInfo#blit_sw_CCSDL::VideoInfo#blit_sw_ASDL::VideoInfo#blit_fillSDL::VideoInfo#video_memSDL::VideoInfo#bppまずは Ruby/SDL において重要なことを先に書きます。 Ruby/SDLにおいて色はRGBAそれぞれ0から255までの値を取ります。 性能のため SDL 内部ではRGBA値を32ビット符号無し整数でパッキングします。 このRGBA値と符号無し32ビット整数との変換規則をピクセルフォーマットと 呼び、変換後の値をピクセル値と呼びます。 ピクセルフォーマットはサーフェスごとに決まっていて、 変換はSDL::Surface#map_rgb、SDL::Surface#map_rgba、 SDL::Surface#get_rgb、SDL::Surface#get_rgbaというメソッドでします。 メソッドの引数などで色を指定する場合、[231, 251, 100] というような 要素が3個の配列(RGB,A=255)、 [231, 251, 100, 128]という要素が4個の配列(RGBA)、もしくはピクセル値の いずれでも使えます。またメソッドの返り値として色情報が得られる場合は 通常ピクセル値が得られます。
以下はより基本的でより詳しい内容です。
Ruby/SDLにおける絵は、ピクセルの集合として表されます。 ピクセルと呼ばれる小さな正方形を縦横に並べ、そのそれぞれに 色をわりあてることで画像を表現します。 例えば 640x480 の絵は 307200個 = 640×480 のピクセルで表わされます。
そして、その色は光の3原色である赤(Red)、緑(Green)、青(Blue)それぞれの値 を0から255までで指定することで決めます。例えば [R,G,B] = [0,0,0] ならば黒、 [255, 255, 0]ならば黄色、[160, 32, 240]で紫、などです。
そしてこの情報をバイト列に変換して保存します。一つのピクセルに対し 8ビット、16ビット、24ビット、もしくは32ビットのメモリを割当て、 R,G,Bの 255*255*255の情報を適当にそのメモリに収まるように変換します。 このビット数をbpp(Bits Per Pixel)と呼びます。 そしてこの色の情報 -> バイト列の変換規則をピクセルフォーマットと呼びます。 また、ピクセル1個分の色データをピクセルフォーマットで変換したものを ピクセル値と呼びます。性能のため SDL 内部ではこのピクセル値を よく利用します。 それぞれのサーフェスは、このピクセルフォーマットと「絵を表わすバイト列」 の組であると解釈できます。
この色データとピクセル値の相互変換は SDL::Surface#map_rgb、SDL::Surface#get_rgbというメソッドでします。
また、各メソッドの引数で色を指定する場合は、[r, g, b]という要素が整数3個の 配列、もしくはそのサーフェスのピクセルフォーマットで変換したピクセル値の どちらでも使える場合がほとんどです。
最後にα値について解説します。この値はある画像と別の画像を重ね合わせる 時に意味のある値です。SDL.blit_surfaceなどで2つの画像が重ね合わされる場合、 通常下の画像は上の画像で完全に隠されてしまいます。しかし上の画像に α値を指定しておくと、上の画像の色と下の画像の色が混ぜ合されます。 この混ぜ合せの割合をα値と呼びます。SDLではα値は0から255までの値をとりえます。 0が完全な透明で、255が完全な不透明です。 この値はbppが32の場合には、各ピクセルごとに指定することができます。 つまりピクセル値には R,G,B のほかアルファ(Alpha)値を含めることができると いうことです。このα値を含めた変換には SDL::Surface#map_rgba、[Surface#get_rgba]を使います。 また各メソッドの引数でアルファ付きの色を指定する場合は、[r,g,b,a]という 要素が整数4個の配列を使うことが可能です。
SDL.get_video_surfaceSDL.getVideoSurfaceこのメソッドは現在の表示サーフェスを返します。 SDL が表示サーフェス上でフォーマット変換を行っている場合は、 この関数は実際のビデオサーフェスではなく、(SDL を使う側に 見せている) 変換前のサーフェスを返します。
SDL::Screenのインスタンスを返します。
失敗したときには例外SDL::Errorを発生させます。
SDL.video_infoSDL.videoInfoこの関数はビデオハードウェアに関する情報を返します。
SDL.set_video_modeの前にこれが呼ばれると、 返されたオブジェクトのbppアトリビュートには 「最も適した」ビデオモードのピクセルフォーマットが入ります。
情報をSDL::VideoInfoのインスタンスで返します。
失敗したときには例外SDL::Errorを発生させます。
See Also
SDL.video_driver_nameSDL.videoDriverNameドライバ名は "x11" や "windib" のように単なる 1 語の識別子です。
ドライバ名を文字列で返します。
ビデオがまだSDL.initで初期化されていないなら例外SDL::Errorを発生させます。
See Also
SDL.list_modes(flags)SDL.listModes(flags)与えられたビデオのフラグに対し、 利用可能な画面モードの配列を返します。
フラグはSDL.set_video_mode で使われるものと同じであり、モードが有効かどうかを決定する際に 強い役割を果たします。 SDL::HWSURFACEをフラグとして渡すと、 ハードウェアのビデオサーフェスがサポートするモードだけが返されます。
大きい方から小さい方にソートされています。 ある特定のフォーマットに対し利用可能なモードがない場合は nil を返し、 与えられたフォーマットに対しどのモードでも OK の場合は true を返します。 利用可能なモードが有限個しか存在しない場合は、 [縦方向の解像度, 横方向の解像度]という配列の配列を返します。
EXAMPLE
# 利用可能なフルスクリーンハードウェアモードを取得する
modes = SDL.list_modes(SDL::FULLSCREEN|SDL::HWSURFACE)
# 利用可能なモードがあるかどうかチェック
if modes == nil
puts "利用可能なモードがありません!"
exit 1
end
# 解像度が制限されているかどうかチェック
if modes == true
puts "全解像度が利用可能です。"
else
# 有効なモードを表示
puts "利用可能なモード"
modes.each{|w, h| puts " #{w} x #{h}"}
end
See Also
SDL.check_video_mode(w,h,bpp,flags)SDL.checkVideoMode(w,h,bpp,flags)要求されたモードがどのピクセル深度においてもサポートされていない場合は 0を返し、 あるいは与えられた横幅・高さと 要求されたサーフェス フラグ(SDL.set_video_modeを見て下さい) において利用可能な最も近いピクセル深度を返します。
ピクセル深度の値は推奨されるモードに過ぎません。 ビデオモードの設定時に 普通にあなたの望むピクセル深度を要求することができ、 SDL はシャドウビデオサーフェスを使ってそのピクセル深度を エミュレートするでしょう。
EXAMPLE
puts "640x480@16bpp のモードをチェックしています。"
bpp = SDL.check_video_mode(640, 480, 16, SDL::HWSURFACE)
if bpp == 0
puts "利用可能なモードではありません。"
exit 1
end
puts "SDL は 640x480@#{bpp}bpp を推奨します。"
screen = SDL.set_video_mode(640, 480, bpp, SDL_HWSURFACE)
See Also
SDL.setVideoMode(w,h,bpp,flags)SDL.set_video_mode(w,h,bpp,flags)指定された幅・高さ・ピクセル深度(1ピクセルのビット数)を用いて ビデオモードを設定します。 bpp が 0 ならば、現在表示されているピクセル深度として扱われます。
flags パラメータはSDL::Surface#flagsと同じです。 以下の値の OR による組み合わせが有効です。
フレームバッファのサーフェスをSDL::Screenのインスタンスで返します。
失敗したときには例外SDL::Errorを発生させます。
NOTES
SDL.set_video_modeがどのflagsをを満たすことができたかは、 返り値のサーフェスのSDL::Surface#flagsにセットされています。
bpp パラメータはピクセルごとのビット数です。 そのため、bpp が 24 の場合は 3 バイト/ピクセルの パッキングされた表現方法が使われます。 より一般的な 4 バイト/ピクセルのモードについては、 bpp が 32 の場合に使われます。 幾分奇妙ですが、15 と 16 の場合はいずれも 2 バイト/ピクセルのモードを 要求しますが、異なるピクセルフォーマットです。
See Also
SDL::Surface#lock, SDL::Surface#set_colors, SDL::Screen#flip, SDL::Screen
SDL::Screen#updateRect(x,y,w,h)SDL::Screen#update_rect(x,y,w,h)与えられた領域の画面を更新します。 矩形は画面の境界内の収まっていなければなりません。 (つまりクリッピングはされません)
x、y、w、hがすべて 0 ならば、画面全体を更新します。
この関数はselfがロックされている間は呼んでは いけません。
See Also
SDL::Screen#flipダブルバッファをサポートするハードウェアにおいて、 この関数は切替を設定して帰ってします。 ハードウェアは垂直帰線区間を待ち、 次のビデオサーフェスの blit 転送やロックが戻る前に ビデオバッファを交換します。 ダブルバッファをサポートしないハードウェアにおいては、 self.update_rect(0, 0, 0, 0) を呼ぶのと同等です。
失敗したときには例外SDL::Errorを発生させます。
See Also
SDL::Surface#set_colors(colors,firstcolor)SDL::Surface#setColors(colors,firstcolor)self が現在の表示と関連付けられたサーフェスの場合は、 表示カラーマップは要求された色で更新されます。SDL.set_video_mode フラグに SDL::HWPALETTE がセットされていた場合は、 SDL::Surface#set_colors は常にtrueを返し、 ウィンドウのカラーマップが歪められていたり、 エミュレーションの下で動いている場合でも、 パレットはあなたが望んだ通りにセットされることが保証されています。
colorsとして色情報の配列を与える必要があります。色情報とは R、G、Bそれぞれ0から255までの値を持つ要素が3個の配列です。
SDL::HWPALETTE がセットされた、パレット化された(8 bit) 画面サーフェスには 2 種類のパレット、すなわち サーフェスに対する(あるいはサーフェスからの)マッピング blit に 使われる論理パレットと、 ハードウェアが色を画面にどうマッピングするかを決定する物理パレット とがあります。 SDL::Surface#SDL_set_colors は(存在するなら)双方のパレットを変更します。 これは (SDL::LOGPAL | SDL::PHYSPAL) を flags にセットして SDL::Surface#set_palette を呼ぶのと同等です。
self がパレット化されたサーフェスではない場合は、 この関数は何もせず、false を返します。 全ての色がこのメソッドに 渡した通りにセットされた場合は、true を返します。 必ずしも全ての色エントリが与えられた通りにセットされた訳ではない場合は、 false を返すので、 実際の色パレットを決めるサーフェスパレットを見る必要があります。
EXAMPLE
# グレースケールのパレットでサーフェスを作成
# 色情報で埋める
colors = Array.new(256){|i| [i, i, i]}
# 表示サーフェスを作成
screen = SDL.set_video_mode(640, 480, 8, SDL::HWPALETTE)
# パレットのセット
screen.set_colors(colors, 0)
See Also
SDL::Surface#set_palette(flags,colors,firstcolor)SDL::Surface#setPalette(flags,colors,firstcolor)与えられた 8 ビットサーフェスに対し、パレットの一部をセットします。
SDL::HWPALETTE フラグがセットされている パレット(8ビット) の画面サーフェスには 2種類のパレットがあります。 すなわち、サーフェスからの(あるいはサーフェスに対する) blit 転送を マッピングする論理パレットと、 ハードウェアが色を画面にマッピングする方法を決定する 物理パレットです。 SDL.blit_surface は サーフェスのピクセルフォーマット間で変換が必要な場合、 サーフェスを blit 転送する際に常に論理パレットを使います。 このため、さまざまな特殊色効果 (画面のフェード・カラーフラッシュ・画面の霞み)を得るために パレットを片方だけ変更することはしばしば有用です。
この関数は SDL::LOGPAL か SDL::PHYSPAL を flags に指定することで、 論理または物理パレットのいずれかを変更することができます。 selfが現在の表示と 関連付けられているサーフェスのときは、 表示のカラーマップは要求された色で更新されます。 SDL.set_video_mode に SDL::HWPALETTE がセットされていた場合は、 このメソッドは常に true を返し、 ウィンドウのカラーマップが歪められなければならない場合や、 エミュレーション下で動いている場合であっても、 パレットにはあなたが望んだ方法でセットされることが保証されます。
colorsとして色情報の配列を与えます。色情報とは R、G、Bそれぞれ0から255までの値を持つ要素が3個の配列です。 256**3 = 16777216色が使えます。
selfがパレット化されたサーフェスでない場合は、 この関数は false を返して何もしません。 全ての色がこのメソッドに渡された通りにセットされると、 true を返します。 必ずしも全ての色エントリが与えられた通りにセットされた訳ではない場合は、 false を返すので、 実際の色パレットを決定するサーフェスパレットを見る必要があります。
EXAMPLE
# グレースケールのパレットでサーフェスを作成
# 色情報で埋める
colors = Array.new(256){|i| [i, i, i]}
# 表示サーフェスを作成
screen = SDL.set_video_mode(640, 480, 8, SDL::HWPALETTE)
# パレットのセット
screen.set_palette(SDL::LOGPAL|SDL::PHYSPAL, colors, 0)
See Also
SDL.set_gamma(redgamma,greengamma,bluegamma)SDL.setGamma(redgamma,greengamma,bluegamma)各カラーチャンネルについて、表示用の「ガンマ関数」をセットします。 ガンマは画面に表示される色の明るさ・コントラストを制御します。 ガンマ値 1.0 は単位元です。 (つまり、何の調整も行われません)
この関数は「ガンマ関数」のパラメータに基いてガンマを調整します。 SDL.set_gamma_ramp を使うと、 ガンマ調整の参照テーブルを直接指定することができます。
失敗したときには例外SDL::Errorを発生させます。
NOTES
全ての表示ハードウェアがガンマを変更することができるわけではありません。
See Also
SDL.get_gamma_rampSDL.getGammaRamp現在表示に使われているガンマ値の変換テーブルを取得します。 それぞれのテーブル(R, G, B)は 256 個の16bit符号なし整数値の配列です。
3個の「256個の16bit符号なし整数値の配列」の配列を返します。
失敗したときには例外SDL::Errorを発生させます。
NOTES
全ての表示ハードウェアがガンマを変換できるわけではありません。
See Also
SDL.set_gamma_ramp(table)SDL.setGammaRamp(table)各色チャンネルについて、表示用のガンマ参照テーブルをセットします。 引数 tables は SDL.get_gamma_ramp と同じフォーマットで、 対応するチャンネルの入力と出力間の写像を表現します。 入力は配列に対するインデックスであり、出力はそのインデックスにおける 16 ビットのガンマ値で、出力の色精度に合わせてスケーリングされます。
この関数は参照テーブルに基いてガンマを調整しますが、 SDL.set_gamma を用いて 「ガンマ関数」パラメータに基いて計算されたガンマも持つことができます。
失敗したときには例外SDL::Errorを発生させます。
See Also
SDL::Surface#map_rgb(r,g,b)SDL::Surface#mapRGB(r,g,b)RGB カラーの値をselfのピクセルフォーマットに写像し、 ピクセル値を 32bit 符号無し整数 として返します。 r、g、b は0から255までの値をとれます。
フォーマットがパレット (8ビット) を持つ場合は、 パレット内において最も近い色のインデックスが返されます。
指定されたピクセルフォーマットがαチャンネルを持つ場合は、 全て 1 のビット(完全に不透明)として返されます。
与えられたピクセルフォーマット上において、 与えられた RGB カラー値を最も良く近似するピクセル値です。 ピクセルフォーマットのピクセル深度が 32bpp より小さい場合は、 返値の使用されていない上位ビットは安全に無視することができます。 (例えば、16bpp のフォーマットでは返値は 2**16 より小さく、 8bpp では 2**8 より小さい)
SDL::Surface#map_rgba(r,g,b,a)SDL::Surface#mapRGBA(r,g,b,a)RGBA カラーの値をselfのピクセルフォーマットに写像し、 ピクセル値を 32bit 符号無し整数 として返します。 r、g、b、a は0から255までの値をとれます。
フォーマットがパレット (8ビット) を持つ場合は、 パレット内において最も近い色のインデックスが返されます。
指定されたピクセルフォーマットがαチャンネルを持たない場合は、 (パレットを持つフォーマットの中でそうであるように) α値は無視されます。
与えられたピクセルフォーマット上において、 与えられた RGBA カラー値を最も良く近似するピクセル値です。 ピクセルフォーマットのピクセル深度が 32bpp より小さい場合は、 返値の使用されていない上位ビットは安全に無視することができます。 (例えば、16bpp のフォーマットでは返値は 2**16 より小さく、 8bpp では 2**8 より小さい)
SDL::Surface#get_rgb(pixel)SDL::Surface#getRGB(pixel)selfのピクセルフォーマットによるピクセル値から RGB 各チャンネルの値を要素数3の配列で取得します。
このメソッドは RGB 各チャンネルが 8 ビット未満のピクセルフォーマットから 色チャンネルを変換する際にも 8 ビット全体 [0〜255] の範囲を使います。 (例えば、16 ビット RGB565 フォーマットにおける完全な白色は [0xf8, 0xfc, 0xf8] ではなく [0xff, 0xff, 0xff] を返します)
SDL::Surface#get_rgba(pixel)SDL::Surface#getRGBA(pixel)指定されたピクセルフォーマットに格納されたピクセルから RGBA 各チャンネルの値を要素数4の配列で取得します。
RGB 各チャンネルが 8 ビット未満のピクセルフォーマットから 色チャンネルを変換する際にも 8 ビット全体 [0〜255] の範囲を使います。 (例えば、16 ビット RGB565 フォーマットにおける完全な白色は [0xf8, 0xfc, 0xf8] ではなく [0xff, 0xff, 0xff] を返します)
サーフェスにαチャンネルがない場合は、αには 0xff (100% 不透明) が返されます。
SDL::Surface.new(flags,w,h,depth,Rmask,Gmask,Bmask,Amask)大きさが w x h の空のサーフェスを確保します。 (SDL.set_video_modeの後で呼ばれなければいけません)
depth が 8 ビットの場合は、 サーフェスに空のパレットが確保されます。 そうでない場合は、 与えられたRmask、Gmask、Bmask、Amask を使って 「パッキングされたピクセル」が作られます。 flags は作られるサーフェスのタイプを指定し、 以下の取りうる値の OR による組み合わせとなります。
SDL::Surfaceのインスタンスを返します。
失敗したときには例外SDL::Errorを発生させます。
EXAMPLE
# テクスチャ用として OpenGL に要求される、
# 個々々のピクセルのバイトが RGBA の順番で並んだ
# 32 ビットのサーフェスを生成
big_endian = ([1].pack("N") == [1].pack("L"))
if big_endian
rmask = 0xff000000
gmask = 0x00ff0000
bmask = 0x0000ff00
amask = 0x000000ff
else
rmask = 0x000000ff
gmask = 0x0000ff00
bmask = 0x00ff0000
amask = 0xff000000
end
surface = SDL::Surface.new(SDL::SWSURFACE, width, height, 32,
rmask, gmask, bmask, amask);
NOTES
αチャンネルが指定されている (つまり Amask が 0 でない) 場合は、 SDL::SRCALPHA フラグは自動的にセットされます。 サーフェスを作った後は、SDL::Surface#set_alphaを 呼ぶことでこのフラグを取り除くことができます。
See Also
SDL::Surface.new_from, SDL.set_video_mode, SDL::Surface#lock, SDL::Surface#set_alpha, SDL::Surface#set_color_key
SDL::Surface.new_from(pixels,w,h,depth,pitch,Rmask,Gmask,Bmask,Amask)与えられたピクセルデータ(pixels、 Stringのインスタンス)から SDL::Surface のインスタンスを生成します。 pixels に格納されたデータは depth のものであるとみなされます。 pitch は各スキャンラインの長さ(バイト数)です。
他のパラメータについての詳しい記述については、SDL::Surface.newを見てください。
生成されたサーフェスを返します。
失敗したときには例外SDL::Errorを発生させます。
See Also
SDL::Surface#lockピクセルに直接アクセスするためにサーフェスをロックします。 SDL::Surface#lock と SDL::Surface#unlock の呼びだしの間、 サーフェスへ直接読み書きができます。 ひとたびサーフェスへのアクセスが終了したら、 SDL::Surface#unlock を使って解放する必要があります。
サーフェスへ直接読み書きをする、ロックが必要なメソッドは 以下の通りです。
またSDL.auto_lock?が真である場合には、ロックが必要なメソッドが呼ばれた 場合自動的にロックの設定と解放をするため、このメソッドを呼ぶ必要 はありません。
すべてのサーフェスがロックを必要とする訳ではありません。 SDL::Surface#must_lock?が偽ならば いつでも読み書きすることができ、サーフェスのピクセルフォーマット は変更されません。
この時間の間にクリティカルなシステムロックが行われることがあるため、 ロック/アンロック間では、いかなる OS システムコールやライブラリコールも 呼ばれるべきではありません。
明記しておくべきことに、 SDL 1.1.8 以降ではサーフェスのロックは再帰的である、という点があります。 これは複数のサーフェスロックをかけることができるということですが、 個々のロックには対応するアンロックがなければいけません。
surface.lock # サーフェスはロックされている # ここでサーフェス上の直接ピクセルアクセス surface.lock # さらにサーフェス上の直接ピクセルアクセス surface.unlock # サーフェスはまだロックされている # 注記: バージョンが 1.1.8 以下の場合は、 # この段階でサーフェスはもうロックされていない surface.unlock # サーフェスは今アンロックされている
サーフェスのロックができなかった場合は例外SDL::Errorを返します。
SDL::Surface#unlockSDL::Surface#lockを使ってロックされたサーフェスは このメソッドでロックを解除しなければいけません。 サーフェスのロックはできるだけ早く解除されるべきです。
1.1.8 以降、サーフェスのロックは再帰的であることに注意すべきです。
See Also
SDL::Surface#must_lock?SDL::Surface#mustLock?See Also
SDL::Surface.load_bmp(filename)SDL::Surface.loadBMP(filename)Windows の BMP ファイルからサーフェスをロードします。
SDL::Surfaceのインスタンスを返します。
失敗したときには例外SDL::Errorを発生させます。
See Also
SDL::Surface#save_bmp(filename)SDL::Surface#saveBMP(filename)selfの内容をWindows の BMP ファイル filename にセーブします。
失敗したときには例外SDL::Errorを発生させます。
See Also
SDL::Surface#set_color_key(flag,key)SDL::Surface#setColorKey(flag,key)blit 転送可能なサーフェスのカラーキー(透明ピクセル)をセットし、 RLE アクセラレーションを有効または無効にします。 keyはピクセル値もしくは色を表す配列で指定できます。
RLE (Run-length encoding) アクセラレーションは、 透明ピクセル(つまりkeyと同じ値のピクセル)が 水平方向に長く続いている場合に、 画像の blit 転送を実質スピードアップさせることができます。 keyとしてピクセル値を使う場合、selfと 同じピクセルフォーマットのものでなければいけません。
flag が SDL::SRCCOLORKEY ならば、key は転送元の画像の透明色です。
flag に SDL::RLEACCEL が セットされている場合は、 SDL.blit_surface で描かれる時に、 サーフェスは RLE アクセラレーションを使って描きます。 最初にサーフェスに対して SDL.blit_surface か SDL::Surface#display_format が 呼ばれた時に、実際に RLE アクセラレーションのためエンコードされます。
flag が 0 ならば、この関数は現在のカラーキーをクリアします。
失敗したときには例外SDL::Errorを発生させます。
SDL::Surface#set_alpha(flags,alpha)SDL::Surface#setAlpha(flags,alpha)このメソッドはサーフェス単位のα値をセットしたり、 αブレンディングを有効に、また無効にするために使われます。
flags は、αブレンディングが使われるべきかどうか SDL::SRCALPHA、 また blit の際に RLE アクセラレーションを使うべきかどうか SDL::RLEACCELを指定するのに使われます。 flags はこれらの 2 つのオプションの OR による 組み合わせか、どちらか 1 つか、または 0 になり得るでしょう。 SDL::SRCALPHA がフラグとして渡されないと、 サーフェスを blit するときに全てのα情報は無視されます。 alpha パラメータはサーフェス単位のα値です。 つまり、サーフェス単位のαを使うには、サーフェスのαチャンネルは不要であり、 blit は未だ SDL::RLEACCEL によってアクセラレートされる ことが可能です。
αは以下の方法でサーフェスの blit に影響を及ぼします。
失敗したときには例外SDL::Errorを発生させます。
NOTES
この関数と SDL のαブレンディングの意味合いがバージョン 1.1.4 から変わりました。 バージョン 1.1.5 までは、α値 0 は不透明で、255 は透明とみなされていました。 これは今では反転されました。 つまり、0 (SDL::ALPHA_TRANSPARENT) は透明であり、 255 (SDL::ALPHA_OPAQUE) は不透明とみなされています。
サーフェス単位のα値 128 は特殊な場合とみなされて最適化されるため、 他の値よりもはるかに高速です。
SDL::SRCALPHA がセットされた状態での RGBA->RGBA の blit は 転送先サーフェスのαをそのまま維持することに注意して下さい。 これは、2 つの任意の RGBA サーフェスを合成して それらの「重ね合わせ」が期待されるような結果を得ることはできないということです。 転送先のαはマスクとして働きます。
また、ピクセル単位のαとサーフェス単位のαは合成できないことにも注意して下さい。 ピクセル単位のαが有効な時は必ずそちらが使われます。
See Also
SDL::Surface#map_rgba, SDL::Surface#get_rgba, SDL::Surface#display_format, SDL.blit_surface, SDL::Surface#alpha
SDL::Surface#set_clip_rect(x,y,w,h)SDL::Surface#setClipRect(x,y,w,h)サーフェスのクリッピング矩形をセットします。 このサーフェスが blit 転送の転送先である場合は、 クリッピング矩形の内部の領域だけが描画されます。
引数によって指定された矩形はサーフェスの端でクリッピングされ、 サーフェスに対するクリッピング矩形がサーフェスの端に出ないようにします。
See Also
SDL::Surface#get_clip_rectSDL::Surface#getClipRectサーフェスのクリッピング矩形を取得します。 このサーフェスが blit の転送の場合は、 クリッピング矩形の内部の領域のみが描画されます。
[x, y, w, h]という整数4個の配列を返します。
See Also
SDL.blit_surface(src,srcX,srcY,srcW,srcH,dst,dstX,dstY)SDL.blitSurface(src,srcX,srcY,srcW,srcH,dst,dstX,dstY)転送元サーフェスから転送先サーフェスへ高速 blit 転送を行います srcが転送元、dstが転送先のサーフィスとなります。 srcX、srcY、srcW、srcHがすべて0の場合はsrc 全体がコピーされます。
blit 関数はロックされたサーフェス上で呼ばれるべきではありません。
blit 操作の結果は SDL::SRCAPLHA がセットされているか否かによって 大きく変化します。 これがどのように結果に影響するかについては、 Surface#set_alpha を見て下さい。 以下の擬似コードのようにカラーキーとα属性もサーフェスの blit に作用します。
if 転送元サーフェスに SDL::SRCALPHA がセットされている
if 転送元サーフェスにαチャンネルがある (つまり Amask != 0)
ピクセル単位のα値を使い、カラーキーを無視して blit
elsif 転送元サーフェスに SDL::SRCCOLORKEY がセットされている
カラーキーとサーフェス単位のα値を使って blit
else
サーフェス単位のα値を使って blit
end
elsif 転送元サーフェスに SDL::SRCCOLORKEY がセットされている
カラーキーを使って blit
else
普通の矩形 blit
end
成功時には0を返します。 どちらかのサーフェスがビデオメモリにあり、このメソッドが -2 を返す場合は、ビデオメモリが失われたため、 画像込みでもう一度ロードして blit する必要があります。
これは DirextX5.0 の下で、 システムがあなたのフルスクリーンアプリケーションを切り換える時に発生します。 あなたがビデオメモリに再度アクセスするまでは サーフェスのロックも失敗するでしょう。
SDL::Surface#fill_rect(x,y,w,h,color)SDL::Surface#fillRect(x,y,w,h,color)与えられた矩形領域と color で 高速な塗り潰しを行います。 colorは色、ピクセルフォーマット、ピクセル値についてに書かれて いる方法で指定できます。
色の値がα値を含んでいる場合は、塗り潰し先は単にそのα情報で「塗り潰され」、 ブレンディングは起こりません。 塗り潰し先にクリッピング矩形がある場合(SDL::Surface#set_clip_rectに よってセットされます)は、この関数はクリッピング矩形と 指定した矩形が 重なった領域でクリッピングされます。
失敗したときには例外SDL::Errorを発生させます。
SDL::Surface#display_formatSDL::Surface#displayFormatこのメソッドはselfを表示サーフェス上への高速 blit に適するように、 ビデオフレームバッファのピクセルフォーマットとパレットの 新しいサーフェスを作ります。
ハードウェアによるカラーキーやαの blit 転送のアクセラレーション の利点を得たい場合は、 このメソッドを呼ぶ前にカラーキーとα値をセットしておくべきです。
変換後のサーフェスを返します。
変換に失敗するか、メモリを使い切った時は例外SDL::Errorを返します。
SDL::Surface#display_format_alphaSDL::Surface#displaFormatAlphaこのメソッドはselfを表示サーフェス上への高速 blit に適するように、 ビデオフレームバッファのピクセルフォーマット・色にαチャンネルを加えた 新しいサーフェスにコピーします。
ハードウェアによるカラーキーやαの blit 転送のアクセラレーション の利点を得たい場合は、 このメソッドを呼ぶ前にカラーキーとα値をセットしておくべきです。
selfに SDL::SRCCOLORKEY フラグがセットされている 場合は、この関数はカラーキーをαチャンネルに変換することに使うことが できます。 そうして生成されたサーフェスは、 カラーキーに一致するピクセルでは透明(α=0)に、 他の場所では不透明(α=255)になります。
変換後のサーフェスを返します。
変換に失敗するか、メモリを使い切った時は例外SDL::Errorを返します。
SDL::Surface#flagsサーフェスにセットされているフラグを返します。以下のフラグが サポートされています。
以上のフラグの OR を取ったものが返されます。
See Also
SDL::Surface#wSee Also
SDL::Surface#hSee Also
SDL::Surface#pixelsNOTES
これにアクセスするにはロックが必要です。
See Also
SDL::Surface#flags, SDL::Surface#Rmask, SDL::Surface#Gmask, SDL::Surface#Bmask, SDL::Surface#Amask, SDL::Surface#bpp
SDL::Surface#RmaskSDL::Surface#GmaskSDL::Surface#BmaskSDL::Surface#AmaskSDL::Surface#colorkeySDL::Surface#alphaSee Also
SDL::Surface#bppSDL::Surface.load(filename)画像のファイルをサーフェスにロードします。 もし画像の形式が透明ピクセルをサポートしているならば、サーフェスに カラーキーがセットされます。
対応しているフォーマットはBMP, PNM (PPM/PGM/PBM), XPM, XCF, PCX, GIF, JPEG, TIFF, TGA, PNG, LBMです。
失敗したときには例外SDL::Errorを発生させます。
このメソッドを使うには SDL_image が必要です。
NOTES
SDL_image のコンパイル時に使えるように指定しなかったフォーマット のファイルはこのメソッドではロードできません。
SDL::Surface#put_pixel(x, y, color)SDL::Surface#putPixel(x, y, color)SDL::Surface#[x, y] = colorサーフェスの(x, y)で指定した位置にcolorのピクセルを描画します。 colorとしてピクセル値もしくは色を表わす配列が利用できます。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
See Also
SDL::Surface#get_pixel(x, y)SDL::Surface#getPixel(x, y)SDL::Surface#[x, y]サーフェスの(x, y)で指定した位置のピクセル値を得ます。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
See Also
SDL::Surface#put(src, x, y)selfの(x, y)で指定した位置にサーフェス src を高速 blit 転送 します。
これは、
SDL.blit_surface(src, 0, 0, src.w, src.h, self, x, y)
と同じです。
See Also
SDL::Surface#copy_rect(x,y,w,h)SDL::Surface#copyRect(x,y,w,h)サーフェス self の (x, y, w, h) で指定される矩形を コピーした新しいサーフェスを作り、返します。
失敗したときには例外SDL::Errorを発生させます。
NOTES
このメソッドは内部で SDL.blit_surface を呼ぶため、ロックされたサーフェス上で 呼ばれるべきではありません。
SDL.auto_lock?SDL.autoLock?SDL.auto_lockSDL.autoLockサーフェスに対するロックが必要な操作をするとき、 Ruby/SDLが自動的にロック/アンロックするか どうかを true/false で返します。デフォルトでは true です。
このメソッドを使うには SGE が必要です。
SDL.auto_lock_onSDL.autoLockON自動ロックを利用するようにします。これを呼ぶとSDL.auto_lock?が真に なります。
このメソッドを使うには SGE が必要です。
See Also
SDL.auto_lock_offSDL.autoLockOFF自動ロックを利用しないようにします。これを呼ぶとSDL.auto_lock?が偽に なります。
このメソッドを使うには SGE が必要です。
See Also
SDL.auto_lock=(locking)SDL.autoLock=(locking)自動ロックを使うかどうかを設定します。 SDL.auto_lock = true は SDL.auto_lock_on と同じで、 SDL.auto_lock = false は SDL.auto_lock_off と 同じです。
このメソッドを使うには SGE が必要です。
SDL.transform(src,dst,angle,xscale,yscale,px,py,qx,qy,flags)srcを回転縮小拡大したものをdstに描画します。 angleは回転角度(単位はラジアンではなく度)、xscale、yscaleは それぞれX方向とY方向の倍率、(px, py) は srcにおける回転の 中心で、その点がdstの(qx, qy)にくるように描画されます。 また、flagsとしては以下の値のORを取ったものを与えます。
このメソッドを使うには SGE が必要です。
NOTES
最適なパフォーマンスを得るために、src と dst は同じピクセル フォーマットを使い、また24bpp以外のフォーマットを使ってください。
SDL::Surface#set_clip_rect で設定したクリッピング矩形は src および dst で有効です。
SDL::TRANSFORM_AA を使う場合は、高さ方向および幅方向にそれぞれ 1ピクセルづつ間引かれます(パフォーマンスを良くするためです)。
srcが32bpp RGBA フォーマットの場合には、SDL::TRANSFORM_SAFEを使うべきです。
このメソッドはアルファブレンディングは一切しませんが、アルファチャンネルの 値は保ちます。もし、アルファブレンディング、カラーキーの効果のある 回転縮小拡大描画をしたい場合はSDL.transform_blitをかわりに利用してください。
See Also
SDL.transform_blit, SDL::Surface#transform_surface, SDL::Surface.new
SDL.transform_blit(src,dst,angle,xscale,yscale,px,py,qx,qy,flags)SDL.transformBlit(src,dst,angle,xscale,yscale,px,py,qx,qy,flags)回転縮小拡大描画をします。引数の意味などは SDL.transform と同様です。 SDL.transform との違いは src に設定されたカラーキー(抜き色) およびアルファブレンディングが有効になることです。
このメソッドを使うには SGE が必要です。
SDL::Surface#draw_line(x1,x2,y1,y2,color)SDL::Surface#drawLine(x1,x2,y1,y2,color)(x1, y1)から(x2, y2)までの直線を color で指定した色で 描画します。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
SDL::Surface#draw_aa_line(x1,x2,y1,y2,color)SDL::Surface#drawAALine(x1,x2,y1,y2,color)(x1, y1)から(x2, y2)までの直線を color で指定した色で アンチエイリアスして描画します。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_line_alpha(x1,x2,y1,y2,color,alpha)SDL::Surface#drawLineAlpha(x1,x2,y1,y2,color,alpha)(x1, y1)から(x2, y2)までの直線を color で指定した色、 alphaで指定したα値で描画します。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_aa_line_alpha(x1,x2,y1,y2,color,alpha)SDL::Surface#drawAALineAlpha(x1,x2,y1,y2,color,alpha)(x1, y1)から(x2, y2)までの直線を color で指定した色、 alphaで指定したα値でアンチエイリアスをかけて描画します。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_rect(x,y,w,h,color)SDL::Surface#drawRect(x,y,w,h,color)(x, y)が左上の点でwが幅、hが高さの長方形を color で 指定した色で描画します。中を塗り潰しません。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_rect_alpha(x,y,w,h,color,alpha)SDL::Surface#drawRectAlpha(x,y,w,h,color,alpha)(x, y)が左上の点でwが幅、hが高さの長方形を color で 指定した色、alpha で指定したα値で描画します。中を塗り潰しません。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_filled_rect_alpha(x,y,w,h,color,alpha)SDL::Surface#drawFilledRectAlpha(x,y,w,h,color,alpha)(x, y)が左上の点でwが幅、hが高さの中を塗り潰した 長方形を color で指定した色、alpha で指定したα値で描画します。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_circle(x,y,r,color)SDL::Surface#drawCircle(x,y,r,color)中心 (x,y)、半径 rの円を color で指定した色で描画します。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
SDL::Surface#draw_filled_circle(x,y,r,color)SDL::Surface#drawFilledCircle(x,y,r,color)中心 (x,y)、半径 rの円を color で指定した色で中を 塗り潰して描画します。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_aa_circle(x,y,r,color)SDL::Surface#drawAACircle(x,y,r,color)中心 (x,y)、半径 rの円を color で指定した色で アンチエイリアスをかけて描画します。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_aa_filled_circle(x,y,r,color)SDL::Surface#drawAAFilledCircle(x,y,r,color)中心 (x,y)、半径 rの円を color で指定した色で 中を塗り潰しアンチエイリアスをかけて描画します。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_circle_alpha(x,y,r,color,alpha)SDL::Surface#drawCircleAlpha(x,y,r,color,alpha)中心 (x,y)、半径 rの円を color で指定した色、 alphaで指定したアルファ値で描画します。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_filled_circle_alpha(x,y,r,color,alpha)SDL::Surface#drawFilledCircleAlpha(x,y,r,color,alpha)中心 (x,y)、半径 rの中を塗り潰した円を color で指定した色、 alphaで指定したアルファ値で描画します。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_aa_circle_alpha(x,y,r,color,alpha)SDL::Surface#drawAACircleAlpha(x,y,r,color,alpha)中心 (x,y)、半径 rの円を color で指定した色、 alphaで指定したアルファ値でアンチエイリアスで描画します。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_ellipse(x,y,rx,ry,color)SDL::Surface#drawEllipse(x,y,rx,ry,color)中心 (x,y)、X方向の半径 xr、Y方向の半径 ry の楕円を color で指定した色で描画します。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
SDL::Surface#draw_filled_ellipse(x,y,rx,ry,color)SDL::Surface#drawFilledEllipse(x,y,rx,ry,color)中心 (x,y)、X方向の半径 xr、Y方向の半径 ry の楕円を color で指定した色で中を 塗り潰して描画します。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_aa_ellipse(x,y,rx,ry,color)SDL::Surface#drawAAEllipse(x,y,rx,ry,color)中心 (x,y)、X方向の半径 xr、Y方向の半径 ry の楕円を color で指定した色で アンチエイリアスをかけて描画します。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_aa_filled_ellipse(x,y,rx,ry,color)SDL::Surface#drawAAFilledEllipse(x,y,rx,ry,color)中心 (x,y)、X方向の半径 xr、Y方向の半径 ry の楕円を color で指定した色で 中を塗り潰しアンチエイリアスをかけて描画します。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_ellipse_alpha(x,y,rx,ry,color,alpha)SDL::Surface#drawEllipseAlpha(x,y,rx,ry,color,alpha)中心 (x,y)、X方向の半径 xr、Y方向の半径 ry の楕円を color で指定した色、 alphaで指定したアルファ値で描画します。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_filled_ellipse_alpha(x,y,rx,ry,color,alpha)SDL::Surface#drawFilledEllipseAlpha(x,y,rx,ry,color,alpha)中心 (x,y)、X方向の半径 xr、Y方向の半径 ry の中を塗り潰した楕円を color で指定した色、 alphaで指定したアルファ値で描画します。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_aa_ellipse_alpha(x,y,rx,ry,color,alpha)SDL::Surface#drawAAEllipseAlpha(x,y,rx,ry,color,alpha)中心 (x,y)、X方向の半径 xr、Y方向の半径 ry の楕円を color で指定した色、 alphaで指定したアルファ値でアンチエイリアスで描画します。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_bezier(x1,y1,x2,y2,x3,y3,x4,y4,level,color)SDL::Surface#drawBezier(x1,y1,x2,y2,x3,y3,x4,y4,level,color)(x1, y1) から (x4, y4)までのベジエ曲線を (x2, y2) と (x3, y3) をコントロールポイントとして colorで指定した色で 描画する。leve は曲線の近似度で、4から7を使うと良い。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
SDL::Surface#draw_aa_bezier(x1,y1,x2,y2,x3,y3,x4,y4,level,color)SDL::Surface#drawAABezier(x1,y1,x2,y2,x3,y3,x4,y4,level,color)(x1, y1) から (x4, y4)までのベジエ曲線を (x2, y2) と (x3, y3) をコントロールポイントとして colorで指定した色でアンチエイリアスして 描画する。leve は曲線の近似度で、4から7を使うと良い。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_bezier_alpha(x1,y1,x2,y2,x3,y3,x4,y4,level,color,alpha)SDL::Surface#drawBezierAlpha(x1,y1,x2,y2,x3,y3,x4,y4,level,color,alpha)(x1, y1) から (x4, y4)までのベジエ曲線を (x2, y2) と (x3, y3) をコントロールポイントとして colorで指定した色、alphaで指定したα値で 描画する。leve は曲線の近似度で、4から7を使うと良い。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#draw_aa_bezier_alpha(x1,y1,x2,y2,x3,y3,x4,y4,level,color,alpha)SDL::Surface#drawAABezierAlpha(x1,y1,x2,y2,x3,y3,x4,y4,level,color,alpha)(x1, y1) から (x4, y4)までのベジエ曲線を (x2, y2) と (x3, y3) をコントロールポイントとして colorで指定した色、alphaで指定したα値でアンチエイリアス 描画する。leve は曲線の近似度で、4から7を使うと良い。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。
このメソッドを使うには SGE が必要です。
See Also
SDL::Surface#transform_surface(bgcolor,angle,xscale,yscale,flags)SDL::Surface#transformSurface(bgcolor,angle,xscale,yscale,flags)self を拡大縮小変形したサーフェスを生成し返す。 回転によって生じた隙間は bgcolor で指定した色で埋められる。 引数 angle、xscale、yscale、flags は SDL.transform と同じ意味である。
新しいサーフェスは self と同じ bpp およびピクセルフォーマットを 持つ。
このメソッドを使うにはサーフェスをロックする必要があります。 SDL.auto_lock?が真の場合はシステムが自動的にロック/アンロックします。 失敗したときには例外SDL::Errorを発生させます。
このメソッドを使うには SGE が必要です。
See Also
イベント処理によってあなたのアプリケーションはユーザーからの 入力を受け取ることができます。 イベント処理は次のメソッドを呼ぶことで、(ビデオと一緒に)初期化されます。
SDL.init(SDL::INIT_VIDEO)
内部的には、SDL は処理されるまで待機している全てのイベントをイベントキューに 格納します。
SDL::Event2.poll や SDL::Event2.wait のようなメソッドを使うことで、 待機している入力イベントを見たり、処理することができます。
Ruby/SDLにおけるイベント処理の鍵は、SDL::Event2のサブクラス群です。 イベントキュー自身はSDL::Event2(のサブクラス)のインスタンスの列と みなすことができます。それらのオブジェクトはSDL::Event2.pollを使って キューから読みだされ、 そしてそこに格納された情報の処理をアプリケーションがします。
SDL::Event2のサブクラスは以下の通りです。
イベントクラスには以下の二つの用途があります。
キューからイベントを読み出すには、 SDL::Event2.poll を使います。 ここでは、 SDL::Event2.poll を使った例を示します。
while event = SDL::Event2.poll
SDL::Event2.poll はイベントキューから次のイベントを 取り出して、キューから削除します。キューにイベントがないときは nil を返し、それ以外の場合は上に挙げたイベントクラスのインスタンス を返します。
次に、イベントの種類を判別するために case〜when 文を使います。
case event
次に、どの種類のイベントを知りたいのかということと、起こった イベントの種類を知らなければいけません。 ここでは、アプリケーション内のマウスポインタの動きを知りたいとします。 求めているイベントに対応するクラスはSDL::Event2::MouseMotion であることがわかります。case〜when 文の when の所にクラスを書くと、 そのクラスのインスタンスをcaseに与えたときに分岐することうぃ利用します
when SDL::Event2::MouseMotion
ここでは event は SDL::Event2::MouseMotion のインスタンスなので そのメソッドを使って情報を得ることができます。
puts "マウスカーソルが移動するイベントを受信しました。"
puts "カーソルの位置は(#{event.x}, #{event.y})です。"
else puts "ハンドルしていないイベントです!" end
end puts "イベントキューは空です。"
イベントキューにイベントを送ることもできますので、 イベントキューを双方向通信に利用することもできます。 SDL::Event2.pushでイベントキューにイベントを送ることができます。 偽の入力イベントを作り出したりするために使うことができます。 ユーザイベントは Ruby/SDL では利用できません。
イベントを取り扱うためのクラスです。実際のクラスはこのクラスのサブクラス として表されます。
Event2という名前は互換性のためのものです。これが気にいらない場合は、 ライブラリ読み込みの直後に
module SDL remove_const :Event2 Event = Event2 end
と書いてください。これで SDL::Event という名前で SDL::Event2 に アクセスできます。
アプリケーションの可視性に関するイベントのクラスです。
マウスカーソルのウインドウの出入り、 キーボードフォーカスの得失、および 最小化/アイコン化されたり元に戻ったときに発生します。
上のいずれが生じたのかは SDL::Event2::Active#state でわかります。
NOTES
このイベントは、最初にウィンドウが作成されたときには発生しません。
キーボードを押したときに発生するイベントのクラスです。
キーボードを離したときに発生するイベントのクラスです。
SDL::Event2.poll現在留まっているイベントを取り出し、イベントがあるときはそのイベントを、 無いときは nil を返します。イベントが取り出されたときは キューからそのイベントを削除します。
EXAMPLE
while event = SDL::Event2.poll #キューに残っているイベントがなくなるまでループ
case event # 適切なイベントタイプを処理
when SDL::Event2::KeyDown # キー押下イベントを処理
puts "あ! キーを押しましたね"
when SDL::Event2::MouseMotion
.
.
.
else # 未処理のイベントを報告
puts 私にはよく分からないイベントです!"
end
end
See Also
SDL::Event2.wait次の利用可能なイベントが来るまで無限に待機し、 イベントが来たらそのイベントを返します。
返したイベントはキューから削除されます。
イベントを待っている間にエラーがあった場合は例外 SDL::Error を 発生させます。
See Also
SDL::Event2.push(event)event で指定したイベントをイベントキューにプッシュします。
失敗したときには例外SDL::Errorを発生させます。
NOTES
デバイス入力イベントをキューにプッシュしても、 SDL 内のデバイスの状態は変わりません。
See Also
SDL::Event2.app_stateSDL::Event2.appStateSee Also
SDL::Event2.enable_unicodeSDL::Event2.enableUNICODENOTES
変換が有効なのはキーダウンイベントのみです。 キーリリースイベントは変換されません。
See Also
SDL::Event2.disable_unicodeSDL::Event2.disableUNICODESDL::Event2.enable_unicode?SDL::Event2.enableUNICODE?SDL::Event2::Active#gainSee Also
SDL::Event2::Active#stateマウスカーソルがウインドウの外に出たり(gain=false)、ウインドウ内に 入ったり(gain=true)したときは、SDL::Event2::APPMOUSEFOCUS を返します。
アプリケーションがキーボードフォーカスを得たり(gain=true) 失ったり(gain=false)したときは、SDL::Event2::APPINPUTFOCUS を 返します。これは通常他のアプリケーションがアクティブに なったときに発生します。
アプリケーションが最小化/アイコン化されたり(gain=false) 元に戻ったとき(gain=true)には SDL::Event2::APPACTIVE を返します。
See Also
SDL::Event2::KeyDown#pressSee Also
SDL::Event2::KeyDown#symSee Also
SDL::Event2::KeyDown#modSee Also
SDL::Key.mod_state
SDL::Event2::KeyDown#unicodeSDL::Event2.enable_unicode によって UNICODE 変換が有効にされた時には、 キーの押下に対応する UNICODE 文字を返します。 文字の上位 9 ビットが 0 の場合は、 ASCII 文字に対応しています。
変換が有効でない場合には0 を返します。
SDL::Event2::KeyUp#pressSee Also
SDL::Event2::KeyUp#symSDL::Event2::KeyUp#modSee Also
SDL::Key.mod_state