SDLSDL2009-09-21矩形の描画SDL中を塗りつぶさない矩形、つまり矩形の外枠部分の描画方法。水平線、垂直線は矩形の幅や高さを1として描画してやればよい。r,...2009-09-20ドットを描画SDLSDLで1ドットを描画するには、矩形領域を塗りつぶす関数で幅1高さ1の矩形を描画すればよい。ドットを描画する関数は次の通り。SDLステージやキャラクターのグラフィックはまだ用意していないので、とりあえずラインで描画しておこうと思ったが、SDLには矩形描画はあるがライン描画はなかった。斜めのラインを書きたかったら自分で斜めのピクセル座標を計算しなくてはならないようだ。SDLSDLにはサーフェスをクリアする命令がないと思っていたけど、SDL_FillRectという指定したカラーで矩形を塗りつぶすという命令があった。それで画面のクリアを実現できる。クリア用のテクスチャを用意する必要はなかった。SDLデバッグでコリジョンをチェックするためにラインを描画しようと思ったら、SDLにライン描画の関数が見当たらない。ライン描画をする関数はないようだ。矩形を指定した色で塗りつぶす関数SDL_FillRectがあったので、これでラインを描画するこ...2008-08-21描画順SDLそういえば、描画の指定にZの値が無かった。いうことは一番奥のものから描画していかないといけないということ。自前のライブラリではZの指定をできるようにして、Zの順に描画登録をするようにしよう。SDLテクスチャの描画処理を行わなければ、てっきり描画されなくなるものと思いこんでしまっていた。DirectXの場合、クリアカラーを設定して毎フレーム最初にクリアされるが、SDLの場合、サーフェスに転送したイメージはそのまま。SDL半透明がうまくいかなかった原因はサーフェスを表示フォーマットに変換する処理でSDL_DisplayFormatAlpha()を使わずにSDL_DisplayFormat()を使っていたからだった。そりゃアルファチャンネルあっても半透明で描画できるわけがない。これが原因だと分かるま...2008-07-20ジョイスティックその6SDLジョイスティックの状態を取得する方法として、イベントを使う方法もある。SDL_JoystickEventStateでジョイスティックのイベントを有効にして、イベントを受け取るジョイスティックをオープンする。SDL_JoystickEventState(...2008-07-19ジョイスティックその5SDLジョイスティックを引っ張り出してきて、今のPCで使えるようにセットアップ。SDL_JoystickName()で得られるジョイスティック名はコントロールパネルのゲームコントローラで表示されるものと同じだった。SDL_JoystickGetAxis()で得られる値は、ジョイス...2008-07-18ジョイスティックその4SDLジョイスティックの状態の調べ方。ジョイスティックイベントで調べる方法もあるけど、今回は手動の方法。SDL_JoystickUpdateでジョイスティックの状態を更新。軸の状態を調べるにはSDL_JoystickGetAxis。S...2008-07-17ジョイスティックその3SDLジョイスティックを使うにはまずオープンする必要がある。オープンする関数はSDL_JoystickOpen()。戻り値はSDL_Joystick構造体。オープンに失敗したときはNULLとなる。使い終わったあとにはクローズする必要が...2008-07-16ジョイスティックその2SDLジョイスティックが接続されているか判定するにはSDL_NumJoysticks()を使う。この関数で接続しているジョイスティックの数が取得できる。SDL_JoystickName()で割り当てられたジョイスティックの名前を取得することがで...2008-07-15ジョイスティックその1SDLSDLでジョイスティックを使用するにはまずジョイスティックのサブシステムを初期化しなくてはならない。初期化はSDL_Init()の引数にSDL_INIT_JOYSTICKを指定して行う。fprintf(std...2008-07-14イベントの取得SDLキーが押されたとか、マウスが動かされたなどのいわゆるイベントを取得するにはSDL_PollEvent()を使う。実際の使い方は次の通り。...2008-07-13キー判定SDLSDLでキーボードの入力判定を行うにはSDL_GetKeyState()を使う。この関数はキーボードの状態を格納した配列へのポインタを返し、その配列のサイズがnumkeysに格納される。配列の値が1のときキーが押されていて、0の...2008-07-10フレーム待ちSDLSDL_Delay()を使って指定した時間待つことができる。引数にはミリ秒を指定。場合によっては遅延があることもある。サンプルではこれとSDL_GetTicks()を使ってフレーム待ちを実装している。FRAMES...2008-07-08ミリ秒の取得SDLプログラム中で経過時間を知りたい場合はSDL_GetTicks()を使う。この関数はSDLのライブラリの初期化からの経過ミリ秒を取得する。uint32の値を返すので49日以上経過すると0に戻ってしまう。49日も続けてプレイするようなゲ...2008-07-07SDL_LowerBlitSDLサンプルプログラムにSDL_LowerBlit()という関数があるのだが、ドキュメントにはその項目が見つからない。名前から低レベルの転送を行うものだと思うんだけど。2008-07-06画像の描画SDLSDL_BlitSurface()でスクリーンに転送したのち、SDL_UpdateRect()で画面の更新を行う。srcが転送元のサーフェース。srcrectが転送元の位置、サイズ。NULL...2008-07-05画像の表示フォーマットへの変換SDLSDL_DisplayFormat()でロードした画像を高速転送に対応するように変換する。高速に表示させるためにビデオのフレームバッファに合わせた変換を行うとい...2008-07-04画像の透明部分SDL読み込んだ画像の一部分を透明にするには、SDL_SetColorKey()で設定する。surfaceは設定する画像、flagにフラグ。keyに透明にするピクセルの値を入れる。フラグにはSDL_SRCCOLORKEY...2008-07-03画像の読み込みSDL画像をファイルから読み込むにはIMG_Loadを使う。戻り値はSDL_Surfaceへのポインタ。ヘッダファイルのコメントを見ると対応フォーマットはBMP,GIF,PNG。そのほかもあるようだがそれは分からない。この3種類に...2008-07-01サウンドの再生その2SDLサウンドの一時停止はMix_Pause(),一時停止したのを再開するのはMix_Resume(),停止するのはMix_HaltChannel()。これらの関数の引数はチャネル番号。-1を指定した場合はすべてのチャネル。Mix_H...2008-06-30サウンドの再生SDL効果音などのサウンドの再生にはMix_Chunkを使う。Mix_LoadWAV()でWAVファイルを読み込んでMix_Chunkを作成する。再生するときはMix_PlayChannel()を使う。Mix_PlayChannel(channel,chunk...2008-06-28ミュージックの再生SDLゲームのBGMとして音楽の再生にはMix_Musicを使う。ここでの拡張子itのファイルはMODで使われるサウンドデータファイル。このほかにもMIDIファイルを扱うことができる。再生...2008-06-27グラフィックの初期化SDLグラフィックデバイスの初期化はSDL_SetVideoMode()。ヘッダでの定義は次の通り。widthは幅、heightは高さ。bppはピクセル深度。0の場合は現在表...2008-06-26オーディオの初期化SDLオーディオデバイスの初期化にはMix_OpenAudio()を使う。ヘッダでの定義は次の通り。frequenc...2008-06-25エラーの原因を知るSDLSDLの関数でエラーが返ってきたとき、そのエラー情報をSDL_GetError関数を使って文字列で取得できる。使うときは次のような感じ。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。