■吉里吉里/KAG/TJS雑談質問スレ■その25
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2011/12/16(金) 09:12:24.47ID:abdXwpcP自作ゲームの進行状況や製作ツールについての話、TJS等の話題もどうぞ。
マルチポストはやめましょう。個人叩きも禁止です。
※スレで質問をするときは※
KAG/TJS/吉里吉里ドキュメント、スレの過去ログ、公式掲示板のログ、
FAQ、Google等で調べてからにしましょう。
努力の形跡が見られないとスルーされがちです。初心者?でも頑張れ!
吉里吉里スレ過去ログ倉庫
ttp://bbs.bokunatu.com/krkr/
吉里吉里2/KAG3雑談質問スレ_過去ログ
ttp://www.geocities.jp/kirikiri_log/
吉里吉里ダウンロードページ
ttp://kikyou.info/tvp/
ダウンロードしたアーカイブに含まれる「KAG System リファレンス」は
初心者にとって最も頼もしい教科書です。何度も繰り返し読みましょう。
■タグリファレンス … KAGの機能が網羅的、辞書的に載っています。
大よその機能(KAGでどんなことが出来るか)は把握しておきましょう。
■Tips/その他 … 陥り易いミスやより高度な使い方への足掛かりになる
数々のTipsが記載されています。
■TJSをもっと使うために
ゲームのインターフェイスをカスタマイズしたい、また
KAGの命令に無いことをしたくなったらまずここを読んでみよう。
必要に応じて>>3-5の公式掲示板や講座等を併用してください。
(併用に、紙媒体の参考本が欲しい人は、ダウンロードページにリストがあります)
前スレ ■吉里吉里/KAG/TJS雑談質問スレ■その24
http://toro.2ch.net/test/read.cgi/gamedev/1307083588/
0339名前は開発中のものです。
2012/02/28(火) 16:55:29.18ID:sXo++fmyuseArchiveIfExists("patch.xp3");
って行あるでそ
そこを改造
patch2.xp3とかについてもいじりたいならその直後の数行も改造
0340名前は開発中のものです。
2012/02/28(火) 16:58:55.41ID:2fKennm5Initialize.tjsを読んだらわかります。
0341名前は開発中のものです。
2012/02/28(火) 16:59:38.90ID:2fKennm50342名前は開発中のものです。
2012/02/28(火) 17:03:33.87ID:KF1ZBcadお二方ともレスありがとうございます!助かりました
0343名前は開発中のものです。
2012/02/29(水) 01:11:29.87ID:BToEtXVh立ち絵にできるのであれば一番よいのですが、メッセージレイヤーより上のプライオリティにしたい(メッセージ枠の上にキャラ表示したい)
右クリメッセージレイヤ非表示の際に一緒にキャラを非表示(kagのautohide)にしたかっため表情欄を選択しました
layoptはレイヤ番号とかわからないので使えなさそうですし、
ワールド拡張での上記処理立ち絵の方法がわからなかったもので・・・
0344名前は開発中のものです。
2012/02/29(水) 19:24:46.81ID:0rNhF2CG表示レベルを10にすればメッセージレイヤ0の前に表示される
20ならメッセージレイヤ1の前
右クリで消すのはプラグイン書く必要あり
↓のスクリプトをafterinit.tjsにはっておけば多分動く
「"しおり"」の部分は消したいキャラの名前にしないとだけど
メッセージと連動させたいならmsgon/msgoffもマクロ化して一緒に消すようすれば便利かも
class MessageHiddenStatePlugin extends KAGPlugin {
function onMessageHiddenStateChanged(hidden)
{
if (world_object.env.characters["しおり"] !== void && world_object.env.characters["しおり"].targetLayer !== void) {
with (world_object.env.characters["しおり"].targetLayer) {
if (hidden) {
.beforeMessageHiddenStateVisible = .visible;
.visible = false;
} else {
.visible = .beforeMessageHiddenStateVisible;
}
}
}
}
}
kag.addPlugin(new MessageHiddenStatePlugin());
0345名前は開発中のものです。
2012/03/01(木) 02:10:08.53ID:PK/6bC6Oプラグインの式までかいてくださりありがとうございます!
無事やりたいことが実装できました。
レベルに関しては一度10以上を指定してみてできなかったので
あきらめたのですが、単にenvinit.tjsの記述をミスしていたようです
KAGEXは使えると便利そうですが、TJSに手を出してないと
やはり躓いてしまうことが多くなりますね
まだまだ精進が必要なようです
ここで回答をいただけて助かりました
本当にありがとうございました
0346名前は開発中のものです。
2012/03/01(木) 10:43:51.06ID:JQshwtmPゲーム名の付くファイルが2つあるのは見た目的にイマイチなんで、
入れなくて平気なら同梱したくないんだけど…
0347名前は開発中のものです。
2012/03/01(木) 12:02:43.98ID:vbjmVXSgアイコンリソースは実行ファイルに埋め込まれるので krkr.cf は不要。
0348名前は開発中のものです。
2012/03/01(木) 15:34:06.86ID:j60swYIbID変わってますが346です
教えてくださってありがとうございました!感謝です
0349名前は開発中のものです。
2012/03/01(木) 16:20:19.26ID:9v1McgzENew icon size exceeds original icon size!
というエラーが出てしまいます。
どうすれば大きいサイズのアイコンも使えるでしょうか?
0350名前は開発中のものです。
2012/03/01(木) 16:23:18.19ID:53Wq1nAy0351名前は開発中のものです。
2012/03/01(木) 22:26:16.26ID:+8ZAXHk8どうすればできるのでしょうか?
カウントはフラグを使ってやればできるのだろうと思うのですが
時間制限がわかりません。
どうすればよいのでしょうか?
0352名前は開発中のものです。
2012/03/01(木) 22:43:28.89ID:hU8JKHrOtjsならタイマーとかトリガー
0353名前は開発中のものです。
2012/03/01(木) 23:06:43.33ID:+8ZAXHk8ありがとうございます。
クリックのカウント方法をクリック待ちの間に
フラグを入れるというものにしているので
timeoutが使えません。
カウント方法を変えた方がいいのでしょうか?
0354名前は開発中のものです。
2012/03/01(木) 23:59:49.78ID:5L/3OoyVクリック数なら、kag.clickCountが勝手に数えてくれる
「TJSをもっと使うために」を参照してみて
0355名前は開発中のものです。
2012/03/02(金) 01:48:31.46ID:hMNp0D7Df.aaa = (object)(object 0x0831E8E3:0x0831E8E3)
みたいに表示されますよね
これを、(object)の文字列をそのまま取得して、例えば別セープの吉里吉里Bで
f.bbb = (object)(object 0x0831E8E3:0x0831E8E3)
ってやると、別のデータでもf.aaaの中身をf.bbbにそっくりそのままコピーできる・・・
みたいな事って出来ませんか?
0356名前は開発中のものです。
2012/03/02(金) 03:52:32.51ID:j+yb+4hj0357名前は開発中のものです。
2012/03/02(金) 04:47:15.26ID:hMNp0D7Dファイルのやり取りでなく、例えば2chとかで文字列をやり取りしてデータを送る、
つまりファミコンのパスワードみたいな事をしたかったんですが・・・
自分で暗号化の法則とか作ってやるしかないですかね
0358名前は開発中のものです。
2012/03/02(金) 07:54:17.60ID:sqZhAzFg0359名前は開発中のものです。
2012/03/02(金) 08:00:11.37ID:iMtEUy5T>AsyncTrigger クラスは、いったん吉里吉里に制御が戻った直後のイベント配信のタイミングにイベントを発生させるためのクラスです。
ってあるけど、吉里吉里に制御が戻るってどういうこと?
一行ずつtjsコード逐次実行してるんじゃないの?
イベントを全部処理し終わってアイドル状態になったときってこと?
「直後のイベント配信タイミング」って要するにいつなんだよ?
てか配信?発生と違うの?吉里吉里がイベント溜め込むのか?
そもそもイベントってマルチスレッドで並行処理されてるの?
それともイベントキューみたいなのに入るの?
さらにKAGのConductorが入ってくるともうわけわかんね
この辺突っ込んだ解説してるサイトとか本とかないですか?
0360名前は開発中のものです。
2012/03/02(金) 10:25:49.28ID:h0TU5s7tスクリプトの実行がおわったとき
>一行ずつtjsコード逐次実行してるんじゃないの?
してます
>イベントを全部処理し終わってアイドル状態になったときってこと?
そんな感じ
>「直後のイベント配信タイミング」って要するにいつなんだよ?
他のイベントハンドラの処理が終わったとき
>てか配信?発生と違うの?吉里吉里がイベント溜め込むのか?
ためこみます
>そもそもイベントってマルチスレッドで並行処理されてるの?
されてません
>それともイベントキューみたいなのに入るの?
非同期イベントはイベントキューに入ります
>さらにKAGのConductorが入ってくるともうわけわかんね
がんば
>この辺突っ込んだ解説してるサイトとか本とかないですか?
ないです
0361名前は開発中のものです。
2012/03/02(金) 18:35:45.87ID:iMtEUy5Tこういうのって経験則で掴んでいくしかないのかな
Conductorはソースあるから読めばわわかるんだろうけど
0362名前は開発中のものです。
2012/03/02(金) 19:45:14.94ID:j+yb+4hj0363名前は開発中のものです。
2012/03/02(金) 21:17:59.01ID:jYQpct92バイナリデータをbase64とかで圧縮して送るのがわかりやすいんじゃね
0364名前は開発中のものです。
2012/03/02(金) 21:18:21.61ID:jYQpct920365名前は開発中のものです。
2012/03/03(土) 19:48:13.72ID:dgdqA+pFこれ俺も知りたかったサンクス
0366名前は開発中のものです。
2012/03/04(日) 01:50:35.57ID:3HGpDNwg>>そもそもイベントってマルチスレッドで並行処理されてるの?
>されてません
みたいなまとめがあるのは良いことな気がする
0367名前は開発中のものです。
2012/03/04(日) 02:25:49.44ID:futbCa+6何か前に処理速度のサンプル募集してた気がするけど
0368名前は開発中のものです。
2012/03/04(日) 03:52:28.22ID:xFJ8klA6マルチスレッドっても描画処理がマルチスレッド、でイベントモデルは従来通り
0369名前は開発中のものです。
2012/03/04(日) 04:00:44.83ID:futbCa+6色んな処理が全部マルチスレッドになればいいのに
つってもそんな処理速度を求められる事とかそう無いだろうけど
0370名前は開発中のものです。
2012/03/04(日) 04:06:35.81ID:futbCa+60371名前は開発中のものです。
2012/03/04(日) 11:46:35.49ID:wyiUjJC/マルチスレッドが何なのかも知らない
0372名前は開発中のものです。
2012/03/04(日) 15:08:53.31ID:UWhW+okG試してみたらうちでもそうなった。
バグかも?報告してみ。
0373名前は開発中のものです。
2012/03/04(日) 15:30:13.25ID:UWhW+okGから参照されてて、レイヤーの Fill/FillColor/BlendColor/RemoveConstOpacity/
FillMask/CopyRect/Blt/InternalAffineBlt からしか使用されてないみたい。
実際設定しても、(特に自前でdll書いたりしてると)あまり変化はないね(Corei3の
2core/4threadで確認)。
こういうinternal infoってどっかにまとめておきたいなぁ…
0374名前は開発中のものです。
2012/03/04(日) 15:31:42.80ID:3HGpDNwg吉里吉里系のWikiみたいのって、実質個人のWebサイトと変わらないここくらい?
0375名前は開発中のものです。
2012/03/04(日) 15:51:41.76ID:O4CJQmyV排他処理やらスレッド生成やら色々オーバーヘッドが生ずるわけだしね。
再現性低いバグが仕込まれる原因にもなる。
0376名前は開発中のものです。
2012/03/04(日) 15:53:40.76ID:3HGpDNwg画像処理の効果期待だよねえ
0377名前は開発中のものです。
2012/03/04(日) 17:34:03.56ID:UWhW+okG考えた方がいいかもしれないね。ちょっと自分のdllをMultithread化して
みよう。
GetAdaptiveThreadNumの引数が(w*h, 150)とか(w*h, 84)とか(w*h, 66)とか
なんか根拠あるのかなぁ。「XXで実測した結果」とかだったら書いといて
欲しかった…。
0378名前は開発中のものです。
2012/03/04(日) 18:57:33.27ID:YfdVm6Tu遅くなりましたが、ありがとうございます。
TJSの方はまだ全く理解できていないのでがんばってみます!
0379名前は開発中のものです。
2012/03/04(日) 21:09:03.54ID:gQsfb15Xオープンソースってこと忘れてた
いい機会だししーぷら覚えようかな
0380名前は開発中のものです。
2012/03/04(日) 21:37:46.86ID:1YG55LbR教えて頂きたいんですが、ボタン等を非表示にしてる最中に、
“ボタンの上にマウスが乗った”イベントが発生しない様にする方法は
ありませんか?
簡単に言うと、TJSでボタンレイヤを作成し、3つ程並べており、
更に以下の機能を設定してるとして下さい。
@.マウスカーソルが乗った場合、そのボタンの説明ウィンドウが出る。
A.ボタンをクリックすると、説明ウィンドウ含めて全て非表示にする。
んで、ボタンをクリックした瞬間にマウスを動かすと、非表示中に@の処理が
起動してしまうらしく消したはずの説明ウィンドウが表示されてしまうのです。
一般的な対象方法含め、良い方法があれば教えて頂きたく、宜しくお願いします。
0381名前は開発中のものです。
2012/03/04(日) 21:39:20.74ID:UWhW+okGソースがあっても、377のように「なぜそう書かれているのか」がわかんない
ことがあるから、何でも分かるわけじゃないんだよね。ご注意を。
書いた「意図」を残す意味で、コメントとか仕様書とかって大事なんだけど、
そのあたりが吉里吉里には不足しているので困ってる。
0382名前は開発中のものです。
2012/03/04(日) 21:57:16.14ID:eCt8kvZyボタンをクリックした場合の処理の中でフラグを立ててるようにして、
マウスが乗った場合の処理の中ではフラグが立ってない場合のみ説明が出るようにする
ということでいいんじゃね
0383名前は開発中のものです。
2012/03/04(日) 23:00:20.33ID:xFJ8klA6吉里吉里は典型的な Borland C++ の VCL のForm ベースプログラムだよ
特に変なことはしてないのでわざわざ仕様として書く必要が無いんだと思われ。
そっちの仕様を把握した上で、個別機能モジュールの *Intf.h のコメントみつつ、
TTVPMainForm と TTVPWindowsForm の実装を順に追えば基本は理解できるんじゃないかな
0384名前は開発中のものです。
2012/03/05(月) 00:45:05.55ID:CBgYJhyB早急な解答ありがとう御座います。その方法で対応しました。
もう1点質問なんですが、爆発エフェクトを発生させるTJSを作成したのですが
仕様としまして、爆発の画像データを読み込んでおき、エフェクトは別途発生タイミングで
レイヤを生成、assignImagesで画像を共有し、エフェクトを表示後、廃棄としているのですが
どういう訳か、多数の廃棄を繰り返すと、開放や非表示が遅くってしまいます。
何故か、setImagePosでの表示切り替えは遅くならないのですが、非表示にする時や
レイヤを開放する時だけ遅くなり、処理落ちでは無く、しばらくしてもこの現象が治りません。
エフェクトレイヤは、Dictionary型に格納しており、開放できている事は、countで確認しております。
開放に失敗し、レイヤが異常な数になっている訳ではなさそうです。
因みに、エフェクトレイヤを3個くらいずつ作る分には、この現象はおきません。
色々試して結果、25個くらいずつで発生しております。
可能性としまして、invalidateで開放が上手くいかないパターンがある。
または、Dictionaryに随時追加&削除を大量にしているのが問題と考えましたが、
対処方法は全くわからず、困っております。
この現象の回避方法がわかりましたら、教えて頂きたく、宜しくお願いします。
0385名前は開発中のものです。
2012/03/05(月) 01:07:51.24ID:WsWfRU6H分からんけどSystem.doCompactでガベコレ走らせてみるとか
Shift+F12押せばコンソールにレイヤ構造出力されるからちゃんとレイヤなくなってるかはそれでチェックできる
0386名前は開発中のものです。
2012/03/05(月) 16:38:26.92ID:ogqGQR0A1. 吉里吉里本体がウインドウメッセージや内部処理からイベントを生成する
・ウインドウ/レイヤ系/サウンド系のイベントは即配信されてTJS実行
・タイマやトリガは指定の優先度で吉里吉里のイベントキューに積まれる
・プラグインからも TVPPostEvent でイベント登録可能
2. TJSイベント処理呼び出し開始タイミング
一連のウインドウメッセージの処理が終わったタイミングでアイドル処理としてTJSイベント配信処理が開始(Application->OnIdle 経由)
・contfreq=0 で continuous handler 動作中は強制でアイドル処理が呼ばれ続ける
・イベントキューにイベントがつまれた時はダミーのウインドウメッセージを発行するので必ず次のアイドル処理もおこる
・50msに一回、終了判定やガベージコレクト処理起動なども含めたイベント配信がある(TVPMainForm::SystemWatchTimerによる)
3. TJSイベント処理。処理入り口は TVPDeliverAllEvents()
(1)優先イベント>通常イベントの順でTJS呼び出し
(2)アイドル系処理
a. アイドルイベントのTJS呼び出し
b. フラグが立っていれば continuous handler のTJS呼び出し
c. ウインドウ画面更新イベントの処理(更新があった場合それを実画面に反映)
(1)用の優先イベントがある場合はそれが無くなるまで(中途で積まれた場合も)(2)のアイドル系処理はとばされて次の回送り
(2)b. の continuous handler は以下の場合に動作フラグが立ちます
・vsync 待ち有りならその直後
・vsync 待ち無しで contfreq=0 の時は毎回
・vsync 待ち無しで contfreq>0 なら指定fps相当のインターバル経過後
画面更新はアイドル処理時のみで描画処理用にタイミングをあわせるには、continuous handler か atmAtIdle なトリガが適切ということになります。
vsync 配慮するなら continuous handler のほうがちらつきにくいタイミングになります
レイヤのトランジション処理や KAG の Mover は continuous handler を使ってます
0387名前は開発中のものです。
2012/03/05(月) 16:51:16.59ID:ogqGQR0A・シングルスレッドモデルなのでTJS呼び出しは単純な無限ループだけで busy loop になって中断不能。
・TVPPostEvent 含めて別スレッドからの吉里吉里機能呼び出しは Windowプロシージャの経由が必要
・contfreq=0 での continuous handler は画面は更新されるがCPUを食い尽くす
・トリガでイベントを無限呼び出ししたりするとこれもCPUを食い尽くす
・優先イベントを無限呼び出しすると画面更新無いままCPUを食い尽くす
トランジション時に液晶が鳴いたりするのは、無制限呼び出しで、限界まで更新処理がはしることによるものです。
比較的新しい版の吉里吉里では -contfreq で抑制可能になっているので、多用するなら指定していたほうが良いです。
トランジション処理は selfupdate=true なら continuous handler での更新が無いので、
自前で Timer と AsyncTrigger などで処理するようにすれば continuous handler を一切使わないことも可能です。
Vista 以降だと vsync を意識する必要はなくなってるはずなので、そちらのほうがむしろ構造としてはシンプルかもしれません
0388名前は開発中のものです。
2012/03/05(月) 19:27:21.66ID:ndoR4mUH保存した。勉強になりますた。
どうせなので聞きたいのだけど、
>・TVPPostEvent 含めて別スレッドからの吉里吉里機能呼び出しは Windowプロシージャの経由が必要
別スレッドから呼んだら駄目なのは各機能がスレッドセーフでないからだと思うのだけど、
「Windowプロシージャを経由して呼び出す」のは具体的にどういった方法でしょう。
よかったら教えてください。
0389名前は開発中のものです。
2012/03/05(月) 20:04:43.90ID:ogqGQR0AウインドウプロシージャはOSによって吉里吉里本体同様にメインスレッドで単独で走ることが保証されてるので、
・自前で不可視のウインドウクラスとそのウインドウを作ってそのプロシージャに吉里吉里を呼び出す処理を書く
・スレッドにはそのウインドウの HWND を受け渡す
・スレッドからその HWND を指定して PostMessage
これで処理できる。
吉里吉里内部だと、Borland C++ の便利関数を使ってる。
例えば win32/WaveImpl.cpp 中の以下のような処理
UtilWindow = AllocateHWnd(UtilWndProc);
これで準備した内部ウインドウに
::PostMessage(UtilWindow, WM_USER+1, 0, 0);
これでメッセージおくってる
VCで書かれたプラグインの例だと、httprequest プラグインは吉里吉里の Window を使って目的の処理を実装してる。
Window クラスに HWND とる口と、任意のメッセージIDに対するプロシージャを登録する口 ( Window.registerMessageReceiver )
があるのでそれで対応できる。
ただ、吉里吉里のウインドウはフルスクリーンまきこまれも配慮する必要があって対応が面倒くさいので、
今新規に作るのなら shellexecute プラグインでやってるように、Win32 API で自前で窓を作って対応するほうが
プラグインの独立性も保ちやすくて良いと思います
0390名前は開発中のものです。
2012/03/05(月) 20:34:37.62ID:FyR5V9Dq>>386の見出し1.2.3.は処理の順番?
疑問なんだけど、タイマーって時間がきたら実行されるじゃん?
そのときに吉里吉里が他のイベント(たとえばボタンクリックとか)を処理してたら
それが終わるまでonTimerは発生しないの?
でもそれだと時間どおりに実行される保証はないよね
0391名前は開発中のものです。
2012/03/05(月) 20:46:50.28ID:ndoR4mUH理解できました、ありがとうございます。
shellExecute のソースが分かりやすかった。
すると、スレッド間同期とかいらない処理(ログ出力等)はウィンドウプロシージャに次々丸投げして行けばおkなわけか。
これは目から鱗。
0392名前は開発中のものです。
2012/03/05(月) 21:17:20.78ID:ogqGQR0Aその通りです。吉里吉里はリアルタイムシステムじゃありません。
Timer は「指定時間以降いつか実行される」というもので正確な時間保証は皆無です
0393名前は開発中のものです。
2012/03/05(月) 21:31:52.37ID:FyR5V9Dqってどうも納得いかなかったけどそういうことなのね
ひとつスッキリしたわありがとう
0394名前は開発中のものです。
2012/03/05(月) 21:33:03.89ID:JZE2rLef0395384
2012/03/05(月) 21:36:08.62ID:CBgYJhyB>385
ご回答ありがとう御座います。
教えて頂いた方法で確認しましたが、レイヤは開放されており、
System.doCompactも効果ありませんでした。
しかしながら、タスクマネージャにて確認した所、使用メモリが
がんがん増えて行き、全く開放される気配がありませんので、
レイヤはなくなっているが、メモリの開放が行われない状態の様です。
もう少し頑張ってみます。
0396384
2012/03/05(月) 23:56:46.50ID:CBgYJhyBDictionary型にアニメーション用の情報classを随時追加、削除を繰り返してるんですが
削除の時にメモリが開放されないみたいです。
classだからいけないのか、Dictionary型に大量に追加削除してるのが行けないのか・・・。
0397名前は開発中のものです。
2012/03/05(月) 23:58:16.18ID:JZE2rLefコード晒してみたら?
0398名前は開発中のものです。
2012/03/06(火) 09:28:54.59ID:nc9fIAbJDialogLayer.addButtonメソッドの後半、linksに情報詰める所で
links[numLinks] = %[
(略)
x : [x],
(略)
];
となってるんですがどういう意味なんでしょうか?
dmでxの中身見てみたらどうも要素数1の
配列オブジェクトができてるみたいですが
普通にx:x, ではダメなのか、意図がよくわかりません。
0399名前は開発中のものです。
2012/03/06(火) 10:33:43.35ID:FBndGo9Dvar x = [1,2,3];
とかと同じ
コード読んでないから意図は知らない
0400名前は開発中のものです。
2012/03/06(火) 13:32:41.01ID:1MnIrtpMKAGのMessageLayerのlinksでも配列になってるからそれに合わせたんじゃね
MessageLayerの方だとハイパーリンクで実際に複数点使ってる
0401名前は開発中のものです。
2012/03/06(火) 19:20:13.82ID:nc9fIAbJ変数を[]で囲むと特別な意味があるのかと勘違いしてました。
確かに配列宣言の形ですね。お恥ずかしい・・・
>>400
MessageLayer確認しました。
そういうことだったんですね。
ありがとうございました。
0402sage
2012/03/06(火) 23:03:55.75ID:wMvjlXw/あるのでしょうか?
いろんなサイトを捜してみても、その様な自体の事を書かれているのを見つけ出す
事が出来ないのですが……
ちなみに使用していますパソコンのOSは「Windows Vista Service Pack 2」なの
ですが「krkrconf.exe」を開こうとしても「指定されたファイルは吉里吉里実行可
能ファイルではありません」と出て、開けないのですが
何か参考になる事がありましたら、お知恵をお貸し下さい
0403名前は開発中のものです。
2012/03/06(火) 23:43:01.09ID:8wJHNmyJ一応確認しておくが
[krkrconf.exe を起動]→(ファイル選択ダイアログが出てくる)→[krkr.eXe を選択して開く]
あるいは
[krkr.eXe を krkrconf.exe のアイコンにD&D]
この手順を間違いなくやっているよな?
まさか krkr.eXe 以外のファイルを krkrconf.exe で開こうとしたりしていないよな?
0404名前は開発中のものです。
2012/03/06(火) 23:52:27.62ID:qLqch5LN初心者だから見当外れだったら悪いんだけど…制作していくゲーム内の設定で良いなら、とりあえずここの手順に添って、
ttp://kagru.web.fc2.com/index.html
明日のためにその2、の項で拡張子を書き換えたConfig.tjsを触れば変えれるけど…そういうこととは違う?
0405名前は開発中のものです。
2012/03/07(水) 07:42:49.38ID:olErW+j5下のコードを実行するとコンソールにtrace1とtrace2が表示されるのですが
trace1で停止させるにはどうすればいいのでしょうか?
[iscript]
kag.conductor.sleep();
kag.conductor.interrupt();
kag.process( ,"*test");
[endscript]
[trace exp="0"]
*test
[trace exp="1"]
[s]
[trace exp="2"]
[s]
実際には右クリックメニューを表示する際に一度KAGを止めて、
メニューに応じて該当シナリオファイルにジャンプさせたいのですが、
ジャンプ後の[s]タグで止まってくれずに困っています。
0406sage
2012/03/07(水) 08:38:16.25ID:v7/O0XUO「kirikiri2」の中にある「Tools」を開いて「krkrconf.exe」を実行したら
(ダブルクリックまたは管理者として実行するを選択)『吉里吉里実行ファ
イルの選択』が表示されるのですが、内容は「Tools」の内容と同じで、再び
「krkrconf.exe」を始めとするアイコンが表示されてしまうだけで、表示さ
れる筈の指定されている「krkr.eXe」に辿りつく事ができないのです。
これが堂々巡りで続いてしまっております。
何か勘違いをしている可能性もありますが、何卒お教えを御願いいたします。
>>404
アイコンの変更などをしたいと思っていますので、吉里吉里設定を開いて変
更を考えております。
お答えをありがとうございます。
0407名前は開発中のものです。
2012/03/07(水) 08:45:02.60ID:eHaO3qaNその「吉里吉里実行ファイルの選択」で
指定したいkrkr.eXeの入ってるフォルダを選んでexe指定するんじゃないのか
0408名前は開発中のものです。
2012/03/07(水) 18:38:23.22ID:evKFU447それ、「ツールの使い方が分からない」じゃなくて「Windowsの使い方が分からない」だろ。
あんたは上に[ファイルの場所]のプルダウンとか[1つ上のフォルダへ]とか見えない人間なのか?
直接パスを打ち込んでファイル指定したりできない人間なのか?
ツールにファイルをD&Dして起動したりしたことない人間なのか?
やりかたは既に >>403 に書かれてるぞ。
0409名前は開発中のものです。
2012/03/08(木) 03:19:56.18ID:V1H9mFWqこれ初めて知った
一々フォルダ辿らなくて良かったのか、なんという事だ
0410sage
2012/03/08(木) 07:03:17.97ID:Ki8C0egQ>>409
> [krkr.eXe を krkrconf.exe のアイコンにD&D]
言われて、その方法があるのを思い出しました。
いろんなサイトで一般的に書かれている方法しか頭に無く、その方法を繰り返して
応用と言うか他の手段を試すのを失念していました。
ありがとうございます。
0411名前は開発中のものです。
2012/03/08(木) 22:58:16.78ID:LeaoJI2v弄る部分の取っ掛かりが見つからない。
何かヒントを貰えないだろうか?
0412名前は開発中のものです。
2012/03/08(木) 23:57:15.22ID:f3YDfk0Q0413名前は開発中のものです。
2012/03/09(金) 00:15:20.61ID:kuOGSWSZネイティブプラグインから WinAPI を直に叩いてハック紛いのことをしないと差し替えるのは無理だろうね。
自分でデザインしたいなら >>412 の言うように Config.tjs の menu.visible を false に設定して
TJS なりで独自のメニューを組むのが常套手段。
0414名前は開発中のものです。
2012/03/09(金) 12:07:09.38ID:PJQ4n6y3なるほど、あの表示はOSなのか。
どうりでsystemフォルダを探しても、バーの画像や指定が見つからないわけだ。
ありがとう、ちょっと難しそうだけど非表示にして独自のを実装できるよう頑張ってみるわ。
0415名前は開発中のものです。
2012/03/09(金) 22:48:44.86ID:MwJ8EbQDまたはtjsを使用すれば実装するのは可能なのでしょうか?
例
[eval exp="tf.hoge=true"]
[tf.hogeが偽の時に処理したいもの]←tf.hogeが真なのでまだ処理させない
・
・
・
[eval exp="tf.hoge=false"]←このタイミングで処理を開始する
0416名前は開発中のものです。
2012/03/09(金) 22:57:09.41ID:0dNvDIdz0417名前は開発中のものです。
2012/03/09(金) 23:03:30.24ID:WRzedZvN変数を自分で変えるんならこのときに一緒に呼べばいいんじゃないの?
頻発するんだったらマクロ化しちゃううとか
0418名前は開発中のものです。
2012/03/10(土) 11:55:38.86ID:cEhuOf3Cあれで自作メニューとかやると、常時イベント監視させて、条件が揃うと動くような仕組みになるから
他の人が言うように、変数動かすならそのタイミングで走らせればいいだけだし
キー押された時にするなら、キーにそのイベント割り当てればいい
0419名前は開発中のものです。
2012/03/10(土) 13:16:32.43ID:e93HhPq40420名前は開発中のものです。
2012/03/10(土) 14:30:55.26ID:Inxy9ed10421名前は開発中のものです。
2012/03/10(土) 15:34:03.36ID:RAbamJYg全然速度が上がらないから実測してみたら、CreateThread()や
_beginthreadex()が思いのほか遅く、Core2Duo 2GHzで一回あたり
0.15〜0.2msもかかるから、いろいろあわせて4threadだと生成する
だけで1ms近くかかっていたことがわかった。
スレッドをいちいち生成しないように、スレッドプール作って実行すると、
CPUコア数(HyperThreadは効果薄かった)分くらいまでは大体リニアに
性能が上がった。
今の吉里吉里もマルチスレッド対応といいながら画面分割のたびに
スレッド作ってるから、そのあたりをちょっと変えればもっと性能
出そう。
1msってたいしたことないと思うかもしれないけど、殆どの画面
処理は1ms以下で終わるから、それに比較するといちいちCreateThread()
するのは遅すぎる、という話。
自作dllのマルチスレッド化を考えてる人への参考までに。
0422名前は開発中のものです。
2012/03/10(土) 15:46:29.47ID:qb2cL6Mn吉里吉里本体側に汎用でコア数分のスレッドプールもっておいて、プラグインから
それの呼び出しを要求できるような口があれば一番いいのかな。
0423名前は開発中のものです。
2012/03/10(土) 17:38:07.34ID:RAbamJYgそうそう、作ってる間、そういうのがあればいいのに、と思ってた。
ただ、staticなglobalの関数を呼ぶならともかく、任意のクラスの
任意のメンバ関数を外から呼び出すのが難しいので、結局テンプレートで
作るしかないから、汎用化は難しそう。
void startThread<T>(T *instance, T::*func, void *arg);
みたいなプロトタイプならO.K.だけど、これだとスレッドプールは
クラスTごとに別になってしまうし。
# 別になってもスレッドが寝てるだけならパフォーマンスに影響しない
# からアリだけど。
結局、今はATLのCThreadPoolを継承して、上のような関数を間に
はさんでなんとかしているけれど、やっぱり少し使いにくい…。
0424名前は開発中のものです。
2012/03/10(土) 17:53:53.33ID:upTpN72gというか Boost.Thread を(ry
0425名前は開発中のものです。
2012/03/10(土) 18:23:42.49ID:qb2cL6Mnだけで、任意のクラスのメソッドよびたければラップ関数渡せ、でいいんじゃないかな。
他の機能でもけっこうそのスタイルのものあったと思うし
今の仕事の山が終わったらちと検討して組み込み考えてみるよ。
無事できたら取り込んでもらおう
0426名前は開発中のものです。
2012/03/10(土) 18:40:58.29ID:fmDkgpuF0427名前は開発中のものです。
2012/03/10(土) 18:54:57.87ID:qb2cL6Mn既定値とずれてるときに増減してるだけで、通常はすっとばされるはずだからこれは誤差の範囲じゃないかな……
以下を stub 側に公開すれば事足りそう
GetThreadNum/GetAdaptiveThreadNum/BeginThreadtask/ExecThreadTask/EndThreadTask
0428名前は開発中のものです。
2012/03/10(土) 18:56:34.50ID:fmDkgpuF上がらない理由は、スレッド処理が「レイヤの1命令実行単位」
になっているせいで、元々マルチスレッド化される処理の時間
単位がかなり短めなせいです。
特に吉里吉里はその部分はもともとコード最適化されちゃってるんで(^^;
重いアフィン処理を面積の大きいレイヤに対して適用すると理論値に
近い速度が出るようになりますよ。
0429名前は開発中のものです。
2012/03/10(土) 19:04:34.18ID:fmDkgpuF実行する処理の処理ピクセル数から事前予測する関数なんだけど、処理ごとに
負荷がどのくらいかピクセル数に任意の「係数」をかけて計算するという極めて
adhocな実装なので、公開してもあまり意味が無いかも…。
公開するなら GetThreadNum/BeginThreadtask/ExecThreadTask/EndThreadTask の4つで。
0430名前は開発中のものです。
2012/03/10(土) 19:15:55.53ID:fmDkgpuFstatic tjs_int GetAdaptiveThreadNum(tjs_int pixelNum, float factor)
{
if (pixelNum >= factor * 1000)
return GetThreadNum();
else
return 1;
}
処理ピクセル数がfactorに1000掛けた値以下なら分割処理するように
してます。
一番軽いFill処理でfactorが150くらいなので、割と大きな面積でない
と分割処理がされないようになってるのがわかるかと思います。
0431名前は開発中のものです。
2012/03/10(土) 19:16:24.36ID:fmDkgpuFマンスの悪化を起こすことなく最大限のパフォーマンス向上を達成する
ため」です。
Corei7などの最近のCPUならこんな回りくどいことをせずに「必ず分割」
してしまっても最大限の高速化効果が得られるんですが、特に古いマルチ
コア環境の場合、スレッドを起こす処理だけでもけっこうなオーバーヘッド
があって、処理面積が小さいのにスレッド処理を行うとむしろパフォー
マンスが悪化するケースが多々ありました。
本当はスレッドを起こす速度を計測したりして個々の環境で敷居値を決定
するべきだったのですが、精密に測定する方法が思いつかなかったので断念。
吉里吉里コアは様々なPC環境で動かされるプログラムなので、古い環境で
実行速度が遅くなるような変更を加えるわけにはいかず、最大公約数的に
現在の実装に落ち着いています。
0432名前は開発中のものです。
2012/03/10(土) 19:24:59.08ID:fmDkgpuFパイプラインを見直してスレッド生かしたまま複数の描画処理を並列
実行出来るようにするべき…なんだけどシングルスレッド前提の
吉里吉里の設計で後付けでそれやるのは難し過ぎました。
吉里吉里3は最初からそういう方針で設計しているようですね。
0433名前は開発中のものです。
2012/03/10(土) 19:30:10.27ID:RAbamJYg説明ありがとう、よくわからなかった部分がものすごくクリアになったよ。
そうか、TVPThreadListはプールのことだったんだね。これは俺の勘違い。
みんなごめんなさい。このあたりソースにコメント一言書いてあれば…。
でも、ExecThreadTask()で呼べるのはやっぱりグローバルな関数だけ
なんだね。そのうえstaticで外から呼べないから、クラスのメンバ関数
実行したいなら、やはり自分で何か書くしかないかー。
> 公開するなら GetThreadNum/BeginThreadtask/ExecThreadTask/EndThreadTask の4つで。
これは期待。そうすれば外付けdllの作者がいろいろやりやすくなるから。
…できればメンバ関数も呼べるようにして下さい。
0434名前は開発中のものです。
2012/03/10(土) 19:33:37.85ID:fmDkgpuF「メンバ関数へのポインタ」は、相互にキャスト不能です。
主に仮想関数の実装の関係。
0435名前は開発中のものです。
2012/03/10(土) 19:34:10.04ID:w0M7k3790436名前は開発中のものです。
2012/03/10(土) 20:16:37.69ID:RAbamJYgあれ、BeginThread()中でTVPThreadListからpop_back()してるから、
スレッド数を減少方向に変更する時は削除してるのではないの?
なので、いろいろ実測してみた。
画面が複雑でいろんなサイズの画像が混在する(処理毎にスレッド数が
異なるようにした)上でレイヤ毎に処理すると、それぞれの処理のために
BeginThread()でスレッドの作成(削除は待たないの?)が頻発してて、
やっぱりここはネックのひとつになってるみたい。スレッドプールがひとつ
しかなくて、これを大きくしたり小さくしたりするからじゃなかろうか。
単純に「小さくしないようにする」だけで、結構マシになった。
スリープ中のスレッドが殆どリソースを食わないなら、いっそ減少させなく
てもいいかもしれない。どうせ今最大8までに制限されてるし。
ほかにデメリットあるかしらん。
> 「メンバ関数へのポインタ」は、相互にキャスト不能です。
そう、だから自前のスレッドプールテンプレート作って、処理(というか
クラス)毎にスレッドプールを別に持った方がいいかな、と思い始めたのです。
幸か不幸か今自前のはそうやって実現しちゃったし、これなら
外付けで実装できるし。「休眠スレッドはリソースを食わない」が
前提だけど。
0437名前は開発中のものです。
2012/03/10(土) 20:37:51.88ID:fmDkgpuF「吉里吉里に指定した描画スレッド数」を基準に決めてるはずなのですが…。
プールの増減が起こるのは理屈としては、drawThreadNumプロパティを変更
した直後の一回のみ、のはず。
0438名前は開発中のものです。
2012/03/10(土) 20:56:25.93ID:RAbamJYg処理が間に挟まってた。はずすと確かに、性能的にはスレッド減少
させても大丈夫になった。
>>437
指摘ありがとう!
はからずもCreateTread()が重いことはまた確認できてしまったので、
自前のdllはやっぱりスレッドプール自前で持つようにしようかなぁ…。
■ このスレッドは過去ログ倉庫に格納されています