DGZのサポートページです。
DGZはソースコードを公開しているフリーゲームです。
ユーザーは自由にコードを改変し、コード及びプログラムを公開することができます。
また、その際に報告の義務はありません。
ただし、コード以外のリソースは二次利用できません。
予めご了承下さい。
バグ報告・感想等は当記事のコメント欄にお願い致します。
ダウンロード
2013年8月11日日曜日
2013年7月11日木曜日
Luaの標準ライブラリのロード方法
今まで一部で躓いていたCからのLuaステートへの標準ライブラリのロードがうまくいったのでアウトプット。
以下はうまくいかないコード。
#include
int main( void ) {
lua_State *L = luaL_newstate();
luaopen_package( L );
lua_close( L );
return 0;
}
出力:
PANIC: unprotected error in call to Lua API (no calling environment)
以下が正しいコード。
#include
int main( void ) {
lua_State *L = luaL_newstate();
lua_pushcfunction(L, luaopen_package);
lua_pushstring(L, LUA_LOADLIBNAME);
lua_call(L, 1, 0);
lua_close( L );
return 0;
}
リファレンスを見る限りは、全てのライブラリのロードで下の方法を用いるべきと思われる。上の方法でうまく動くライブラリとそうでないライブラリが存在する。
luaL_openlibs( L ); // OK
luaopen_base( L ); // OK
luaopen_math( L ); // OK
luaopen_string( L ); // OK
luaopen_table( L ); // OK
luaopen_debug( L ); // OK
luaopen_package( L ); // NG
luaopen_io( L ); // NG
環境によるかもしれないので必ず上を使いましょう。
以下はうまくいかないコード。
#include
int main( void ) {
lua_State *L = luaL_newstate();
luaopen_package( L );
lua_close( L );
return 0;
}
出力:
PANIC: unprotected error in call to Lua API (no calling environment)
以下が正しいコード。
#include
int main( void ) {
lua_State *L = luaL_newstate();
lua_pushcfunction(L, luaopen_package);
lua_pushstring(L, LUA_LOADLIBNAME);
lua_call(L, 1, 0);
lua_close( L );
return 0;
}
リファレンスを見る限りは、全てのライブラリのロードで下の方法を用いるべきと思われる。上の方法でうまく動くライブラリとそうでないライブラリが存在する。
luaL_openlibs( L ); // OK
luaopen_base( L ); // OK
luaopen_math( L ); // OK
luaopen_string( L ); // OK
luaopen_table( L ); // OK
luaopen_debug( L ); // OK
luaopen_package( L ); // NG
luaopen_io( L ); // NG
環境によるかもしれないので必ず上を使いましょう。
2013年7月10日水曜日
luaopen_mathでスタックに謎のLUA_TTABLEが積まれる件について
以下のコードは動作はするが、予期せぬ結果となる。
script.lua
function func(num)
return num;
end
main.cpp
#include "lua.hpp"
int main( void ) {
lua_State* p = luaL_newstate();
luaopen_math( p );
luaL_dofile( p, "script.lua" );
int num = 100;
lua_getglobal( p, "func" );
lua_pushnumber( p, num );
lua_pcall( p, 1, 1, 0 );
num = lua_tonumber( p, 1 );
lua_close( p );
return 0;
}
最終的にnumに入っている値は100であると予想されるが、
実際には0が入っている。
luaopen_mathを呼び出した際に、謎の LUA_TTABLE がプッシュされるため、
スタックの一番下には func の返り値ではなく、
テーブルが入っており、その上に返り値が積まれている。
NG: num = lua_tonumber( p, 1 );
OK: num = lua_tonumber( p, -1 );
何が積まれているのかは調べたけど分からなかった。
誰か、Luaに詳しい方で分かる方いらっしゃったら教えて下さい。
script.lua
function func(num)
return num;
end
main.cpp
#include "lua.hpp"
int main( void ) {
lua_State* p = luaL_newstate();
luaopen_math( p );
luaL_dofile( p, "script.lua" );
int num = 100;
lua_getglobal( p, "func" );
lua_pushnumber( p, num );
lua_pcall( p, 1, 1, 0 );
num = lua_tonumber( p, 1 );
lua_close( p );
return 0;
}
最終的にnumに入っている値は100であると予想されるが、
実際には0が入っている。
luaopen_mathを呼び出した際に、謎の LUA_TTABLE がプッシュされるため、
スタックの一番下には func の返り値ではなく、
テーブルが入っており、その上に返り値が積まれている。
NG: num = lua_tonumber( p, 1 );
OK: num = lua_tonumber( p, -1 );
何が積まれているのかは調べたけど分からなかった。
誰か、Luaに詳しい方で分かる方いらっしゃったら教えて下さい。
2013年3月2日土曜日
この際だから言うけど、eneloop stick boosterはモバイルバッテリに適さない
ここ数日eneloopのデザイン変更が世間を賑わせている。eneloopを再評価する記事や、eneloopとそれらを取り巻く市場についての現状をまとめた記事は興味深い内容が多い。
それとは別に、だいぶ前にGalaxy Nexus用の予備バッテリとしてeneloop stick booster(KBC-D1AS)を購入したのだが、思ったよりも使い勝手が良くなかったので、その理由を書いてみようと思う。
まず、eneloop stick boosterは単体では充電できない。充電の際には中の単三電池を取り出して、充電器に接続する必要がある。シンプルな構造故取り出すのは容易だが、このちょっとした手間がそれなりにストレスになってしまう。
次に、電池2本で3800mAhという容量は存外に少ない。10000mAh前後の安いモバイルバッテリを購入したほうが確実に良いだろう。
そしてeneloop stick boosterには電池の残存量を知るためのインジケータが存在しない。stick booster以外ならばLEDインジケータのついた機種が存在するので、モバイルバッテリ用途ではインジケータのついた物の方が確実に良い。
最後に、スティック型の形状は思った程のメリットは無い。アルマイトの細長いスティックというデザインは美しいが、細長い形状で大きくメリットがある人以外にとってはただそれだけだ。
バッテリは、それが充電池であるにしろそうでないにしろ消耗品だということを実感させられた。単三電池のeneloopを買うのなら、モバイルバッテリではなくリモコン等の単三電池を使う機器で使用した方が良いし、モバイルバッテリとして使うならば容量が大きく安価な物を使ったほうが良いだろう。結局私はGalaxy Nexus用の大容量バッテリを買ってしまった。専用バッテリなら携帯電話本体を充電器として利用できるし、モバイルバッテリを接続したままで利用する煩わしさも無いので、消耗品として使い潰すには最適だと思う。ちなみに私はこのバッテリーを使用している。
その他のGalaxy Nexus向けバッテリー
とモバイルバッテリー
。
それとは別に、だいぶ前にGalaxy Nexus用の予備バッテリとしてeneloop stick booster(KBC-D1AS)を購入したのだが、思ったよりも使い勝手が良くなかったので、その理由を書いてみようと思う。
まず、eneloop stick boosterは単体では充電できない。充電の際には中の単三電池を取り出して、充電器に接続する必要がある。シンプルな構造故取り出すのは容易だが、このちょっとした手間がそれなりにストレスになってしまう。
次に、電池2本で3800mAhという容量は存外に少ない。10000mAh前後の安いモバイルバッテリを購入したほうが確実に良いだろう。
そしてeneloop stick boosterには電池の残存量を知るためのインジケータが存在しない。stick booster以外ならばLEDインジケータのついた機種が存在するので、モバイルバッテリ用途ではインジケータのついた物の方が確実に良い。
最後に、スティック型の形状は思った程のメリットは無い。アルマイトの細長いスティックというデザインは美しいが、細長い形状で大きくメリットがある人以外にとってはただそれだけだ。
バッテリは、それが充電池であるにしろそうでないにしろ消耗品だということを実感させられた。単三電池のeneloopを買うのなら、モバイルバッテリではなくリモコン等の単三電池を使う機器で使用した方が良いし、モバイルバッテリとして使うならば容量が大きく安価な物を使ったほうが良いだろう。結局私はGalaxy Nexus用の大容量バッテリを買ってしまった。専用バッテリなら携帯電話本体を充電器として利用できるし、モバイルバッテリを接続したままで利用する煩わしさも無いので、消耗品として使い潰すには最適だと思う。ちなみに私はこのバッテリーを使用している。
その他のGalaxy Nexus向けバッテリー
2013年2月23日土曜日
Chromebook Pixel 発表に対する所感
情報がリークした時、2560*1700という解像度は、たぶん2560*1600の誤りであろう、と思っていた。同じように思っていた人は少なくないであろう。Engadget 日本版の記事によれば、「ウェブやウェブアプリの使い勝手を考えて、一般的なノートの16:9や16:10より縦を広く確保したかったため」だそうだ。4年程前から徐々にWUXGA液晶が、16:9の映像を液晶面を余す事無く再生できるFullHDの液晶に淘汰されていった事を考えると、Googleのこの決断は思い切ったものだ、と思う。
ハードウェアは、MacBook Proの13インチRetinaディスプレイモデルに極めて似ている。Intel Core i5プロセッサと、高解像度のディスプレイを搭載したモバイルノートブック、という特徴や、ラッチレス構造を採用し、シンプルでアルマイトの質感を活かした筐体のデザインはAppleに訴えられそうな程だ。もう少し詳しく見れば、液晶はMacBook Proよりも一回り小さく、重さも100gほど軽量だ。Google Driveがある代わりにSSDの容量は約半分である。MacBook Proの値段は日本では138,800円、アメリカでは1,199ドルだ。Gigazineによれば、Chromebook Pixelは1299ドル(約12万円)で販売されるらしい。全体的なスペックを鑑みるに、出来る事ならMacBook Proを切る価格で販売して欲しかった所だ(価格競争力的に)。
個人的に注目したいのは、Chromebook Pixelのロゴのデザインだ。Appleがコーポレートフォントに採用しているMyriad Proや、MicrosoftのSegoeによく似た、モダンでシンプルなデザインのフォントで、Chromebookは細く、Pixelは少しウェイトの大きい太字のデザインだ。このフォントのウェイトは、Appleのデザインに酷似している。MacBook Airや、iPod shuffle、iPod nano、iPod touch、iPod classic、iPad miniのロゴは、前半が太字で後半は細字だ(ちなみにiMac、MacBook Pro、Mac mini、Mac Pro、iPad、OS X Mountain Lionは全体を通して太字である)。Appleのロゴについてはこちらの記事が参考になるだろう。細字と太字の順序こそ逆であるものの、そのデザインにはかなりの共通点が見られる。個人的には全体を通して同じウェイトのフォントで構成される最近のMicrosoftのロゴデザインの方が好きなのだが。
主要参考文献:
Google、2560x1700タッチ画面の Chromebook Pixel 発表。Core i5 & LTE対応 - Engadget Japanese
Googleの新型ノートPC「Chromebook Pixel」が来週から約12万円で発売、4月にはLTE内蔵モデルも - GIGAZINE
Google Chromebook Pixel
Google噂のChromebook Pixel(タッチ画面付)が流出ビデオに堂々登場
マイクロソフト、25年ぶりに新ロゴを採用。Windows 8 や Office と統一 (動画) - Engadget Japanese
ハードウェアは、MacBook Proの13インチRetinaディスプレイモデルに極めて似ている。Intel Core i5プロセッサと、高解像度のディスプレイを搭載したモバイルノートブック、という特徴や、ラッチレス構造を採用し、シンプルでアルマイトの質感を活かした筐体のデザインはAppleに訴えられそうな程だ。もう少し詳しく見れば、液晶はMacBook Proよりも一回り小さく、重さも100gほど軽量だ。Google Driveがある代わりにSSDの容量は約半分である。MacBook Proの値段は日本では138,800円、アメリカでは1,199ドルだ。Gigazineによれば、Chromebook Pixelは1299ドル(約12万円)で販売されるらしい。全体的なスペックを鑑みるに、出来る事ならMacBook Proを切る価格で販売して欲しかった所だ(価格競争力的に)。
個人的に注目したいのは、Chromebook Pixelのロゴのデザインだ。Appleがコーポレートフォントに採用しているMyriad Proや、MicrosoftのSegoeによく似た、モダンでシンプルなデザインのフォントで、Chromebookは細く、Pixelは少しウェイトの大きい太字のデザインだ。このフォントのウェイトは、Appleのデザインに酷似している。MacBook Airや、iPod shuffle、iPod nano、iPod touch、iPod classic、iPad miniのロゴは、前半が太字で後半は細字だ(ちなみにiMac、MacBook Pro、Mac mini、Mac Pro、iPad、OS X Mountain Lionは全体を通して太字である)。Appleのロゴについてはこちらの記事が参考になるだろう。細字と太字の順序こそ逆であるものの、そのデザインにはかなりの共通点が見られる。個人的には全体を通して同じウェイトのフォントで構成される最近のMicrosoftのロゴデザインの方が好きなのだが。
主要参考文献:
Google、2560x1700タッチ画面の Chromebook Pixel 発表。Core i5 & LTE対応 - Engadget Japanese
Googleの新型ノートPC「Chromebook Pixel」が来週から約12万円で発売、4月にはLTE内蔵モデルも - GIGAZINE
Google Chromebook Pixel
Google噂のChromebook Pixel(タッチ画面付)が流出ビデオに堂々登場
マイクロソフト、25年ぶりに新ロゴを採用。Windows 8 や Office と統一 (動画) - Engadget Japanese
2013年2月9日土曜日
DXライブラリとLuaを使ってスクリプト側で画像をロード
内容はタイトルの通り。
ソースコードは こちら 。
Lua向けに専用のLoadGraph関数を用意してやり、それをlua_Stateに渡し、
lua_State側からその関数を呼び出して画像をロードするプログラム。
コードの説明はプログラム内のコメントと、コメントに書いてあるリンク先の参考文献を参照のこと。
記事内では、プロジェクトの設定について説明する。
まず、 DXライブラリ置き場 使い方説明 に従って、DXライブラリが動くプロジェクトを作成する。
DXライブラリがうまく動いたら、 その1 Luaのインストール に従って、Luaのセットアップをする。
リンク先では、コンソールアプリケーション向けの設定についての記述なので、Win32アプリケーションで行う設定を以下に列挙する。
ソースコードは こちら 。
Lua向けに専用のLoadGraph関数を用意してやり、それをlua_Stateに渡し、
lua_State側からその関数を呼び出して画像をロードするプログラム。
コードの説明はプログラム内のコメントと、コメントに書いてあるリンク先の参考文献を参照のこと。
記事内では、プロジェクトの設定について説明する。
まず、 DXライブラリ置き場 使い方説明 に従って、DXライブラリが動くプロジェクトを作成する。
DXライブラリがうまく動いたら、 その1 Luaのインストール に従って、Luaのセットアップをする。
リンク先では、コンソールアプリケーション向けの設定についての記述なので、Win32アプリケーションで行う設定を以下に列挙する。
- 追加のインクルードディレクトリにluaフォルダ内のincludeフォルダへのパスを追加
- 追加のライブラリディレクトリにluaフォルダへのパスを追加
- リンカ->入力->追加の依存ファイルにlua5.1.libを追加
- lua5.1.dllをプロジェクトフォルダの直下にコピー
以上である。
主要な参考文献
2013年1月3日木曜日
マルチデバイスとその逆
MacBookが主流のモバイル時代、かつてApple社の救世主となったiMacを使う意味はなんだろう?!
この記事を最近読んで思った事をつらつらと書くなど。
私も、最近この記事に書いてあることと同じ事を常々感じている。CPUは大分前から言わずもがな、最近はIntelのチップセット内蔵グラフィックスでも最低限必要十分なスペックを提供してくれる。きちんとした(あるいは内部のアーキテクチャはモバイル向けアーキテクチャでも良い)デスクトップPCの必要性を感じるのは、精々ゲームをする時や、動画のエンコードをする時くらいで、日常的な用途、ウェブブラウジングやメール、軽いゲームくらいならCore iプロセッサの最低レベルで十分こなせる。
Windows RTがARMタブレットで動くこと等からも、Atomに代表される省電力X86アーキテクチャと、ハイエンドなARMアーキテクチャが極めて近づいてきている事がわかる。そう遠くない内に今のX86程のパフォーマンスでARM並に省電力な高効率なアーキテクチャが実現することは疑う余地が無いように思う。
スマートフォンとPCで同じGmailにアクセスしたりするように、複数のデバイスで同じデータにシームレスにアクセスする仕組みは整いつつある。ハードウェアも同じように、タブレットコンピュータを家に持ち帰り、大きめのディスプレイやキーボードと無線でシームレスに接続して自然体で使えたりするような、複数のデバイスをシームレスに扱える時代が来るといいなぁ。
登録:
投稿 (Atom)