トップページgamedev
997コメント362KB

■吉里吉里/KAG/TJS雑談質問スレ■その25

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2011/12/16(金) 09:12:24.47ID:abdXwpcP
ノベルゲーム製作ツール吉里吉里/KAGのユーザーが雑談・質問をするスレです。
自作ゲームの進行状況や製作ツールについての話、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/
0404名前は開発中のものです。2012/03/06(火) 23:52:27.62ID:qLqch5LN
>>402
初心者だから見当外れだったら悪いんだけど…制作していくゲーム内の設定で良いなら、とりあえずここの手順に添って、
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]タグで止まってくれずに困っています。
0406sage2012/03/07(水) 08:38:16.25ID:v7/O0XUO
>>403
「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
>>406
それ、「ツールの使い方が分からない」じゃなくて「Windowsの使い方が分からない」だろ。

あんたは上に[ファイルの場所]のプルダウンとか[1つ上のフォルダへ]とか見えない人間なのか?
直接パスを打ち込んでファイル指定したりできない人間なのか?
ツールにファイルをD&Dして起動したりしたことない人間なのか?
やりかたは既に >>403 に書かれてるぞ。
0409名前は開発中のものです。2012/03/08(木) 03:19:56.18ID:V1H9mFWq
> [krkr.eXe を krkrconf.exe のアイコンにD&D]
これ初めて知った
一々フォルダ辿らなくて良かったのか、なんという事だ
0410sage2012/03/08(木) 07:03:17.97ID:Ki8C0egQ
>>408
>>409
> [krkr.eXe を krkrconf.exe のアイコンにD&D]

言われて、その方法があるのを思い出しました。
いろんなサイトで一般的に書かれている方法しか頭に無く、その方法を繰り返して
応用と言うか他の手段を試すのを失念していました。
ありがとうございます。
0411名前は開発中のものです。2012/03/08(木) 22:58:16.78ID:LeaoJI2v
メニューバーを自作の画像に差し替えようとしてるんだけど
弄る部分の取っ掛かりが見つからない。

何かヒントを貰えないだろうか?
0412名前は開発中のものです。2012/03/08(木) 23:57:15.22ID:f3YDfk0Q
メニューバーを非表示にするとか
0413名前は開発中のものです。2012/03/09(金) 00:15:20.61ID:kuOGSWSZ
アプリケーションのメニュー バーのことを言っているなら、あれはWindowsのGUIによるものだから
ネイティブプラグインから WinAPI を直に叩いてハック紛いのことをしないと差し替えるのは無理だろうね。

自分でデザインしたいなら >>412 の言うように Config.tjs の menu.visible を false に設定して
TJS なりで独自のメニューを組むのが常套手段。
0414名前は開発中のものです。2012/03/09(金) 12:07:09.38ID:PJQ4n6y3
>>412,413

なるほど、あの表示はOSなのか。
どうりでsystemフォルダを探しても、バーの画像や指定が見つからないわけだ。

ありがとう、ちょっと難しそうだけど非表示にして独自のを実装できるよう頑張ってみるわ。
0415名前は開発中のものです。2012/03/09(金) 22:48:44.86ID:MwJ8EbQD
kagのタグである変数が偽になったら動作させるようなものってあるのでしょうか?
またはtjsを使用すれば実装するのは可能なのでしょうか?


[eval exp="tf.hoge=true"]
[tf.hogeが偽の時に処理したいもの]←tf.hogeが真なのでまだ処理させない



[eval exp="tf.hoge=false"]←このタイミングで処理を開始する
0416名前は開発中のものです。2012/03/09(金) 22:57:09.41ID:0dNvDIdz
hoge.ksにでも処理したい内容書いておいて必要になったら[call storage=hoge.ks]するんじゃなんでダメなの?
0417名前は開発中のものです。2012/03/09(金) 23:03:30.24ID:WRzedZvN
>[eval exp="tf.hoge=false"]←このタイミングで処理を開始する

変数を自分で変えるんならこのときに一緒に呼べばいいんじゃないの?
頻発するんだったらマクロ化しちゃううとか
0418名前は開発中のものです。2012/03/10(土) 11:55:38.86ID:cEhuOf3C
何か古いツクールっぽい発想の仕方だな
あれで自作メニューとかやると、常時イベント監視させて、条件が揃うと動くような仕組みになるから
他の人が言うように、変数動かすならそのタイミングで走らせればいいだけだし
キー押された時にするなら、キーにそのイベント割り当てればいい
0419名前は開発中のものです。2012/03/10(土) 13:16:32.43ID:e93HhPq4
TJS分かるんならwaittrg使えばいいんじゃないの
0420名前は開発中のものです。2012/03/10(土) 14:30:55.26ID:Inxy9ed1
トリガ発砲するところで直接処理すればいいじゃん
0421名前は開発中のものです。2012/03/10(土) 15:34:03.36ID:RAbamJYg
377 に触発されて、自作の画像処理dllをマルチスレッド化してみた。
全然速度が上がらないから実測してみたら、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
>>422
そうそう、作ってる間、そういうのがあればいいのに、と思ってた。

ただ、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::function とか使ったらどう?
というか Boost.Thread を(ry
0425名前は開発中のものです。2012/03/10(土) 18:23:42.49ID:qb2cL6Mn
吉里吉里のプラグインインターフェース的には、呼び出し登録は全部C関数+voidポインタ一つ、
だけで、任意のクラスのメソッドよびたければラップ関数渡せ、でいいんじゃないかな。
他の機能でもけっこうそのスタイルのものあったと思うし

今の仕事の山が終わったらちと検討して組み込み考えてみるよ。
無事できたら取り込んでもらおう
0426名前は開発中のものです。2012/03/10(土) 18:40:58.29ID:fmDkgpuF
吉里吉里本体のマルチスレッドは、最初の一回だけCreateThread()したら、あとは破棄せずにプールしてますよ?
0427名前は開発中のものです。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
GetAdaptiveThreadNum() は、実際にスレッド分割する必要があるかどうかを
実行する処理の処理ピクセル数から事前予測する関数なんだけど、処理ごとに
負荷がどのくらいかピクセル数に任意の「係数」をかけて計算するという極めて
adhocな実装なので、公開してもあまり意味が無いかも…。

公開するなら GetThreadNum/BeginThreadtask/ExecThreadTask/EndThreadTask の4つで。
0430名前は開発中のものです。2012/03/10(土) 19:15:55.53ID:fmDkgpuF
ちなみにGetAdaptiveThreadNum()の実装はこんな感じ。

static 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
こういう風になっている最大の理由は、「あらゆるPC環境でパフォー
マンスの悪化を起こすことなく最大限のパフォーマンス向上を達成する
ため」です。

Corei7などの最近のCPUならこんな回りくどいことをせずに「必ず分割」
してしまっても最大限の高速化効果が得られるんですが、特に古いマルチ
コア環境の場合、スレッドを起こす処理だけでもけっこうなオーバーヘッド
があって、処理面積が小さいのにスレッド処理を行うとむしろパフォー
マンスが悪化するケースが多々ありました。

本当はスレッドを起こす速度を計測したりして個々の環境で敷居値を決定
するべきだったのですが、精密に測定する方法が思いつかなかったので断念。

吉里吉里コアは様々なPC環境で動かされるプログラムなので、古い環境で
実行速度が遅くなるような変更を加えるわけにはいかず、最大公約数的に
現在の実装に落ち着いています。
0432名前は開発中のものです。2012/03/10(土) 19:24:59.08ID:fmDkgpuF
本当はマルチスレッドの効果を最大限に得るには、吉里吉里の描画
パイプラインを見直してスレッド生かしたまま複数の描画処理を並列
実行出来るようにするべき…なんだけどシングルスレッド前提の
吉里吉里の設計で後付けでそれやるのは難し過ぎました。

吉里吉里3は最初からそういう方針で設計しているようですね。
0433名前は開発中のものです。2012/03/10(土) 19:30:10.27ID:RAbamJYg
>>426-431
説明ありがとう、よくわからなかった部分がものすごくクリアになったよ。
そうか、TVPThreadListはプールのことだったんだね。これは俺の勘違い。
みんなごめんなさい。このあたりソースにコメント一言書いてあれば…。

でも、ExecThreadTask()で呼べるのはやっぱりグローバルな関数だけ
なんだね。そのうえstaticで外から呼べないから、クラスのメンバ関数
実行したいなら、やはり自分で何か書くしかないかー。

> 公開するなら GetThreadNum/BeginThreadtask/ExecThreadTask/EndThreadTask の4つで。

これは期待。そうすれば外付けdllの作者がいろいろやりやすくなるから。
…できればメンバ関数も呼べるようにして下さい。
0434名前は開発中のものです。2012/03/10(土) 19:33:37.85ID:fmDkgpuF
メンバ関数を直接呼ぶ形式はC++的に無理があったような。
「メンバ関数へのポインタ」は、相互にキャスト不能です。
主に仮想関数の実装の関係。
0435名前は開発中のものです。2012/03/10(土) 19:34:10.04ID:w0M7k379
吉里吉里3って本当に出るの? ていうかまだ作ってるの?
0436名前は開発中のものです。2012/03/10(土) 20:16:37.69ID:RAbamJYg
> 最初の一回だけCreateThread()したら、あとは破棄せずにプールしてます
あれ、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
あー、わかった、テスト用にdrawThreadNumを内部でいろいろ変えてた
処理が間に挟まってた。はずすと確かに、性能的にはスレッド減少
させても大丈夫になった。
>>437
指摘ありがとう!

はからずもCreateTread()が重いことはまた確認できてしまったので、
自前のdllはやっぱりスレッドプール自前で持つようにしようかなぁ…。
0439名前は開発中のものです。2012/03/10(土) 21:12:56.64ID:qb2cL6Mn
>>433
任意のメソッドをC関数にラッピングするだけなら

template<class T>
struct MethodWrapper {
MethodWrapper(T &instance, void (T::*method)()) : instance(instance), method(method) {}
T &instance;
void (T::*method)();
static void callback(void *param) {
MethodWrapper *self = (MethodWrapper*)param;
((self->instance).*(self->method))();
}
};

こういうテンプレート作っておいて

class A;
A a;
MethodWrapper<A> wrap(a, &A::method);
entrycallback(MethodWrapper<A>::callback, &wrap);

こんなかんじで任意のクラスの任意のメソッド(ただし型は固定)に対応できるよ。
真の任意メソッド対応はパラメータのバインド処理も組む必要があるのでさすがにちょっとめんどくさい

それはさておき、公式のほうは公開メソッド化しておいたので、dee さんが次にコンパイルしてくれれば反映されます。
0440名前は開発中のものです。2012/03/10(土) 23:27:21.03ID:RAbamJYg
>>439、他の皆様
いろいろありがとう!とても助かったし、勉強になりました!

テンプレートは、そんなかんじのものをすでに実装済み。もうちょっと
カッコよくできないかなー、と考え中…
0441名前は開発中のものです。2012/03/11(日) 00:26:58.65ID:E/3gazfW
枯れてるソースに深いバグ入れるリスクを負うくらいならはじめから描画にGPU使ったエンジン作ったほうがいいんじゃないの?
広く普及してメンテもほぼ止まってるソースにGPU使いたくないからマルチスレッドなコードを
プロジェクト死ぬまでメンテするとか割りに合わないと思うんだけど。
TJS以上のことをするには吉里吉里は足かせになる。
0442名前は開発中のものです。2012/03/11(日) 00:31:28.80ID:6cDD+Cbb
そーだねえ
PC版吉里吉里は基本もうこのままでいいんじゃないかなあ、
せいぜい各自のプラグイン拡張くらいで

吉里吉里3が掲げているマルチプラットフォームも
吉里吉里Javaが成功すればできそうだし
0443名前は開発中のものです。2012/03/11(日) 01:01:35.83ID:riYvEJN5
>>441
意味不明。
CPUエンジンがマルチコア対応すすめるのはむしろ既定事項じゃん
誰も古いの使うなとか言ってないわけでどう拡張しようと自由だよ
0444名前は開発中のものです。2012/03/11(日) 01:03:41.99ID:6cDD+Cbb
進めるのはいいけどメリット薄いし、「とりあえず最新の落としておくか」ってやったら
既存の安定コードまでバグ混入してて原因不明の不具合に悩まされる可能性とかは
否定できないかな
0445名前は開発中のものです。2012/03/11(日) 01:32:42.25ID:riYvEJN5
杞憂だと思う。
古いの次々消すようなプロジェクトならともかく、履歴も明らかなわけで。

問題になるとしたら、履歴が dee たんちのマシンが死亡したら
ロストする可能性があるのと、コンパイル環境が不自由なことかね>吉里吉里
0446名前は開発中のものです。2012/03/11(日) 01:33:58.41ID:P9PL1KUI
>>441
いや、上のは自作dllのマルチスレッド化の話であって、もともと吉里吉里
本体がどうという話じゃないんだよ。たまたま使える関数をexportしてくれたら
便利じゃないか?というだけで。
それと、吉里吉里にGPU使うコード入れる方がよっぽどボード依存とかを長時間
背負うことになるから、それこそやらない方がいいと思う。自作dllに入れるなら
いいと思うけど。すごい基本的な部分だけ、ならなんとか…なるかも?

つついたことがある人ならわかるけど、やっぱりGPU使うのって互換性の
問題が大きいんだよねぇ。なんで3Dいっぱいの市販ゲームってあんまり
そのあたり問題にならないのか、逆に不思議。よっぽどエンジンが頑張って
いるのかなぁ。
0447名前は開発中のものです。2012/03/11(日) 03:07:25.93ID:tIU3gfm/
KAG
サウンドノベル形式と、下の方に2・3行のウィンドウ形式って
途中で動的に切り替えできますか?
0448名前は開発中のものです。2012/03/11(日) 03:19:03.28ID:nRzJafs9
出来ます
0449名前は開発中のものです。2012/03/11(日) 03:39:04.90ID:tIU3gfm/
ありがとうございました
0450名前は開発中のものです。2012/03/11(日) 03:59:51.38ID:Zl3ckZHs
>>446
国内の3Dバリバリなゲームってほとんどコンソール向けじゃない?
海外のPCゲーはめっちゃ人と金かけてるイメージ
優秀なエンジンもたくさんあるだろうけど
0451名前は開発中のものです。2012/03/12(月) 14:57:25.02ID:05jR40rs
シナリオ走らせると、鍵括弧とか濁点とか、記号で文字が数ピクセルずれるんだが。
文字を揃える方法ってありませんか?
0452名前は開発中のものです。2012/03/12(月) 15:05:39.41ID:8BFIJXpa
等幅系のフォントつかえ
0453名前は開発中のものです。2012/03/12(月) 15:12:58.32ID:05jR40rs
>>452
なるほど。試してみます。ありがとうございました。
0454名前は開発中のものです。2012/03/14(水) 00:09:36.41ID:aNBBAB53
TVPDrawThreadNum も外から使えるようにしてほしい…
0455名前は開発中のものです。2012/03/14(水) 21:40:48.07ID:aNBBAB53
マルチスレッドの話、便乗してテストしてみた。
色々試したら、SetEvent()→WaitforMultipleObjects()がやたらと遅かった。
代わりにクリティカルセッションにする(スレッドが一つでも動作している
間はクリティカルセッションにする)と、性能がリニアに上がる。
汚いのは承知の上で、TVPPongEventListを廃止して、
ExecThreadTask()の中、func実行前にTVPRunningThreadCount++ == 0 の時は
クリティカルセッションに入り、ThreadLoop中のループ末尾に
--TVPRunningThreadCount == 0 の時はクリティカルセッションから抜ける
ようにすることで、性能は出そう。
ただ、これだと汚いのと、本当に今の吉里吉里2だけのチューンになるので
どうかな、という気はする。
まぁ、一つの実験結果、ということで。
0456名前は開発中のものです。2012/03/14(水) 21:43:26.02ID:aNBBAB53
ああ、ごめん、書き忘れてた、WaitForMultipleObject() の代わりに
EnterCriticalSection(&thread_runnning_cs);
LeaveCriticalSection(&thread_runnning_cs);
が必要。
0457名前は開発中のものです。2012/03/15(木) 17:38:33.82ID:Pkh0sbP8
どうせ Win用のチューン部だし、OKなような。コードあっぷしようぜ
0458名前は開発中のものです。2012/03/15(木) 20:12:03.61ID:vuxdhmwU
検証用コード整理するからしばしお待ちを。
0459名前は開発中のものです。2012/03/16(金) 09:49:45.58ID:qUbbXfrL
画像の一部だけ表示するってことできますか?

800*600の画面内に、400*300の画像を用意して、その画像の300*200の部分だけ表示させる、
みたいな。
0460名前は開発中のものです。2012/03/16(金) 10:27:05.54ID:W1JevHUT
>>459
image タグの clipleft, cliptop, clipwidth, clipheight 属性
0461名前は開発中のものです。2012/03/16(金) 10:36:44.97ID:qUbbXfrL
ありがとうございます。

clipの位置を移動するってできますか?
clipleftを0から100に移動
300*200の範囲内で、画像を動いているように見せるような使い方。
0462名前は開発中のものです。2012/03/16(金) 10:41:04.47ID:W1JevHUT
>>461
http://homepage1.nifty.com/gutchie/KAG3Animation.html
0463名前は開発中のものです。2012/03/16(金) 10:43:05.05ID:qUbbXfrL
ああ
クリッピングアニメーションでできますね

一枚の画像だからclipを動かすマクロ作らないといけないかなとか
カットイン調べたりとか見当違いの方向やってました

ありがとうございます
0464名前は開発中のものです。2012/03/16(金) 13:31:17.91ID:aYfO62aW
Layer のプロパティの clip〜 は、レイヤに対する描画処理に対するクリッピングだね
レイヤ合成時の画面に対する単純なクリッピング指定は吉里吉里にはない。

別概念で、imageLeft, imageTop と width, height の調整で描画時のクリッピングは行うこができて、
image タグの clip〜はこれをいじるためのパラメータ。まぎらわしいけど別物

レイヤの配置関係プロパティは以下の3グループでそれぞれ目的が違う。

画像データサイズ imageWidth, imageHeight
画面上での表示領域 left, top, width, height ←この width,height によってクリッピングされる
画像の描画オフセット imageLeft, imageTop

あくまで left, top, width, height 中に画像が出る、という仕様で、
それぞれのプロパティをその範囲に画像が無い領域がでるような値にしようとするとエラーになる
0465名前は開発中のものです。2012/03/16(金) 13:36:17.50ID:qUbbXfrL
アニメーションさせようと思ったら
画像が多くてパターンも作りたいので一個一個asd作るの大変だなと

結局同レイヤ上で同画像のclipleftとcliptopを60msで変化させて表示し続けるマクロ作りました
すんごい力技だと思うので多用はできないなぁ
0466名前は開発中のものです。2012/03/16(金) 13:36:25.53ID:aYfO62aW
ぐ、すまん、最初から image タグの話だった
0467名前は開発中のものです。2012/03/16(金) 13:45:48.79ID:qUbbXfrL
折角調べてくれたのに申し訳ない

*loop
[image storage=&mp.storage layer=1 page=back visible="true" top=200 left=60 clipleft=&tf.left cliptop=&tf.top clipheight=300 clipwidth=200]
[eval exp="tf.left+=1"]
[eval exp="tf.top+=1"]
[jump target="*loop_1"]

みたいなやりかたって邪道なのかな
探してもあんまり見たことない
0468名前は開発中のものです。2012/03/16(金) 13:52:33.80ID:aYfO62aW
>>467
邪道というか、image は毎回画像がロードされるので無駄。
asd の clip 指定は画像ロードは一回だけなので軽い。
asd を自動生成するようにするか、あるいは、あー、kag には imageLeft/imageTop をいじる口がでてないのか

Override.tjs に

AnimationLayer.setOptions(elm) = function(elm) {
global.KAGLayer.setOptions(elm);
imageLeft = - +elm.clipleft if elm.clipleft !== void;
imageTop = - +elm.cliptop if elm.cliptop !==void;
};

こんなかんじで口を足してしまって、

[layopt clipleft=&tf.left cliptop=&tf.top]

としていじれるようにして、ロード以降はそれを使うと良い。はみでるとエラーなんで注意な
0469名前は開発中のものです。2012/03/16(金) 13:54:47.05ID:qUbbXfrL
>>468
やっぱり無駄ですよね。

Override.tjsのやつやってみます。
0470名前は開発中のものです。2012/03/16(金) 18:27:44.65ID:vYmwy9q2
こういうときはsuper〜って書くんじゃなくてglobalからもってくるのかぁ。ほー。
0471名前は開発中のものです。2012/03/16(金) 19:15:06.06ID:fCgVRa70
[emb exp="f.単価=f.単価/2"]円

と表示をしたいのですが、小数点以下は出したくなく四捨五入したいです。
過去ログで「"%.2f".sprintf(n)」と書くと分かったのですが、この[emb]タグの場合どうやって書けばいいのでしょうか?
0472名前は開発中のものです。2012/03/16(金) 19:40:56.48ID:vYmwy9q2
>>471
f.tanka=Math.round(f.tanka/2)
04734712012/03/16(金) 19:54:23.54ID:fCgVRa70
>>472
ありがとうございました!
とても助かりました!
0474名前は開発中のものです。2012/03/16(金) 20:21:40.48ID:WYBPjWoI
レンダリング済みフォント作成ツールってフォントを改変して再配布することになるから
フォントの利用規約上使えないことが多いね

パラメータなんかを表示するために数字0から9まで並べた画像作って切り出して使うのも
「フォントの一部を取り出して再配布」に当たるのかな
規約読むのに疲れてきた
0475名前は開発中のものです。2012/03/16(金) 20:24:43.78ID:75jNb/3G
画像化したのは多くの場合大丈夫でしょ
ダイナとかは画像化すらダメなことが多いから注意必要だけどさ

レンダリング済みフォントは基本フリーフォントと小塚くらいに
しといたほうがいいかもしれないが
0476名前は開発中のものです。2012/03/16(金) 21:08:40.09ID:0/OgHmtv
絵の素材として使うのなら大抵OKだけど、ゲームテキスト用の切り出しは、たとえ画像化でも
フォントデータの改変しての再配布に相当するので多くの場合駄目だよ。0〜9まで、ぐらいだと
判断はわかれそうではあるけど、逆にそのくらいなら自分でまるごとつくったほうがいいんじゃってことにも
基本は明示的にOKとされているもの以外は危険と思っておいたほうがいい

今だと、IPAフォントと、Androidフォント(シーダ/マルベリ) はライセンスはまもれば安全に使えるかな。
0477名前は開発中のものです。2012/03/16(金) 21:39:48.71ID:WYBPjWoI
「擬似フォント的な使用は禁止」とかあると画像切り出しも駄目っぽいよね
数字は欧文フォントで何でもOKなの探すとして
和文フォントはやっぱりプレイヤーのパソコンから選ぶのが無難かな
0478名前は開発中のものです。2012/03/16(金) 21:42:41.80ID:75jNb/3G
でも今なら

>IPAフォントと、Androidフォント(シーダ/マルベリ)

は普通に良い感じじゃないか?
0479名前は開発中のものです。2012/03/16(金) 21:47:59.01ID:0/OgHmtv
うん。addFont プラグインつかえば、レンダリングせずにそのまま ttf を xp3 にパックする形でも使える
0480名前は開発中のものです。2012/03/16(金) 22:08:42.70ID:75jNb/3G
ただ配布形式のせいもあって、ライセンスをどう表記するかがややこしい気もする>Androidフォント
どっかに使用例あるかなあ
0481名前は開発中のものです。2012/03/16(金) 22:21:36.57ID:WYBPjWoI
IPA明朝とゴシックならただ文章を表示するならMSでいいかなあと
androidフォントは恥ずかしながら検索かけても公式の配布ページや利用規約がヒットしなかった
けど読みやすさとデザイン性がいい感じな気がするので見つけられて条件が合っていたら考えてみます
ありがとう
0482名前は開発中のものです。2012/03/16(金) 22:24:19.63ID:kXMe2GXn
フォントなど何でもいいんです!
お偉い方にはそれが分からんのです!
0483名前は開発中のものです。2012/03/16(金) 22:25:22.43ID:75jNb/3G
いやーそれなりには雰囲気違うと思うわ
MSゴシックでデザインしてみりゃわかる
0484名前は開発中のものです。2012/03/16(金) 23:31:17.51ID:0/OgHmtv
>>481
Android の公式レポジトリの中にある、んだけど掘りだすのが大変めんどくさいので
debian でパッケになってるのをもらってくるのが楽

ttp://packages.debian.org/ja/source/sid/fonts-motoya-l-cedar
ttp://packages.debian.org/ja/source/sid/fonts-motoya-l-maruberi

ここの tar.xz ファイルを展開するとライセンスファイルと一緒に入ってる。
ライセンスは Apache ライセンスなので、付属してるライセンスファイル (NOTICE ってファイル)
をわかるように同梱するだけでOK。(正確にはライセンス違反したら駄目だけど違反するほうが難しい)

あと、ライセンスファイルだけだとフォントのことってのがわからんので、
readme.txt の類に「Android のモトヤフォント MTLmr3m.ttf と MTLc3m.ttf を入れてある。ライセンスは NOTICE ファイル」
ぐらいの注意書きをいれとくと良いと思われ
04854812012/03/17(土) 21:04:22.60ID:RcXolvXk
>>484
ありがとう
0486名前は開発中のものです。2012/03/18(日) 04:26:42.51ID:aZST+rCx
丸ゴシックはいい味でるね
0487名前は開発中のものです。2012/03/18(日) 04:27:43.73ID:CHhV6jHc
単なるMSゴシックよりは手軽に高級感出せると思うわ
0488名前は開発中のものです。2012/03/18(日) 09:06:46.53ID:XK97Y7Xf
吉里吉里2ってコンパイラ何使ってるんですか?
無料でコンパイルできる環境ありますか?
0489名前は開発中のものです。2012/03/18(日) 10:05:51.28ID:5lLAidIN
Releaserのおすすめ設定ありますか?
詳しく説明しているサイトがあれば教えてください
0490名前は開発中のものです。2012/03/18(日) 18:01:28.61ID:2GN3FtAV
>>488
公式には Borland C++ Builder 5
6, 2006, 2007 でもコンパイル可能ながら、いずれも入手困難。
フリー公開されていた Turbo C++ Exproler (中身は実質2006) でも
コンパイル可能だがこれも公開終了していて新規入手は不可能

それより後の版(2009, 2010, XE, XE2) は確認されてないが、2009から
文字列の扱いが変わってるらしいので手直し無しでは通らない可能性大
0491名前は開発中のものです。2012/03/18(日) 19:58:07.63ID:XK97Y7Xf
>>490
よくわかりました。
ありがとうございます。
0492名前は開発中のものです。2012/03/21(水) 13:44:01.50ID:YVKoeCot
>>490
c++手に入れたいなら
確かVisual Studio 2005が永久無料配布宣言してなかったけか?
0493名前は開発中のものです。2012/03/21(水) 13:48:06.12ID:bQ+rGgdw
VC++系では吉里吉里本体ソースをコンパイルできないだろ、たしか。

VC対応を試みたのがブランチにあったけど、あれって結局どうなったんだろう。
0494名前は開発中のものです。2012/03/22(木) 14:02:09.10ID:buc/Dfrm
俺も吉里吉里コンパイルしてみたいけど環境が手に入らなくて悲しい
吉里吉里 Java が完成したらそっちいじるのもありだけど、できればオリジナルを触りたいし
なんとか手軽にコンパイルできるようになればいいなぁ
0495名前は開発中のものです。2012/03/23(金) 03:17:14.16ID:2SN7sC/s
仮想機械上でゲームとか()
0496名前は開発中のものです。2012/03/23(金) 13:49:22.73ID:F2nH0mNN
わりと一般的な技術になったよね>仮想機械上でゲーム
0497名前は開発中のものです。2012/03/23(金) 15:13:49.33ID:ZvtcGjV2
Javaアプレットの時代から思うとフラッシュゲーの進歩凄いよな
0498名前は開発中のものです。2012/03/24(土) 04:36:21.24ID:fJxbU7fA
スマホとかのモバイルが発達して来るから、むしろこれからの技術だな。
0499名前は開発中のものです。2012/03/28(水) 03:41:48.66ID:SmHTKm/E
baseレイヤーにはoperateRectのomDodgeで描き込めるのに、layerレイヤーに描き込むとおかしなことに。
どのプロパティをいじればいいんでしょう?(2chの行数制限のため改行をケチってます)
http://www.dotup.org/uploda/www.dotup.org2801900.zip.html

class MainWindow extends Window {
  var base;  var layer;  var sprite;  var timer;
  function MainWindow( width, height ) {
    super.Window();
    setSize( width, height );  setInnerSize( width, height );
    base = new Layer(this, null);
    base.loadImages("back.jpg");   base.setSizeToImageSize();
    layer = new Layer(this, base);
    layer.setSize( width, height );
    layer.fillRect(0,0,width,height,0x3300ff00);
    layer.visible = true;
    sprite = new Layer(this, base);
    sprite.loadImages("sprite.png");  sprite.setSizeToImageSize();
    timer = new Timer(timerCallback, '');
  }
  function startProcess() {
    timer.interval = 100; timer.enabled = true;
  }
  function timerCallback() {
    if(Math.random() < 0.5) base.operateRect(Math.random()*800,Math.random()*320,sprite,0,0,32,32,omDodge);
    else layer.operateRect(Math.random()*800,Math.random()*320+320,sprite,0,0,32,32,omDodge);
  }
}
var win = new MainWindow(800,600);
win.visible = true; win.startProcess();
0500名前は開発中のものです。2012/03/29(木) 01:17:42.50ID:oWF/x4vE
>>499
omDodge とかはαが配慮されてないので ltOpaque なレイヤ以外には基本使えない
0501名前は開発中のものです。2012/03/29(木) 01:56:13.00ID:/+JsHDxV
>>500
そうだったのか……
ありがとうございます
0502名前は開発中のものです。2012/03/29(木) 12:45:54.95ID:oWF/x4vE
>>501
本来不透明な親に対してリアルタイム合成するためのものだからね>合成モード
dest 側で描画前にholdAlpha しておけば合成先の最初から不透明な部分の結果を残すことはできるよ。
パフォーマンスはもちろん落ちるけど
0503名前は開発中のものです。2012/03/29(木) 12:54:57.71ID:/+JsHDxV
どうも
色々試してみます
■ このスレッドは過去ログ倉庫に格納されています