<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/gameset1/">
    <title>個人的なメモ</title>
    <link>http://w.atwiki.jp/gameset1/</link>
    <atom:link href="https://w.atwiki.jp/gameset1/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>個人的なメモ</description>

    <dc:language>ja</dc:language>
    <dc:date>2009-02-27T16:03:15+09:00</dc:date>
    <utime>1235718195</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/gameset1/pages/1.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gameset1/pages/13.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gameset1/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gameset1/pages/12.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gameset1/pages/3.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gameset1/pages/4.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gameset1/pages/5.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gameset1/pages/6.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gameset1/pages/7.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gameset1/pages/8.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/gameset1/pages/1.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/gameset1/pages/1.html</link>
    <description>
      *個人用Wiki
**このwikiについて


-luahelperクラスの使い方
-ゲームシステムの書き出し    </description>
    <dc:date>2009-02-27T16:03:15+09:00</dc:date>
    <utime>1235718195</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gameset1/pages/13.html">
    <title>memo</title>
    <link>https://w.atwiki.jp/gameset1/pages/13.html</link>
    <description>
      *何から手を付ければいいのかの話
あと個別の記事にする前の雑記。
----
**スクリプトにするか、C/C++にするか
ネイティブにするべきところは
-スプライト描画システム
-アニメーションコントローラ
入力etcは、SDLが補足して、[[lua]]に引き渡すとすれば、必要なのはこれだけ。
んじゃとりあえずスプライト描画システムから勉強してみましょうか。
[[Google:シーングラフ-&gt;http://www.google.co.jp/search?q=シーングラフ]]

**リンク
http://www.wakhok.ac.jp/~momma/SDL/
http://www.tacoworks.jp/software/SDLdoc-jp/html/index.html
http://www.libsdl.org/index.php
http://a.tedia.jp/devshed/55/
http://a.tedia.jp/devshed/93/index.html
http://mono.kmc.gr.jp/~nojima/hiki/
http://www.komoto.org/opengl/
http://www.sutosoft.com/room/archives/000247.html
http://risky-safety.org/~zinnia/sdl/
http://www.libsdl.org/intro.jp/toc.html
http://wisdom.sakura.ne.jp/system/opengl/
関連サイトあつめるだけでげろはきそう
つかもっと初心者向けにまとめるべきでしょう・・・
今からやりますけど。
てか、はてなブクマでも使えばよかったなあ。あとで読む用とか。
**SDLの下準備
-gamebase下にrunフォルダを作る
-その中に以下のものをいれる
--SDL.dll
--SDL_image.dll
--libpng12-0.dll
--zlib1.dll
--SDL_ttf.dll
--libfreetype-6.dll
-[ツール]-&gt;[オプション]-&gt;VC++ディレクトリで、インクルードディレクトリとライブラリディレクトリを設定する
-[構成プロパティ]-&gt;[全般]-&gt;[文字セット]を「マルチバイト文字セットを使用する」
-[構成プロパティ]-&gt;[リンカ]-&gt;[入力]の「追加の依存ファイル」に以下のファイルを追加
--SDL.lib
--SDLmain.lib
--SDL_ttf.lib
--SDL_image.lib
--Opengl32.lib
--Glu32.lib
-[構成プロパティ]-&gt;[デバッグ]の「作業ディレクトリ」を「run」

**Ｃ++用ラッパー
[[sdlmm&gt;http://sourceforge.net/projects/sdlmm/]]
[[sdloo&gt;http://sourceforge.net/projects/sdloo/]]
[[sdlucid&gt;http://sourceforge.net/projects/sdlucid/]]
なんか実装が古いとかなんとか。あとで確認ー。
g3dってのもあるけど、これ３Ｄ用だなー。

**サンプルコードぱくってきたお＞＜
----
 #include &quot;SDL.h&quot;
 #include&lt;stdio.h&gt;
 int main(int argc,char* argv[])
  {
    SDL_Surface *screen;
  /*The following code does the initialization for Audio and Video*/
    int i_error=SDL_Init(SDL_INIT_VIDEO);
  /*If initialization is unsuccessful, then quit */ 
    if(i_error==-1)
        exit(1);
      atexit(SDL_Quit);
  /*
  * Initialize the display in a 640x480 8-bit palettized mode,
  * requesting a software surface
  */
    screen = SDL_SetVideoMode(640, 480, 8, SDL_SWSURFACE);
    if ( screen == NULL )
    {
      fprintf(stderr, &quot;Couldn&#039;t set 640x480x8 video mode: %sn&quot;,SDL_GetError());
      exit(1);
    } 
  }
----

サーフェスってのは画像の単位
表示する画面もサーフェスとして扱うんだって
 SDL_Surface *image=SDL_LoadBMP(&quot;Tux.bmp&quot;);
こんな感じ。

まとめ前の話
とりあえず画像ロードする、ロードしたら表示するサーフェスにBlitする
もし画面になら画面のサーフェスに、他の画像にならその画像に
疑問点
-画像をロード→パレット生成
-画像をロード→その画像にあわせたサーフェスを新たに作る→そこにBlit
どっちの流れが良いんだろう    </description>
    <dc:date>2009-02-27T13:34:13+09:00</dc:date>
    <utime>1235709253</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gameset1/pages/2.html">
    <title>メニュー</title>
    <link>https://w.atwiki.jp/gameset1/pages/2.html</link>
    <description>
      **メニュー
-[[トップページ]]
-[[lua]]
-[[memo]]


----

&amp;link_editmenu(text=ここを編集)    </description>
    <dc:date>2009-02-18T14:21:02+09:00</dc:date>
    <utime>1234934462</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gameset1/pages/12.html">
    <title>lua</title>
    <link>https://w.atwiki.jp/gameset1/pages/12.html</link>
    <description>
      *Luaについて軽く学習
-参考文献
--スクリプト言語による効率的ゲーム開発　浜中誠　SoftBankCreative
**Luaって名前かわいいよね！
----
参考サイト
[[Luaプログラミング入門&gt;http://karetta.jp/book-cover/lua]]
[[Luaで組んでみる&gt;http://www.antun.net/tips/script/lua.html]]
[[5.1リファレンス&gt;http://sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html]]
**必要最小限の話だけ覚えておこう備忘録
----
大概の話はリファレンスみればいいよね！
***テーブルについて
-配列として使える
-連想配列として使える
-メタテーブル
***メタテーブル
-テーブルやユーザーデータを使用したときの演算子の役割を置き換える
-テーブル内の要素を参照するときの動作を変更することができる
-二項演算子の場合は、左項の要素を持つメタテーブルの処理が優先
**クラスの実装
----
テンプレート
 --クラスの作成
 ClassName = {}
 
 --インスタンス作成関数
 function ClassName:new()
 	--インスタンスとして使用するテーブル
 	local t = {}
 	
	--メンバ変数の定義
 	
	--継承
	ClassName.__index = Point
	setmetatable(t, ClassName)
	return t
 end
 
 --以下メンバ関数の定義
 function ClassName:Sample()
 end
 
 --クラスの利用
 local sample = ClassName:new()
 
 sample:Sample()
こんな感じで書けばオブジェクト指向チックにLuaを使うことができる。
ところで、delete()がないのはLuaはガベージコレクションができるからって認識でいいのかな。
中身としては、まずClassNameというテーブルを用意する。
そのテーブルの要素として、new()という関数をいれる。
ClassName:new() というのは、ClassName.new(self)と同意義。
ただ、クラス風に使うなら前者の方が見やすい。
ローカル変数は、そのスクリプトファイル内のその変数定義した場所以降で使える。
&gt;メタテーブルの __index 指定に関数ではなく連想配列を指定した場合、 メタテーブルが設定された値に対して連想配列としての参照 (今回の使い方では メソッドの呼び出しに相当) を行い値が見つからなかったら、 代わりに指定した連想配列を参照するようになります。（[[Luaで組んでみる&gt;http://www.antun.net/tips/script/lua.html]]より）
連想配列って便利ですね。
**LuaをC/C++プログラムに組み込む
----
***VC++2008への組み込み方の備忘録
-[プロジェクトの設定]&gt;[構成プロパティ]&gt;[C/C++]&gt;[全般]
--「追加のインクルードディレクトリ」の項目に、「..\lua5.1\include」
-[プロジェクトの設定]&gt;[構成プロパティ]&gt;[リンカ]&gt;[全般]
--「追加のライブラリディレクトリ」の項目に、「..\lua5.1\lib\static」
-[プロジェクトの設定]&gt;[構成プロパティ]&gt;[リンカ]&gt;[入力]
--「追加の依存ファイル」の項目に、「lua5.1.lib」
***ソースファイルの変更
C/C++のソースに以下のように変更
 （略）
 #include &lt;lua.hpp&gt;
 
 int main(int argc, char* argv[])
 {
        // LuaのVMを生成する
        lua_State *L = lua_open();
        // Luaの標準ライブラリを開く
        luaL_openlibs(L);
 
        （略）
 
        // LuaのVMを閉じる
        lua_close(L);
        return 0;
 }
lua_open()とluaL_newstate()は同じ関数。
***ビルドの際にでる問題
&gt;LINK : warning LNK4098: defaultlib &#039;LIBCMT&#039; は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
[構成プロパティ]&gt;[C/C++]&gt;[コード生成]&gt;ランタイムライブラリを/MDdから/MTに変更で警告は出なくなる。
正しい解決方法は
-LuaのライブラリをCRT毎に6種類全部ビルドする
-#ifdefと#pragma comment(lib,～)で自動的にそれを選択するヘッダを作る 
らしい。が、よくわからないので放棄。動くしいいよね。
（[[【Lua】組み込み系言語総合【Squirrel】&gt;http://unkar.jp/read/pc11.2ch.net/tech/1205208141/]]の437-442より）
**関数群
----
***スタック管理
-スタックの内容を出力する
 // スタックの指定インデックスのアイテムの内容を表示する
 static void PrintStackItem(lua_State *L, int idx)
 {
	int type = lua_type(L, idx);
	switch(type){
	case LUA_TSTRING:
		// 文字列アイテムの内容表示
		printf(&quot;index %2d : type=%s : \&quot;%s\&quot;\n&quot;,
		idx, lua_typename(L, type), lua_tostring(L, idx));
		break;
	case LUA_TNUMBER:
		// 数値アイテムの内容表示
		printf(&quot;index %2d : type=%s : %f\n&quot;,
		idx, lua_typename(L, type), lua_tonumber(L, idx));
		break;
	case LUA_TBOOLEAN:
		// ブール値アイテムの内容表示
		printf(&quot;index %2d : type=%s : \&quot;%s\&quot;\n&quot;,
		idx, lua_typename(L, type), lua_toboolean(L, idx)?&quot;true&quot;:&quot;false&quot;);
		break;
	default:
		// その他ならば型だけ表示
		printf(&quot;index %2d : type=%s\n&quot;, idx, lua_typename(L, type));
		break;
	}
 }
 
 // スタックのアイテムの内容を一覧で出力する
 void PrintStack(lua_State *L)
 {
	printf(&quot;----- stack -----\n&quot;);
	int top = lua_gettop(L);
	// 正のインデックスで指定
	for(int i = top; i&gt;=1; i--){
		PrintStackItem(L, i);
	}
	printf(&quot;-----------------\n&quot;);
	for(int i = -1; i &gt;= -top; i--){
		PrintStackItem(L, i);
	}
	printf(&quot;-----------------\n&quot;);
 }
-スタック要素数の管理
 // 現時点のスタックに積まれている要素数を記録しておく
 int top = lua_gettop(L);
 （スタック操作）
 // スタックの要素数を元に戻す
 lua_settop(L, top);
----
***グルー関数
-基本的なグルー関数の作り方
 （略）
 // Sample
 int Sample(int i)
 {
        return i+1;
 }
 // グルーコード
 int SampleGlue(lua_State *L)
 {
        printf(&quot;Sample() 関数実行\n&quot;);
        // スタック表示
        PrintStack(L);
        // 引数を取得
        int index = (int)lua_tonumber(L, 1);
        // 目的の関数を実行
        int sample = Sample(index);
        // スタックをクリア
        lua_settop(L,0);
        // 返り値を格納
        lua_pushnumber(L, sample);
 
        return 1; // 返り値の数（1個）
 }
   
 int main(){
        (略)
        // C関数を登録
        lua_registre(L, &quot;Sample&quot;, SampleGlue);
 
	int ret = luaL_dostring(L, &quot;print(Sample(5))&quot;);
	if(ret != 0){
		// エラー処理
		printf(&quot;error: %s\n&quot;, lua_tostring(L,-1));
		lua_pop(L,1);
	}
        （略）
 }
returnで、返り値の数を返す理由がよくわからないんですが、いったん放置で。
-マクロとして設定されている定数をLua内のグローバル変数に設定する方法
 // DEFINEの数値をLuaのグローバル変数DEFINEにセット
 lua_pushnumber(L, DEFINE);
 lua_setglobal(L, &quot;DEFINE&quot;);
&gt;lua_setglobal
&gt;void lua_setglobal (lua_State *L, const char *name);
&gt;スタックから値を取り除き、それをグローバル変数 name の新しい値として設定する。これはマクロとして定義されている。 
-変数のバインドの方法
Get/Set関数を作成し、Luaに公開することで、変数をバインドできる
 static int a = 0;
 int GetNumber()
 {
        return a;
 }
 void SetNumber(int b)
 {
        a = b;
 }
 int GetNumberGlue(lua_State *L)
 {
        int temp = GetNumber();
        lua_settop(L, 0);
        lua_pushnumber(L, temp);
        return 1; // 返り値１つ
 }
 int SetNumberGlue(lua_State *L)
 {
        int index = (int)lua_tonumber(L,1);
        SetNumber(index);
        lua_settop(L, 0);
        return 0; // 返り値なし
 }
これらの関数をmain関数内でlua_registerしていけばいい。
-スクリプトのロードを実行を切り分ける
Lua側全体を関数としてくくり、呼び出しはlua_pcallを使う。
 lua_getglobal(L, &quot;Sample&quot;);
 int ret = lua_pcall(L, 0, 0, NULL);
スタックに変数（この場合関数）を積んで、呼び出す。    </description>
    <dc:date>2009-02-16T21:07:38+09:00</dc:date>
    <utime>1234786058</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gameset1/pages/3.html">
    <title>右メニュー</title>
    <link>https://w.atwiki.jp/gameset1/pages/3.html</link>
    <description>
      **更新履歴
#recent(20)


&amp;link_editmenu2(text=ここを編集)
    </description>
    <dc:date>2009-02-16T19:51:00+09:00</dc:date>
    <utime>1234781460</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gameset1/pages/4.html">
    <title>プラグイン/ニュース</title>
    <link>https://w.atwiki.jp/gameset1/pages/4.html</link>
    <description>
      * ニュース
@wikiのwikiモードでは
 #news(興味のある単語)
と入力することで、あるキーワードに関連するニュース一覧を表示することができます
詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/17_174_ja.html


-----


たとえば、#news(wiki)と入力すると以下のように表示されます。


#news(wiki)
    </description>
    <dc:date>2009-02-16T19:51:00+09:00</dc:date>
    <utime>1234781460</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gameset1/pages/5.html">
    <title>まとめサイト作成支援ツール</title>
    <link>https://w.atwiki.jp/gameset1/pages/5.html</link>
    <description>
      * まとめサイト作成支援ツールについて
@wikiには[[まとめサイト作成を支援するツール&gt;&gt;http://atwiki.jp/matome/]]があります。
また、
 #matome_list
と入力することで、注目の掲示板が一覧表示されます。

利用例）#matome_listと入力すると下記のように表示されます
#matome_list
    </description>
    <dc:date>2009-02-16T19:51:00+09:00</dc:date>
    <utime>1234781460</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gameset1/pages/6.html">
    <title>プラグイン/編集履歴</title>
    <link>https://w.atwiki.jp/gameset1/pages/6.html</link>
    <description>
      * 更新履歴
@wikiのwikiモードでは
 #recent(数字)
と入力することで、wikiのページ更新履歴を表示することができます。
詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/17_117_ja.html


-----


たとえば、#recent(20)と入力すると以下のように表示されます。


#recent(20)
    </description>
    <dc:date>2009-02-16T19:51:00+09:00</dc:date>
    <utime>1234781460</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gameset1/pages/7.html">
    <title>プラグイン/アーカイブ</title>
    <link>https://w.atwiki.jp/gameset1/pages/7.html</link>
    <description>
      * アーカイブ
@wikiのwikiモードでは
 #archive_log()
と入力することで、特定のウェブページを保存しておくことができます。
詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/25_171_ja.html


-----


たとえば、#archive_log()と入力すると以下のように表示されます。
保存したいURLとサイト名を入力して&quot;アーカイブログ&quot;をクリックしてみよう


#archive_log()
    </description>
    <dc:date>2009-02-16T19:51:00+09:00</dc:date>
    <utime>1234781460</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gameset1/pages/8.html">
    <title>プラグイン/動画(Youtube)</title>
    <link>https://w.atwiki.jp/gameset1/pages/8.html</link>
    <description>
      * 動画(youtube)
@wikiのwikiモードでは
 #video(動画のURL)
と入力することで、動画を貼り付けることが出来ます。
詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/17_209_ja.html

また動画のURLはYoutubeのURLをご利用ください。
＝＞http://www.youtube.com/

-----


たとえば、#video(http://youtube.com/watch?v=kTV1CcS53JQ)と入力すると以下のように表示されます。


#video(http://youtube.com/watch?v=kTV1CcS53JQ)

    </description>
    <dc:date>2009-02-16T19:51:00+09:00</dc:date>
    <utime>1234781460</utime>
  </item>
  </rdf:RDF>
