Ruby/SDL は SDL を Ruby から利用するための 拡張ライブラリです。
SDL の薄いラッパを目指しているため、API は SDL のものと一対一に対応 しているものが多い。よってSDLのドキュメントが非常に参考になるでしょう。
すべての関数/クラス/モジュール/定数はSDLモジュールの下にあります。
また、メソッドの返り値が記述されていない場合は常にnilを返すものとします。
Ruby/SDLでは、上に挙げたような機能を持っています。 ここでは、その概要を解説します。詳しくは個々の項を見てください。
SDL全体の初期化をするSDL.initなどです。
ウィンドウを開き、そこに描画をするための機能です。 矩形転送、基本的な図形(直線など)の描画、拡大縮小回転、パレット 操作などの機能があります。
キーボード、マウスなどから入力を受けとるための機能です。
効果音、BGMなどを演奏するための機能です。
Windowのタイトルなどを設定したり、入力をつかんだりする機能です。
CDを演奏するための機能です。Audio機能とはまったく別個の機能として 実現されています。フェードイン/フェードアウトといった複雑な演奏は できません。
パッド/スティックからの入力を処理する機能です。Event機能とも 連携して動作します。
独自形式のBitmap font/True Type Font/bdf fontの描画ができます。 True True Font と bdf fontは日本語の描画も可能です。
MPEGの再生ができます。再生中は通常の描画はできないなどかなり 機能に制限があります。
SDL.initが呼ばれてからの経過時間をはかるSDL.getTicks と指定ミリ秒停止するSDL.delayがあります。
SDL特有のエラーはすべて SDL::Error という例外を発生させること で通知されます。
エラー通知用のクラスです。SDL固有のエラーはこのクラスを用いて通知されます。
StandardError
SDLを使う前には必ずSDL.initでSDLを初期化する必要があります。
SDL.init(flag)
SDLを初期化します。 Ruby/SDLの他のメソッドを呼ぶ前にこのメソッドを呼ばなくてはなりません。 flagでどの部分を初期化するかを指定します。 以下の定数の論理和を取ったものを指定してください。
初期化が失敗した場合はSDL::Error例外が発生します。
# 例 # Video機能とオーディオ機能を初期化する SDL.init(SDL::INIT_VIDEO|SDL::INIT_AUDIO)
SDL.quit
SDLをシャットダウンします。SDLが確保したデバイスやウィンドウなどの リソースをすべて解放します。 Ruby/SDLがプログラム終了時に自動的にこのメソッドを呼ぶので、 通常はこれを使う必要はありません。
SDLの仕様を理解して必要な場合のみ使ってください。
これを呼んだ後SDLの機能を一切使わないでください。そのようなことは 想定されていません。
SDL.initedSystem(flag)
SDL.inited_system(flag)
指定した部分が初期化されているかどうかをチェックします。 flagはSDL.initのものと同じです。
返り値は初期化されている部分に対応する値の論理和です。
# 例 # 全部の初期化状態を調べる init = SDL.initedSystem(SDL::INIT_EVERYTHING) # ビデオ機能が使えるかを見る if (init & SDL::INIT_VIDEO) != 0 puts("ビデオ機能は初期化されています") else puts("ビデオ機能は初期化されていません") end
SDL.getenv(name)
SDL.putenv(envstr)
環境変数を変更する。
Windows上ででSDL_WINDOWIDやSDL_VIDEODRIVERといった環境変数を使って SDLの実行に影響を与えたいときに利用する。 SDLの仕様によりWindowsでは ENV を直接変更してもこれらの機能が使え ないためこのような関数が存在する。
引数として"name=value"という形式の文字列を与える。
Unix上では組み込み定数ENVを利用するのと同じです。 失敗時は例外SDL::Errorを発生します。
# 例 # 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
end
これは、画面描画および表示をする機能を提供します。以下のメソッドを利用する前 にSDL.initでビデオ機能の初期化(SDL::INIT_VIDEO)をする必要があります。
SDL::Surfaceという、画像を収めておくメモリ(これをサーフェスと呼びます) を表現するクラスが存在し、ビデオ機能はこれを用いて抽象化されています。 つまり、画面上に表示される画像やファイルから読みこんだ画像は共に このクラスを用いて表され、これに対し描画することでさまざまな 画像効果を得ることができます。
画面に対応するサーフェスは特にSDL::Surfaceの サブクラスであるSDL::Screenというクラスで表現されます。 ここに描きこんだ画像は直接表示には反映されません。 SDL::Screen.updateRectやSDL::Screen.flipを呼ぶことで その時点での内容が表示されます。 このような仕組みはダブルバッファリングなどと呼ばれます。 「描画が完了していない状態」を表示しないことで表示のちらつきが減ります。
SDL.setVideoModeで、ビデオのモード(解像度やbppなど)を設定すること でSDL::Screenのインスタンスを得ることができます。
その他、ガンマ値の設定や、サーフェスごとにパレットを変更したりする 機能が存在します。
一部の機能は、SGEライブラリやSDL_imageが必要です。 bppはbit per pixelの略称です。
以下にいくつかの例を挙げます。
# 例 ビデオ機能の初期化 require 'sdl' # SDLの初期化 SDL.init(SDL::INIT_VIDEO) # 画面の初期化 # ソフトウェアサーフェス、 解像度 640x480、 16bitカラーモードで初期化 screen = SDL.setVideoMode(640, 480, 16, SDL::SWSURFACE) # 例3 BMPファイルのロードおよび表示 # 指定したファイルを読みこんで画面に表示する関数 def display_bmp(screen, fname) # ファイルをロードする image = SDL::Surface.loadBMP(fname) SDL.blitSurface(image, 0, 0, 0, 0, screen, 0, 0) screen.updateRect(0, 0, image.w, image.h) end
SDL.getVideoSurface
SDL.get_video_surface
SDL.setVideoMode(w,h,bpp,flags)
SDL.set_video_mode(w,h,bpp,flags)
指定された画面の幅、高さ、bppの値でビデオモードを設定する。 bppが0の場合、現在のディスプレイのbppの値が使用される。 成功したときはSDL::Screenのオブジェクトを返す。 失敗したときはSDL::Error例外が生じる。 flagsの意味は以下のとおり。
SDL::SWSURFACE
システムのメモリ内にバッファをとる。
SDL::HWSURFACE
ビデオメモリにバッファをとる。
SDL::FULLSCREEN
フルスクリーンモードで動作しようとする。
SDL::DOUBLEBUF
ダブルバッファリングができるようにする。 SDL::Screen#flipをよびだすことによってバッファの切り替え ができる。
SDL::ANYFORMAT
SDLライブラリは要求されたbppでの設定を試みるが、それと異なっても利用 可能なモードがあればそれを返してくる。デフォルトの動作では、要求され たモードが直接サポートされていない場合はエミュレーションを行う。
SDL::OPENGL
OpenGLを利用した3D描画を有効にする。 この機能を利用するときは、SDL::Surfaceを通した描画は 使うべきではない。
flagはそのほかにもある。さらに詳しく知る必要があれば SDLのドキュメントを見てください。
# 例 最良のビデオモードで初期化 # 16bitモードを指定したいが、使えなければ他のモードでも可 screen = SDL.setVideoMode(640, 480, 16 SDL::SWSURFACE|SDL::ANYFORMAT) puts "640x480 at #{screen.bpp} bpp のモードに設定しました"
SDL.checkVideoMode(w,h,bpp,flags)
SDL.check_video_mode(w,h,bpp,flags)
指定されたビデオモードがサポートされているかどうかを調べる。 指定サイズのスクリーンがどんなデプスでもサポートされていない場合は 0を返し、いくつかのデプスで指定されたサイズがサポートされていれば、 引数で指定したものに最も近いbppの値を返す。もしこの値がビデオモード を設定する際に指定したものと違っている場合は、SDL.setVideoModeは 成功するが、指定されたモードはシャドウサーフェスを使ってエミュレー トされることになる。
SDL.checkVideoModeに対する引数は、SDL.setVideoModeで使用するもの と同じである。
SDL.listModes(flags)
SDL.list_modes(flags)
利用可能な解像度を返す。 利用可能な解像度が存在しないときはnil返す。またあらゆる解像度が使用可 能なときはtrueを返す。利用可能な解像度が1個以上あるときはその解像度を の横方向、縦方向の解像度の値をおさめた配列が1個以上入っている配列を返す。
引数のflagは、SDL.setVideoModeで使用するものと同じである。
SDL.videoDriverName
SDL.video_driver_name
初期化したビデオドライバーに対応する文字列を返す( x11 や windib など)。 初期化していなかったりしたら例外を発生させる。
# 例 SDL.init(SDL::INIT_VIDEO) puts "ドライバは #{SDL.videoDriverName} です"
SDL.setGamma(redgamma,greengamma,bluegamma)
SDL.set_gamma(redgamma,greengamma,bluegamma)
SDL.getGammaRamp
SDL.get_gamma_ramp
SDL.setGammaRamp(table)
SDL.set_gamma_ramp(table)
SDL.autoLock
SDL.auto_lock
SDL.autoLock?
SDL.auto_lock?
SGEが必要
サーフィスのロックが必要なとき自動的にロックしてくれるかどうか を返す。デフォルトはtrue。
さらに詳しいことを知りたければSDL::Surface#lockを見てください。
SDL.autoLock=(autolocking)
SDL.auto_lock=(autolocking)
SDL.autoLockON
SDL.auto_lock_on
SDL.autoLockOFF
SDL.auto_lock_off
SDL.videoInfo
SDL.video_info
SDL::VideoInfo#hw_available
ハードウェアサーフェスを作ることは可能かどうか
SDL::VideoInfo#wm_available
ウィンドウマネージャが利用できるかどうか
SDL::VideoInfo#blit_hw
ハードウェア間の blit はアクセラレーションが有効かどうか
SDL::VideoInfo#blit_hw_CC
ハードウェア間のカラーキー blit はアクセラレーションが有効かどうか
SDL::VideoInfo#blit_hw_A
ハードウェア間のα blit はアクセラレーションが有効かどうか
SDL::VideoInfo#blit_sw
ソフトウェアからハードウェアへの blit はアクセラレーションが有効かどうか
SDL::VideoInfo#blit_sw_CC
ソフトウェアからハードウェアへのカラーキー blit はアクセラレーション が有効かどうか
SDL::VideoInfo#blit_sw_A
ソフトウェアからハードウェアへのα blit はアクセラレーションが有効かどうか
SDL::VideoInfo#blit_fill
色の塗潰しはアクセラレーションが有効かどうか
SDL::VideoInfo#video_mem
ビデオメモリの総容量
SDL::VideoInfo#bpp
bpp
SDL.blitSurface(src,srcX,srcY,srcW,srcH,dst,dstX,dstY)
SDL.blit_surface(src,srcX,srcY,srcW,srcH,dst,dstX,dstY)
srcで指定されたSurfaceからdstで指定されたSurfaceへの高速なblit を行う。
srcX,srcY,srcW,srcHにすべて0を指定した場合はsrc全体をblitする。
失敗時には例外SDL::Errorが生じる。
ロックしたサーフェスに対してこれをつかってはいけない。
SDL.blitSurface2(src,srcRect,dst,dstRect)
SDL.blit_surface2(src,src_rect,dst,dst_rect)
blitSurface2(src,[0,32,32,32],dst,[100,200]) のように使う。 また、srcRect、dstRectとして x,y,z,wという名前のメソッドを 持つオブジェクトでその領域を指定することもできる。
srcRectにnilを指定した場合はsrc全体をblitする。
SDL.rotateXYScaled(src,dst,x,y,angle,xscale,yscale)
SDL.rotate_xy_scaled(src,dst,x,y,angle,xscale,yscale)
SGEが必要
SGEのsge_rotate_xyscaled関数とはsrcとdstの順序が入れ替わっていることに 注意するように。下の2つの関数も同様である。 これは、blitSurfaceに合わせたためである。 また、この仕様は変更する可能性がある。
また、ColorKeyは無視される。
このメソッドは古いためあまり使うべきではない。 SDL.transformやSDL.transformBlitを使うべきである。
SDL.rotateScaled(src,dst,x,y,angle,scale)
SDL.rotate_scaled(src,dst,x,y,angle,scale)
SDL.rotate(src,dst,x,y,angle)
SDL.rotateScaledBlit(src,dst,x,y,angle,scale)
SDL.rotate_scaled_blit(src,dst,x,y,angle,scale)
SDL.rotateBlit(src,dst,x,y,angle)
SDL.rotate_blit(src,dst,x,y,angle)
SDL.transform(src,dst,angle,xscale,yscale,px,py,qx,qy,flags)
0
普通に回転させる
SDL::TRANSFORM_SAFE
srcとdstのフォーマットが違ってもうまくいくようにする。多少遅い。
SDL::TRANSFORM_AA
通常より遅いがみためは良くなる。
SDL::TRANSFORM_TMAP
テクスチャーマッピングを使用する。ほんの少しはやいが、みためが少し 悪くなる。px、py、flagsは無視される。
SDL.transformBlit(src,dst,angle,xscale,yscale,px,py,qx,qy,flags)
SDL.transform_blit(src,dst,angle,xscale,yscale,px,py,qx,qy,flags)
SGEが必要
回転縮小拡大を描画する。 引数はSDL.transformと同じ。 SDL.transformとの違いはこのメソッドがカラーキーによる 抜きが有効になることである。
画像を保持するクラスです。
Object
SDL::Surface.new(flag,w,h,format)
SDL::Surface.new(flags,w,h,depth,Rmask,Gmask,Bmask,Amask)
新しいSDL::Surfaceのインスタンスを生成する。 SDL.setVideoModeを呼びだした後でしか使用してはならない。
formatとしてはSDL::Surfaceのインスタンスを与え、指定した サーフィスと同じbppのサーフィスを生成する。
また、[RGBA]maskを明示して指定することもできる。 その場合は、マシンのエンディアンに注意してください。
flagには以下のフラグのORを取ったものを与えることができる。
SDL::SWSURFACE
システムメモリ内にサーフィスをとる。
SDL::HWSURFACE
ビデオメモリ内にサーフィスを取ろうとする。
SDL::SRCCOLORKEY
システムメモリかビデオメモリのうちハードウェアによる透明色機能を 利用できるほうにサーフィスを取ろうとする。
SDL::SRCALPHA
システムメモリかビデオメモリのうちハードウェアによるアルファを利用 できるほうにサーフィスを取ろうとする。
SDL::Surface.new_from(pixels,w,h,depth,pitch,Rmask,Gmask,Bmask,Amask)
与えられたピクセルデータからSDL::Surfaceのインスタンスを 作成する。
pixelsはStringのインスタンスとして与える。pitchは各スキャンラインの 長さ(バイト数)です。[RGBA]maskやdepthは明示的に指定しなければ ならない。
SDL::Surface.loadBMP(filename)
SDL::Surface.load_bmp(filename)
SDL::Surface.load(filename)
SDL_imageが必要
指定されたファイル名の画像ファイルからSDL::Surface のインスタンスを作成する。 BMP,PPX,XPM,PCX,GIF,JPEG,PNG,TGAなどをロードできる。
SDL::Surface#saveBMP(filename)
SDL::Surface#save_bmp(filename)
SDL::Surface#displayFormat
SDL::Surface#display_format
selfをビデオフレームバッファのピクセルフォーマットと色に合わせた 新しいサーフェスにコピーして返す。 新しいsurfaceを使うことによってscreenへの高速なblitができる。
カラーキーとα値に対するblitのアクセラレーションを利用したいのならば、 この関数の呼び出しに先立ってカラーキーとα値の設定を行っておく 必要がある。
SDL::Surface#displayFormatAlpha
SDL::Surface#display_format_alpha
SDL::Surface#setColorKey(flag,key)
SDL::Surface#set_color_key(flag,key)
blit可能なサーフェスに対してカラーキー(透明なピクセル)を設定する。
flagにSDL::SRCCOLORKEYを指定すると、そのピクセルはblitでsrcになる ほうの透明ピクセルを示していることになる。 通常はこのフラグを使う。
flagにSDL::RLEACCELとORをとって指定すると、RLEを使って高速なblitを しようとする。
flagが0の場合は、color keyをクリアする。
SDL::Surface#fillRect(x,y,w,h,color)
SDL::Surface#fill_rect(x,y,w,h,color)
SDL::Surface#setClipRect(x,y,w,h)
SDL::Surface#set_clip_rect(x,y,w,h)
SDL::Surface#getClipRect
SDL::Surface#get_clip_rect
SDL::Surface#setAlpha(flag,alpha)
SDL::Surface#set_alpha(flag,alpha)
アルファの設定をする。 flagにSDL::SRCALPHAを設定することでアルファが有効になる。 SDL::RLEACCELとORをとって指定するとRLEによる高速化が有効になる。 alphaはアルファ値を意味し、0で透明、255で通常と同等となる。
flagに0を指定すればアルファは無効となる。
SDL::Surface#h
SDL::Surface#w
SDL::Surface#format
SDL::Surface#put(image,x,y)
SDL::Surface#copyRect(x,y,w,h)
SDL::Surface#copy_rect(x,y,w,h)
SDL::Surface#lock
getPixel,setPixelやdrawLine等のメソッドを使って描画する ための準備をする。
SDL::Surface#mustLock?がtrueを返したインスタンスのみこの操作 が必要となる。
SDL::Surface#unlockを呼びだすまで、他ライブラリの呼びだしや OSに対する操作をしてはならない。
SDL.autoLockがtrueを返すときはライブラリが自動的にこの操作を してくれるのでこのメソッドを呼びだす必要はない。
SDL::Surface#unlock
SDL::Surface#mustLock?
SDL::Surface#must_lock?
SDL::Surface#getPixel(x,y)
SDL::Surface#get_pixel(x,y)
SDL::Surface#[x,y]
SGEが必要 ロックが必要
x,yの位置のピクセルの値を返す。
SDL::Surface#putPixel(x,y,color)
SDL::Surface#put_pixel(x,y,color)
SDL::Surface#[x, y] = color
SGEが必要 ロックが必要
x,yの位置のピクセルの値をpixelにする。 つまり、x,yの位置にpixelの色の点を打つ。
SDL::Surface#drawLine(x1,y1,x2,y2,color)
SDL::Surface#draw_line(x1,y1,x2,y2,color)
SGEが必要 ロックが必要
色がcolorの線を(x1,y1)から(x2,y2)まで描く。
SDL::Surface#drawRect(x,y,w,h,color)
SDL::Surface#draw_rect(x,y,w,h,color)
SGEが必要 ロックが必要
色がcolorの長方形を描く。中はぬりつぶさない。
SDL::Surface#drawCircle(x,y,r,color)
SDL::Surface#draw_circle(x,y,r,color)
SGEが必要 ロックが必要
色がcolorの円を描く。中はぬりつぶさない。
SDL::Surface#drawFilledCircle(x,y,r,color)
SDL::Surface#draw_filled_circle(x,y,r,color)
SGEが必要 ロックが必要
色がcolorの円を描き、中をぬりつぶす。
SDL::Surface#drawEllipse(x,y,rx,ry,color)
SDL::Surface#draw_ellipse(x,y,rx,ry,color)
SGEが必要 ロックが必要
色がcolorの楕円を描く。中はぬりつぶさない。
SDL::Surface#drawFilledEllipse(x,y,rx,ry,color)
SDL::Surface#draw_filled_ellipse(x,y,rx,ry,color)
SGEが必要 ロックが必要
色がcolorの楕円を描く。中をぬりつぶす。。
SDL::Surface#drawEllispe(x,y,rx,ry,color)
SDL::Surface#draw_ellispe(x,y,rx,ry,color)
SDL::Surface#drawFilledEllispe(x,y,rx,ry,color)
SDL::Surface#draw_filled_ellispe(x,y,rx,ry,color)
SDL::Surface#drawAALine(x1,y1,x2,y2,color)
SDL::Surface#draw_aa_line(x1,y1,x2,y2,color)
SGEが必要 ロックが必要
色がcolorのアンチエリアスした線を(x1,y1)から(x2,y2)まで描く。
SDL::Surface#drawAACircle(x,y,r,color)
SDL::Surface#draw_aa_circle(x,y,r,color)
SGEが必要 ロックが必要
色がcolorのアンチエリアスした円を描く。
SDL::Surface#drawAAFilledCircle(x,y,r,color)
SDL::Surface#draw_aa_filled_circle(x,y,r,color)
SGEが必要 ロックが必要
色がcolorのアンチエリアスした円を描き、中をぬりつぶす。
SDL::Surface#drawAAEllipse(x,y,rx,ry,color)
SDL::Surface#draw_aa_ellipse(x,y,rx,ry,color)
SGEが必要 ロックが必要
色がcolorのアンチエリアスした楕円を描く。
SDL::Surface#drawLineAlpha(x1,y1,x2,y2,color,alpha)
SDL::Surface#draw_line_alpha(x1,y1,x2,y2,color,alpha)
SGEが必要 ロックが必要
アルファブレンドした直線を描く。
SDL::Surface#drawRectAlpha(x,y,w,h,color,alpha)
SDL::Surface#draw_rect_alpha(x,y,w,h,color,alpha)
SGEが必要 ロックが必要
アルファブレンドした長方形を描く。
SDL::Surface#drawFilledRectAlpha(x,y,w,h,color,alpha)
SDL::Surface#draw_filled_rect_alpha(x,y,w,h,color,alpha)
SGEが必要 ロックが必要
アルファブレンドした長方形を描き、中をぬりつぶす。
SDL::Surface#drawCircleAlpha(x,y,r,color,alpha)
SDL::Surface#draw_circle_alpha(x,y,r,color,alpha)
SGEが必要 ロックが必要
アルファブレンドした円を描く。
SDL::Surface#drawFilledCircleAlpha(x,y,r,color,alpha)
SDL::Surface#draw_filled_circle_alpha(x,y,r,color,alpha)
SGEが必要 ロックが必要
アルファブレンドした円を描き、中をぬりつぶす。
SDL::Surface#drawEllipseAlpha(x,y,rx,ry,color,alpha)
SDL::Surface#draw_ellipse_alpha(x,y,rx,ry,color,alpha)
SGEが必要 ロックが必要
アルファブレンドした楕円を描く。
SDL::Surface#drawFilledEllipseAlpha(x,y,rx,ry,color,alpha)
SDL::Surface#draw_filled_ellipse_alpha(x,y,rx,ry,color,alpha)
SGEが必要 ロックが必要
アルファブレンドした楕円を描き、中をぬりつぶす。
SDL::Surface#drawAALineAlpha(x1,y1,x2,y2,color,alpha)
SDL::Surface#draw_aa_line_alpha(x1,y1,x2,y2,color,alpha)
SGEが必要 ロックが必要
アルファブレンド、アンチエリアスした直線を描く。
SDL::Surface#drawAACircleAlpha(x,y,r,color,alpha)
SDL::Surface#draw_aa_circle_alpha(x,y,r,color,alpha)
SGEが必要 ロックが必要
アルファブレンド、アンチエリアスした円を描く。
SDL::Surface#drawAAEllipseAlpha(x,y,rx,ry,color,alpha)
SDL::Surface#draw_aa_ellipse_alpha(x,y,rx,ry,color,alpha)
SGEが必要 ロックが必要
アルファブレンド、アンチエリアスした楕円を描く。
SDL::Surface#drawBezier(x1,y1,x2,y2,x3,y3,x4,y4,level,color)
SDL::Surface#draw_bezier(x1,y1,x2,y2,x3,y3,x4,y4,level,color)
SGEが必要 ロックが必要
(x1,y1)から(x4,y4)へのベジエ曲線を(x2,y2),(x3,y3)をコントロール ポイントとしてcolorで指定した色で描く。levelは4から7くらいが普通。
SDL::Surface#drawAABezier(x1,y1,x2,y2,x3,y3,x4,y4,level,color)
SDL::Surface#draw_aa_bezier(x1,y1,x2,y2,x3,y3,x4,y4,level,color)
SGEが必要 ロックが必要
(x1,y1)から(x4,y4)へのアンチエイリアスしたベジエ曲線を(x2,y2), (x3,y3)をコントロールポイントとしてcolorで指定した色で描く。 levelは4から7くらいが普通。
SDL::Surface#drawBezierAlpha(x1,y1,x2,y2,x3,y3,x4,y4,level,color,alpha)
SDL::Surface#draw_bezier_alpha(x1,y1,x2,y2,x3,y3,x4,y4,level,color,alpha)
SGEが必要 ロックが必要
(x1,y1)から(x4,y4)へのベジエ曲線を(x2,y2), (x3,y3)をコントロールポイントとしてcolorで指定した色、alphaで指定した アルファ値で描く。levelは4から7くらいが普通。
SDL::Surface#drawAABezierAlpha(x1,y1,x2,y2,x3,y3,x4,y4,level,color,alpha)
SDL::Surface#draw_aa_bezier_alpha(x1,y1,x2,y2,x3,y3,x4,y4,level,color,alpha)
SGEが必要 ロックが必要
(x1,y1)から(x4,y4)へのアンチエイリアスしたベジエ曲線を(x2,y2), (x3,y3)をコントロールポイントとしてcolorで指定した色、alphaで指定した アルファ値で描く。levelは4から7くらいが普通。
SDL::Surface#rotateScaledSurface(angle,scale,bgcolor)
SDL::Surface#rotate_scaled_surface(angle,scale,bgcolor)
SGEが必要
これは、selfをangle度傾け、scale倍した画像を持つSurfaceのインスタンスを 生成するメソッドである。回転によって生じる隙間はbgcolorで埋められる。
このメソッドは古いためあまり使うべきではない。 SDL::Surface#transformSurfaceを使ったほうがよい。
SDL::Surface#rotateSurface(angle,bgcolor)
SDL::Surface#rotate_surface(angle,bgcolor)
SDL::Surface#transformSurface(bgcolor,angle,xscale,yscale,flags)
SDL::Surface#transform_surface(bgcolor,angle,xscale,yscale,flags)
SDL::Surface#mapRGB(r,g,b)
SDL::Surface#map_rgb(r,g,b)
SDL::Surface#mapRGBA(r,g,b,a)
SDL::Surface#map_rgba(r,g,b,a)
SDL::Surface#getRGB(pixel)
SDL::Surface#get_rgb(pixel)
SDL::Surface#getRGBA(pixel)
SDL::Surface#get_rgba(pixel)
SDL::Surface#bpp
SDL::Surface#colorkey
SDL::Surface#alpha
SDL::Surface#flags
SDL::Surface#Rmask
SDL::Surface#Gmask
SDL::Surface#Bmask
SDL::Surface#Amask
SDL::Surface#pixels
SDL::Surface#setPalette(flag,colors,firstcolor)
SDL::Surface#set_palette(flag,colors,firstcolor)
8bppのサーフェスにパレットを設定する。
SDL.setVideoModeでflagにSDL::HWPALETTE、bppに8を指定して得た スクリーンサーフィスには、2つのパレットがある。一方は論理パレットで SDL.blitSurfaceなどで画像を転送するときに用いられる。 他方は物理パレットで、実際に画面に表示されるときの色を決定する。
flagに SDL::LOGPALを指定すると論理パレットを、SDL::PHYSPALを指定すると 物理パレットを変更する。両方のORを取ると、両方変更する。
実際のパレットの値の設定の仕方は以下の通りである。 0から255のうちXからYまでを変更したいとする。 まずcolorsにはY-X+1の要素を持つ配列を指定する。 その各々の要素は3つの要素を持った配列を入れる。 それにはr,g,bの値を入れ色を指定する。そしてfirstcolorにはXを指定する。
パレットの変更が成功したときはtrue、失敗したときはfalseを返す。
SDL::Surface#setColors(colors,firstcolor)
SDL::Surface#set_colors(colors,firstcolor)
SDL::Surface#getPalette
SDL::Surface#get_palette
パレットを配列で返す。その内容は以下の様になっている。
[ [r0,g0,b0],[r1,g1,b1], ... ,[r255,g255,b255] ]
サーフィスがパレットを持っていないときはnilを返す。
SDL::Surface#makeCollisionMap
SGEが必要
collision map を生成する。 あらかじめSDL::Surface#setColorKey を呼んでおく必要がある。SDL::Surface#setColorKeyで設定された 不透明部分が衝突判定に利用される。
SDL::CollisionMapのインスタンスを返す。
ここにかきこまれた画像が画面に表示される。 このクラスはただ一つしか生成できないようになっていて、 SDL.setVideoModeによってのみ生成される。 実際には、このようなクラスは存在せず、SDL::Surfaceに以下の特異 メソッドを追加したオブジェクトである。
SDL::Screen#updateRect(x,y,w,h)
SDL::Screen#update_rect(x,y,w,h)
SDL::Screen#flip
このクラスの機能はすべてSDL::Surfaceにうつされた。そちらを使用したほうが よい。このクラスは互換性のために残してある。
SDL_PixelFormatのラッパークラス。 SDL::Surface#formatで取得できる。
SDLでは、16bit colorのsurfaceと32bitのsurfaceというように複数の画像の形式が 共存できる。よってその画像を操作するため、その形式に関する情報が 必要となる。PixelFormatのインスタンスが表しているものはそれである。
通常色を表すためにはr,g,bの値が使われるが、それをsurfaceの内部形式に従った ひとつの値にするためにこれを用いる。逆の変換もできる。
このライブラリ内ではこれによって指定された値をもちいて色を指定する。
また、配列を用いて色を表すこともできる。これは r,g,b の値を [r,g,b]で表すものである。
Object
なし
SDL::PixelFormat#mapRGB(r,g,b)
SDL::PixelFormat#mapRGBA(r,g,b,a)
SDL::PixelFormat#getRGB(pixel)
SDL::PixelFormat#getRGBA(pixel)
SDL::PixelFormat#bpp
SDL::PixelFormat#colorkey
SDL::PixelFormat#alpha
SGEが必要
1ドットごとの衝突判定をするための情報を表わすクラス。 これでふたつの画像が重なっているかどうかを簡単に判定できる。
SDL::Surface#makeCollisionMap によってのみインスタンスが得られる。
SDL::CollisionMap#boundingBoxCheck(x1, y1, w1, h1, x2, y2, w2, h2)
SDL::CollisionMap#collisionCheck(x1, y1, collisionMap, x2, y2)
self が (x1,y1) に描画され、collisionMapが (x2,y2) に描画された としたとき、そのふたつの画像の不透明部分が重なるかどうかを 判定する。
内部で自動的にSDL::CollisionMap#boundingBoxCheckを呼ぶ。
SDL::CollisionMap#boundingBoxCheck(x1, y1, collisionMap, x2, y2)
SDL::CollisionMap#clear(x1, y1, w, h)
SDL::CollisionMap#set(x1, y1, w, h)
イベントをとりあつかうクラス
Object
SDL::Event.new
SDL::Event.appState
SDL::Event.app_state
現在のアプリケーションの状態を返す。返値は以下の値のORをとったもの。
SDL::Event::APPMOUSEFOCUS SDL::Event::APPINPUTFOCUS SDL::Event::APPACTIVE
SDL::Event.enableUNICODE
SDL::Event.enable_unicode
SDL::Event.disableUNICODE
SDL::Event.disable_unicode
SDL::Event.enableUNICODE?
SDL::Event.enable_unicode?
SDL::Event#poll
SDL::Event#wait
SDL::Event#type
格納されているイベントがいかなる種類のものであるかを返す。 その種類は以下の定数で示される。
SDL::Event::ACTIVEEVENT SDL::Event::KEYDOWN SDL::Event::KEYUP SDL::Event::MOUSEMOTION SDL::Event::MOUSEBUTTONDOWN SDL::Event::MOUSEBUTTONUP SDL::Event::JOYAXISMOTION SDL::Event::JOYBALLMOTION SDL::Event::JOYHATMOTION SDL::Event::JOYBUTTONDOWN SDL::Event::JOYBUTTONUP SDL::Event::QUIT SDL::Event::SYSWMEVENT SDL::Event::VIDEORESIZE
SDL::Event#info
SDL::Event#keyPress?
SDL::Event#key_press?
SDL::Event#keySym
SDL::Event#key_sym
SDL::Event#keyMod
SDL::Event#key_mod
SDL::Event#gain?
SDL::Event#appState
SDL::Event#app_state
ACTIVEEVENTイベントでのイベントの種類を返す。 その内容は以下のいずれか。
SDL::Event::APPMOUSEFOCUS SDL::Event::APPINPUTFOCUS SDL::Event::APPACTIVE
SDL::Event#mouseX
SDL::Event#mouse_x
SDL::Event#mouseY
SDL::Event#mouse_y
SDL::Event#mouseXrel
SDL::Event#mouse_xrel
SDL::Event#mouseYrel
SDL::Event#mouse_yrel
SDL::Event#mouseButton
SDL::Event#mouse_button
マウスイベントでどのボタンのイベントであるかをかえす。 それは以下の定数でしめされる。
SDL::Mouse::BUTTON_LEFT 左ボタン SDL::Mouse::BUTTON_MIDDLE 中ボタン SDL::Mouse::BUTTON_RIGHT 右ボタン
SDL::Event#mousePress?
SDL::Event#mouse_press?
イベントを取り扱うためのクラスその2。 こちらのクラスのほうがSDL::Eventより使いやすいでしょう。
Object
SDL::Event2.poll
現在イベントキュー内で処理待ちしているイベントがないかをしらべ、 ひとつでもあればそのイベントに対応するクラスのインスタンスを返す。 ひとつもなければnilを返す。 返すインスタンスに対応するクラスは以下の通り。
SDL::Event2::Active SDL::Event2::KeyDown SDL::Event2::KeyUp SDL::Event2::MouseMotion SDL::Event2::MouseButtonDown SDL::Event2::MouseButtonUp SDL::Event2::JoyAxis SDL::Event2::JoyBall SDL::Event2::JoyHat SDL::Event2::JoyButtonUp SDL::Event2::JoyButtonDown SDL::Event2::Quit SDL::Event2::SysWM SDL::Event2::VideoResize
これらのクラスはすべてSDL::Event2のサブクラスである。
SDL::Event2.wait
SDL::Event2.push(event)
SDL::Event2.new
SDL::Event2.appState
SDL::Event2.app_state
SDL::Event2.enableUNICODE
SDL::Event2.enable_unicode
SDL::Event2.disableUNICODE
SDL::Event2.disable_unicode
SDL::Event2.enableUNICODE?
SDL::Event2.enable_unicode?
なし。
SDL::Event2.poll,SDL::Event2.waitはSDL::Event2のサブクラスのインスタンスを返します。 そのクラスは以下の通りである。
ウィンドウ内のマウス/キーボードのフォーカスの出入りによって生じるイベント。
SDL::Event2::Active#gain
SDL::Event2::Active#state
イベントの種類を返す。
SDL::Event::APPMOUSEFOCUS マウスフォーカス SDL::Event::APPINPUTFOCUS キーボードフォーカス SDL::Event::APPACTIVE アイコン化/アイコン化解除
キーの押しさげで生じるイベント。
SDL::Event2::KeyDown#press
SDL::Event2::KeyDown#sym
SDL::Event2::KeyDown#mod
SDL::Event2::KeyDown#unicode
キーを離したときに生じるイベント。
SDL::Event2::KeyUp#press
SDL::Event2::KeyUp#sym
SDL::Event2::KeyUp#mod
マウスを動かしたときに生じるイベント。SDL::Mouse.warpでもこの イベントが生じる。
SDL::Event2::MouseMotion#state
SDL::Event2::MouseMotion#x
SDL::Event2::MouseMotion#y
SDL::Event2::MouseMotion#xrel
SDL::Event2::MouseMotion#yrel
マウスのボタンを押し下げたときに生じるイベント。
SDL::Event2::MouseButtonDown#button
どのボタンを押したのかを返す。
SDL::Mouse::BUTTON_LEFT SDL::Mouse::BUTTON_MIDDLE SDL::Mouse::BUTTON_RIGHT
SDL::Event2::MouseButtonDown#press
SDL::Event2::MouseButtonDown#x
SDL::Event2::MouseButtonDown#y
マウスのボタンを離したときに生じるイベント。
SDL::Event2::MouseButtonUp#button
どのボタンを離したのかを返す。
SDL::Mouse::BUTTON_LEFT SDL::Mouse::BUTTON_MIDDLE SDL::Mouse::BUTTON_RIGHT
SDL::Event2::MouseButtonUp#press
SDL::Event2::MouseButtonUp#x
SDL::Event2::MouseButtonUp#y
アナログスティックを動かしたときに生じるイベント。 SDL::Joystickの内容も参考になると思われる。
SDL::Event2::JoyAxis#which
SDL::Event2::JoyAxis#axis
SDL::Event2::JoyAxis#value
トラックボールを動かしたときに生じるイベント。
SDL::Event2::JoyBall#which
SDL::Event2::JoyBall#ball
SDL::Event2::JoyBall#xrel
SDL::Event2::JoyBall#yrel
十字キーの入力があったときに生じるイベント。
SDL::Event2::JoyHat#which
SDL::Event2::JoyHat#hat
SDL::Event2::JoyHat#value
キーの入力状態。内容は以下の通り。
SDL::Joystick::HAT_CENTERED SDL::Joystick::HAT_UP SDL::Joystick::HAT_RIGHT SDL::Joystick::HAT_DOWN SDL::Joystick::HAT_LEFT SDL::Joystick::HAT_RIGHTUP SDL::Joystick::HAT_RIGHTDOWN SDL::Joystick::HAT_LEFTUP SDL::Joystick::HAT_LEFTDOWN
ジョイスティックのボタンが離されたときに生じるイベント。
SDL::Event2::JoyButtonUp#which
SDL::Event2::JoyButtonUp#button
SDL::Event2::JoyButtonUp#press
ジョイスティックのボタンが押し下げられたときに生じるイベント。
SDL::Event2::JoyButtonDown#which
SDL::Event2::JoyButtonDown#button
SDL::Event2::JoyButtonDown#press
アプリケーションを終了しようとしたとき、つまりウィンドウの終了ボタンを 押したときなどに生じるイベント。
プラットフォームに依存したウィンドウ関係のイベント。 このメソッドからその情報を取りだす手段は今のところ用意されていない。
ウィンドウの大きさを変えたときに生じるイベント。 SDL.setVideoModeのflagsにSDL::RESIZABLEを与えたときのみこのイベント が生じる。
SDL::Event2::VideoResize#w
SDL::Event2::VideoResize#h
キーボードのキーに対応する定数を定義しているモジュール キーボードのキーの状態を知るための関数もこの中にある。
SDL::Key.scan
SDL::Key.press?(key)
SDL::Key.modState
SDL::Key.mod_state
修飾キー(CTRL,ATL,など)の状態を返す。 返り値は以下の定数でORをとったもので表される。
SDL::Key::MOD_NONE SDL::Key::MOD_LSHIFT SDL::Key::MOD_RSHIFT SDL::Key::MOD_LCTRL SDL::Key::MOD_RCTRL SDL::Key::MOD_LALT SDL::Key::MOD_RALT SDL::Key::MOD_LMETA SDL::Key::MOD_RMETA SDL::Key::MOD_NUM SDL::Key::MOD_CAPS SDL::Key::MOD_MODE SDL::Key::MOD_RESERVED SDL::Key::MOD_CTRL = SDL::Key::MOD_LCTRL|SDL::Key::MOD_RCTRL SDL::Key::MOD_SHIFT = SDL::Key::MOD_LSHIFT|SDL::Key::MOD_RSHIFT SDL::Key::MOD_ALT = SDL::Key::MOD_LALT|SDL::Key::MOD_RALT SDL::Key::MOD_META = SDL::Key::MOD_LMETA|SDL::Key::MOD_RMETA
SDL::Key.enableKeyRepeat(delay,interval)
SDL::Key.enable_key_repeat(delay,interval)
SDL::Key.disableKeyRepeat
SDL::Key.disable_key_repeat
SDL::Key.getKeyName(key)
SDL::Key.get_key_name(key)
マウス関連の定数と関数を定義しているモジュール
SDL::Mouse.state
マウスの状態を配列の形で返します。 配列の内容は
[ x , y , pressLButton? , pressMButton? , pressRButton? ]
となっています。
SDL::Mouse.warp(x,y)
SDL::Mouse.show
SDL::Mouse.hide
SDL::Mouse.setCursor(bitmap,white,black,transparent,inverted,hot_x=0,hot_y=0)
SDL::Mouse.set_cursor(bitmap,white,black,transparent,inverted,hot_x=0,hot_y=0)
音をだしたりするのに使うモジュール ボリュームは0から128が有効である。 このモジュールの機能を使うためには、SDL_mixerライブラリが必要である。 このモジュール内の機能を使うためには、SDL.initでSDL::INIT_AUDIOを 有効にしなければならない。
SDL::Mixer.open(frequency=Mixer::DEFAULT_FREQUENCY,format=Mixer::DEFAULT_FORMAT,cannels=Mixer::DEFAULT_CHANNELS,chunksize=4096)
SDL::Mixer.spec
初期化したオーディオの性能を配列で返す。 その内容は、
[ rate,format,channels ]
SDL::Mixer.allocateChannels(numchannels)
SDL::Mixer.allocate_channels(numchannels)
Ruby/SDLで利用できるチャンネルの数を動的に変更する。 もし指定したチャンネルの数が指定まえのものより小さければ それより上のチャンネルでの再生は止まる。
これは新しく確保できたチャンネルの数を返す。
SDL::Mixer.playChannel(channel,wave,loop)
SDL::Mixer.play_channel(channel,wave,loop)
指定したchannelでwaveを演奏する。 channelに-1を指定すると、あいているchannelが適当にえらばれる。 loops指定した回数繰り返す。 loopsが-1のときは際限なくくりかえす。 loopsが0のときは一度のみ演奏する。
どのチャンネルを演奏に利用したかを返す。
SDL::Mixer.play?(channel)
SDL::Mixer.setVolume(channel,volume)
SDL::Mixer.set_volume(channel,volume)
指定したchannelのボリュームを設定する。 channel=-1を指定するとすべてのchannelに対しボリュームを指定する。
volume=-1とすると、現在のボリュームが返る。
SDL::Mixer.halt(channel)
SDL::Mixer.pause(chennel)
SDL::Mixer.resume(channel)
SDL::Mixer.pause?(channel)
SDL::Mixer.playMusic(music,loops)
SDL::Mixer.play_music(music,loops)
SDL::Mixer.fadeInMusic(music,loops,ms)
SDL::Mixer.fade_in_music(music,loops,ms)
SDL::Mixer.setVolumeMusic(volume)
SDL::Mixer.set_volume_music(volume)
SDL::Mixer.haltMusic
SDL::Mixer.halt_music
SDL::Mixer.fadeOutMusic(ms)
SDL::Mixer.fade_out_music(ms)
SDL::Mixer.pauseMusic
SDL::Mixer.pause_music
SDL::Mixer.resumeMusic
SDL::Mixer.resume_music
SDL::Mixer.rewindMusic
SDL::Mixer.rewind_music
SDL::Mixer.pauseMusic?
SDL::Mixer.pause_music?
SDL::Mixer.playMusic?
SDL::Mixer.play_music?
Waveをあらわすクラス
Object
SDL::Mixer::Wave.load(filename)
SDL::Mixer::Wave#setVolume(volume)
SDL::Mixer::Wave#set_volume(volume)
音楽(.mod .s3m .it .xm .mid .mp3 .ogg)を表す。 ただしmidiファイルやOggVorbis、MP3を演奏するためにはそのための設定が必要。
Object
SDL::Mixer::Music.load(filename)
Window関連の処理をまとめたモジュール
SDL::WM.caption
captionの文字列を配列で返してくる。 内容は、
[ ウィンドウのタイトル , アイコンのタイトル ]
SDL::WM.setCaption(title,icon)
SDL::WM.set_caption(title,icon)
SDL::WM.icon=(iconImage)
SDL::WM.icon=(icon_image)
SDL::WM.iconify
SDL::Screen#toggleFullScreen
SDL::Screen#toggle_fullscreen
CDROMドライブを表すクラス
CD#numTrack等の情報はCD#statusを呼びだすことによって更新される。
ここではCDの位置、演奏時間の長さを表すためにフレームという単位を用いる。 1frame=2Kであり、 通常の音楽CDにおいて75フレーム=1秒である。
Object
SDL::CD.numDrive
SDL::CD.num_drive
SDL::CD.indexName(drive)
SDL::CD.index_name(drive)
SDL::CD.open(drive)
SDL::CD#status
currentTrack,currentFrame,numTracks,trackType,trackLenght の情報を更新する。 現在のCDの状態を返す。その内容は以下のとおり。
TRAYEMPTY STOPPED PLAYING PAUSED ERROR
SDL::CD#play(start,length)
SDL::CD#playTrack(start_track,start_frame,ntracks,nframes)
SDL::CD#play_track(start_track,start_frame,ntracks,nframes)
CDをstart_trackのstart_frameから、ntracks先のトラックのnframeのところ まで演奏する。 なお、このライブラリ内ではトラックのインデックスは0からはじまる。 このメソッドはSDL::CD#statusを呼びだしたあとに呼びださな ければならない。
例 cd.playTrack(0,0,1,0) # 最初のトラックを演奏する。 cd.playTrack(1,0,0,SDL::CD::FPS*15) # 2トラック目を最初から15秒演奏する。
SDL::CD#pause
SDL::CD#resume
SDL::CD#stop
SDL::CD#eject
SDL::CD#numTracks
SDL::CD#num_tracks
SDL::CD#currentTrack
SDL::CD#current_track
SDL::CD#currentFrame
SDL::CD#current_frame
SDL::CD#trackType(track)
SDL::CD#track_type(track)
指定したトラックがなんであるかを返す。その値は以下のとおり。
SDL::CD::AUDIO_TRACK SDL::CD::DATA_TRACK
SDL::CD#trackLength(track)
SDL::CD#track_length(track)
一つのジョイスティックを表すクラス
Object
SDL::Joystick.pall
SDL::Joystick.pall=(polling)
SDL::Joystick.num
SDL::Joystick.indexName(index)
SDL::Joystick.index_name(index)
SDL::Joystick.open(index)
SDL::Joystick.open?(index)
SDL::Joystick.updateAll
SDL::Joystick.update_all
SDL::Joystick#index
SDL::Joystick#numAxes
SDL::Joystick#num_axes
SDL::Joystick#numBalls
SDL::Joystick#num_balls
SDL::Joystick#numButtons
SDL::Joystick#num_buttons
SDL::Joystick#axis(axis_index)
SDL::Joystick#hat(hat_index)
いわゆる十字キーの入力状態を返す。その内容は以下のとおり。
SDL::Joystick::HAT_CENTERED SDL::Joystick::HAT_UP SDL::Joystick::HAT_RIGHT SDL::Joystick::HAT_DOWN SDL::Joystick::HAT_LEFT SDL::Joystick::HAT_RIGHTUP SDL::Joystick::HAT_RIGHTDOWN SDL::Joystick::HAT_LEFTUP SDL::Joystick::HAT_LEFTDOWN
SDL::Joystick#button(button_index)
SDL::Joystick#ball(ball_index)
ビットマップフォントを表すクラス。利用にはSGEが必要。
Object
SDL::BMFont.open(filename,flags)
SDL::BMFont::TRANSPARENT
setColorKeyで透明色を適当に設定する
SDL::BMFont::SFONT
sfontを使う
SDL::BMFont#setColor
SDL::BMFont#set_color
SDL::BMFont#height
SDL::BMFont#width
SDL::BMFont#textout(surface,string,x,y)
bdfフォントを表わすクラス。日本語も利用可能。
Object
SDL::Kanji.open(filename,size)
SDL::Kanji#add(filename)
SDL::Kanji#setCodingSystem(sys)
SDL::Kanji#set_coding_system
SDL::Kanji#textwidth(text)
SDL::Kanji#width
SDL::Kanji#height
SDL::Kanji#put(surface,text,x,y,r,g,b)
SDL::Kanji#putTate(surface,text,x,y,r,g,b)
SDL::Kanji#put_tate(surface,text,x,y,r,g,b)
TrueTypeフォントを表すクラス。利用にはSDL_ttfが必要。
Object
SDL::TTF.init
SDL::TTF.open(filename,size,index=0)
TrueTypeFontをファイルから読み出し、そのサイズをsizeで指定する。
indexはそのフォントが複数のfaceを持っている場合にどのfaceを 使うかを指定するものである。この機能はSDL_ttf 2.0.4以降で 使用可能である。
SDL::TTF#style
SDL::TTF#style=(style)
フォントのスタイルを設定する。指定できるのは以下の定数でORをとったもの。
SDL::TTF::STYLE_NORMAL SDL::TTF::STYLE_BOLD SDL::TTF::STYLE_ITALIC SDL::TTF::STYLE_UNDERLINE
SDL::TTF#textSize(text)
SDL::TTF#text_size(text)
SDL::TTF#faces
SDL::TTF#fixedWidth?
SDL::TTF#fixed_width?
SDL::TTF#familyName
SDL::TTF#family_name
SDL::TTF#styleName
SDL::TTF#style_name
SDL::TTF#height
SDL::TTF#ascent
SDL::TTF#descent
SDL::TTF#lineSkip
SDL::TTF#line_skip
SDL::TTF#drawSolidUTF8(dest,text,x,y,r,g,b)
SDL::TTF#draw_solid_utf8(dest,text,x,y,r,g,b)
SDL::TTF#drawBlendedUTF8(dest,text,x,y,r,g,b)
SDL::TTF#draw_blended_utf8(dest,text,x,y,r,g,b)
SDL::TTF#drawShadedUTF8(dest,text,x,y,fg_r,fg_g,fg_b,bg_r,bg_g,bg_b)
SDL::TTF#draw_shaded_utf8(dest,text,x,y,fg_r,fg_g,fg_b,bg_r,bg_g,bg_b)
SDL::TTF#renderSolidUTF8(text,r,g,b)
SDL::TTF#render_solid_utf88(text,r,g,b)
SDL::TTF#renderBlendedUTF8(text,r,g,b)
SDL::TTF#render_blended_utf8(text,r,g,b)
SDL::TTF#renderShadedUTF8(text,fg_r,fg_g,fg_b,bg_r,bg_g,bg_b)
SDL::TTF#render_shaded_utf8(text,fg_r,fg_g,fg_b,bg_r,bg_g,bg_b)
この機能はsmpegというライブラリによって提供されている。 よってこの機能を使うためにはsmpegが必要である。
音声を再生したい場合は初期化時にSDL.initの引数としてSDL::INIT_AUDIOを与え、 その後SDL::Mixer.openを呼ぶ必要がある。
またこの機能は内部で別スレッドを作ってそのスレッド内で再生ルーチンを 呼ぶことによって実現されている。そのため再生中は再生映像が描画されて いるサーフィスにアクセスしてはいけない。 もう一つ、SDL_Mixerの音声再生機能をフックしているため、音声を伴うmpeg再生、 つまりSDL::MPEG#enableAudioに真を与えてSDL::MPEG#play を呼びだした場合には、SDL::Mixerの音声再生機能は同時には利用できない。
これらの制限に対しては、一切のチェックをRuby/SDLでは行っていません。よって MPEG再生機能を使う場合には注意してください。
MPEGのデータを表す。
Object
SDL::MPEG.load(filename)
SDL::MPEG.new(filename)
SDL::MPEG#info
SDL::MPEG#enableAudio(enable)
SDL::MPEG#enable_audio(enable)
SDL::MPEG#enableVideo(enable)
SDL::MPEG#enable_video(enable)
SDL::MPEG#status
MPEGストリームの現在の状態を返す。返り値は以下の通り。
SDL::MPEG::ERROR SDL::MPEG::STOPPED SDL::MPEG::PLAYING
SDL::MPEG#setVolume(volume)
SDL::MPEG#set_volume(volume)
SDL::MPEG#setDisplay(surface)
SDL::MPEG#set_display(surface)
SDL::MPEG#setLoop(repeat)
SDL::MPEG#set_loop(repeat)
SDL::MPEG#scaleXY(w,h)
SDL::MPEG#scale_xy(w,h)
SDL::MPEG#scale(scale)
SDL::MPEG#move(x,y)
SDL::MPEG#setDisplayRegion(x,y,w,h)
SDL::MPEG#set_display_region(x,y,w,h)
SDL::MPEG#play
MPEGを再生する。
注意: 再生中にはsetDisplayで指定したサーフィスにアクセスしては いけない。
SDL::MPEG#pause
SDL::MPEG#stop
SDL::MPEG#rewind
SDL::MPEG#seek(bytes)
SDL::MPEG#skip(seconds)
SDL::MPEG#renderFrame(framenum)
SDL::MPEG#render_frame(framenum)
SDL::MPEG#setFilter(filter)
SDL::MPEG#set_filter(filter)
再生映像にかけるフィルタを指定する。以下のフィルタを指定可能。
SDL::MPEG::NULL_FILTER フィルタなし SDL::MPEG::BILINEAR_FILTER バイリニアフィルタ SDL::MPEG::DEBLOCKING_FILTER
SDL::MPEGの情報を持つ。 SDL::MPEG#infoなどでこのクラスのインスタンスを得る。
Object
SDL::MPEG::Info#has_audio
SDL::MPEG::Info#has_video
SDL::MPEG::Info#width
SDL::MPEG::Info#height
SDL::MPEG::Info#current_frame
SDL::MPEG::Info#current_fps
SDL::MPEG::Info#audio_string
SDL::MPEG::Info#audio_current_frame
SDL::MPEG::Info#current_offset
SDL::MPEG::Info#total_size
SDL::MPEG::Info#current_time
SDL::MPEG::Info#total_time
SDL.getTicks
SDL.get_ticks
SDL.delay(ms)
SDLSKKによる日本語入力機能を実現するための機能。 SDLSKKライブラリが必要である。
これに関するすべてのクラスはSDL::SKKの下にある。
これを使うためにはSDL.initを呼んだ後にSDL::Event2.enableUNICODEを 呼ぶ必要がある。
SDL::SKK.encoding=(encoding)
SDL::SKK.encoding
入力の状態を保持するクラス。
Object
SDL::SKK::Context.new(dict,romkana_table,bind,use_minibuffer)
SDL::SKK::Context#input(event)
SDL::SKK::Context#str
SDL::SKK::Context#render_str(font,r,g,b)
SDL::SKK::Context#render_minibuffer_str(font,r,g,b)
SDL::SKK::Context#clear
SDL::SKK::Context#clear_text
contextのcontextのモードが、確定入力モード、アルファベット入力モード、 JISX0208アルファベット入力モードのいずれかであればそのモードを 維持したまま入力テキストを空にする。
複数行の入力を実現したい場合、SDLSKK_Context_clearを呼ぶと モードが確定入力モードに戻ってしまうのが不自然である場合、この関数を 呼ぶとよい。
また、カットバッファの内容も保存される。
SDL::SKK::Context#get_basic_mode
contextのモードが、確定入力モード、アルファベット入力モード、 JISX0208アルファベット入力モードのいずれかであれば真を、それ 以外では偽を返す。辞書登録モードのときなども偽を返す。
これが真のときにリターンキーを押したら入力終了とみなす、 などといった処理に利用する。
辞書を示すクラス。
Object
SDL::SKK::Dictionary.new
SDL::SKK::Dictionary#load(dictfile,users)
SDL::SKK::Dictionary#save(filename)
ローマ字からかなへの変換の規則をあらわしたクラス。
Object
SDL::SKK::RomKanaRuleTable.new(table_file)
SDLSKKでのキーバインドを表わすクラス。
Object
SDL::SKK::Keybind.new
SDL::SKK::Keybind#set_key(key_str,cmd_str)
キーバインドを設定する。 key_strとして与えられる文字列は以下の通り
cmd_strとして与えられる文字列は以下の通り
ただし、"a" "/" などのascii character 一文字のキーにはデフォルト以外の キーバインドはしないようにしてください
標準のキーバインドを少し変更したいという場合は、まず SDL::SKK::Keybind#set_default_keyを呼んで、デフォルトのキーバインドを 設定してからSDL::SKK::Keybind#set_keyを呼んでください
SDL::SKK::Keybind#set_default_key
SDL::SKK::Keybind#unset_key(key_str)
Ruby/SDLでは、Ruby用のOpenGL Interfaceを併用することで3D描画が実現可能である。 OpenGL Interfaceのインストールのしかたなどについては、README.jaを 参照せよ。Windows用のバイナリには必要なものがすべて含まれている。
基本的には、以下のことをすれば使える。
また、OpenGLを使っているときは、SDL.blitSurfaceなどのSDLの2D描画機能は 使うべきではない。そのような利用は想定されていないからである。 sample/testgl.rbなどが参考になるであろう。
SDL.setGLAttr(attr,val)
SDL.set_GL_attr(attr,val)
OpenGL属性attrの値をvalにする。
使える属性は以下の通り
SDL.getGLAttr(attr)
SDL.get_GL_attr(attr)
SDL.GLSwapBuffers
SDL.GL_swap_buffers
以下の内容をスクリプトの最初に置いておけばこの問題を回避できる可能性がある。
require 'rbconfig' if RUBY_PLATFORM =~ /linux/ trap('INT','EXIT') trap('EXIT','EXIT') end