■吉里吉里/KAG/TJS雑談質問スレ■その9
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2006/10/10(火) 06:04:10ID:gTzd6sC4本家BBSで聞きづらい質問や初歩的な質問などでもよいのでわからないことがあればどうぞ。
自分のゲームの進行状況や製作ツール等についての話、TJS等の質問もお待ちしています。
マルチポストはやめましょう。個人叩きも禁止です。
8 http://pc8.2ch.net/test/read.cgi/gamedev/1147590108/
7 http://pc8.2ch.net/test/read.cgi/gamedev/1138099311/
6 http://pc8.2ch.net/test/read.cgi/gamedev/1116774771/
5 http://pc8.2ch.net/test/read.cgi/gamedev/1095183786/
4(タイトルは3) http://pc5.2ch.net/test/read.cgi/gamedev/1081199649/
3 http://pc5.2ch.net/test/read.cgi/gamedev/1067436686/
2(再利用) http://pc2.2ch.net/test/read.cgi/gamedev/1044256119/
1 http://pc2.2ch.net/test/read.cgi/gamedev/1021890648/
吉里吉里2/KAG3雑談質問スレ_過去ログ
http://www.geocities.jp/kirikiri_log/
【公式】
kikyou.info
http://kikyou.info/
吉里吉里ダウンロードページ
http://kikyou.info/tvp/
0732名前は開発中のものです。
2006/12/03(日) 00:10:28ID:R3i0aeWxpendingに直接アクセスすることが好ましくないってことを
言いたいわけなんだが(;´Д`)
TJSはアクセス制限子ないからあれだが、
pendingは間違いなくprivateとして扱われるべき変数だろ。
変なバグを出さないためにもむやみに外部から参照すべきじゃないよ。
本来の実装方針無視してキモいコード書くことに何の意味があるのかと。
TJSのみこれからも使っていくんなら構わないかもしれんが、
おかしなコーディングばっかに慣れちまってどうする。
そもそも不満をこの際ぶちまけちまうと、シナリオファイルの中から
ところ構わずkagの関数に直接アクセスして中身書き換えたりが
ほとんど当然のようになっちゃってるあたりとか、
MainWindowクラスのごちゃごちゃっぷりとか、
Conductorの挙動とか、
kag自体の設計が何かおかしなことになっちゃってるよね
もう本当に捨て時なのかもしれない(´・ω・`)
0733名前は開発中のものです。
2006/12/03(日) 00:12:06ID:mrQXZ4LpKAG から操作するにしても callExtraConductor っスから、
どっちもどっちって感じはしますけど……どうなんだろう。
0734名前は開発中のものです。
2006/12/03(日) 00:34:13ID:bABO2Gal2002年の段階で、数年後ここまで膨れ上がるとはdeeさん自身正直予想もしてなかったんじゃないだろうか。
0735名前は開発中のものです。
2006/12/03(日) 00:54:01ID:mrQXZ4Lpサブルーチン実行中にこの文章は表示されないはず。
[s]
ここにはたどり着かないはず。
*test
callExtraConductor がちゃんとサブルーチンを呼び出せていれば、この文章は表示されるはず。
[waittrig name="testtest"]
waittrig でちゃんと停止していたら、この文章は表示されないはず。
[return]
……結果は、『サブルーチン実行中に〜』 と 『callExtraConductor が』 が表示されました orz
callExtraConductor 呼び出しても、元の KAG ファイルの進行は止まらないのですね orz
0736名前は開発中のものです。
2006/12/03(日) 01:06:40ID:mrQXZ4Lpそれを回避しようよ kag.skipToStop2() を挿入……っと。
すると、処理からクリック待ちのところまで戻りたいのに、クリック待ちは既に終わっていて…… orz
吉里吉里って本当に難しいですね。・゚・(ノД`)・゚・。
0737名前は開発中のものです。
2006/12/03(日) 01:12:52ID:7rEDI0H1と
kag.extraConductor
の違いくらい理解しとけ。リファレンスに書いてあるから。
何の為にExtraConductorがあるのかも調べておいで。
本当いい加減うざいよ。死ねばいいのに。
0738名前は開発中のものです。
2006/12/03(日) 01:14:00ID:7rEDI0H1ごめんなさい、俺も死んどきます。
0739名前は開発中のものです。
2006/12/03(日) 01:20:42ID:cEddTvN0とりあえず素直にKAGで処理したほうが無難だと思うがいかがか。
0740名前は開発中のものです。
2006/12/03(日) 01:21:05ID:9ryZMjv/んー、pendings はわりとさわっていい部類に入るとおもうけどなー。処理を割り込みする手順としては正当だし。
まあ、このへんは感覚の差として、もう設計がぐちゃぐちゃになっちゃってるのは同意ね。
現実問題として内部関数よばないと要件みたせないことが多いからね。
個人的にはKAGそのものを拡張してタグを増やす方向で対応してるよー。
というかそれ以外は基本的にコンダクタの処理を妨害するからだめですね。
0741名前は開発中のものです。
2006/12/03(日) 01:31:01ID:mrQXZ4Lp一応、色々と割り切ってみることにします。
完全停止しなくとも、スキップとか自動読みとかを表示前に切るだけで大分違うでしょうし……
お騒がせいたしました orz
0742名前は開発中のものです。
2006/12/03(日) 01:38:53ID:9ryZMjv/KAGでは記述しようがないことだから困ってるんじゃない?
>>736
あー、それは方法論として間違い。
kag.conductor.status をみて待ち状態ならタグをつっこまないのが正解。
しかし、そのままだとクリックされると処理がすすんでしまって結局不幸に陥ると予想。
透明レイヤを全面にはってイベントが通らなくなくなるようにするとかこざかしい方法もあるけど、いまいち。
やっぱ一環した処理がほしいなら、
OnClick() など UI処理からの呼び出しなら conductor.interrupted は適切に機能する(次のコンダクタ呼び出しから
処理が停止する)から、それを使ってコンダクタの wait系の処理とは無関係にとめてしまうしかないんじゃないかなぁ。
ただ、conductor.interrupted は、処理中にタイトルに戻るとかの処理をされて復帰処理がよばれなかったりすると
地獄におちるので、kag.onConductorJump をフックして、別のシナリオに切り替わる流れではかならずその状態を
強制で戻す必要があります。自分ではまったのを忘れてたよ。あ、あと、そのレイヤ処理とやらの
強制後始末も忘れずにね。
本来は、こういった機構の汎用処理を KAG のコアが提供してくれると一番いいんだろうけどね。
0743名前は開発中のものです。
2006/12/03(日) 02:27:25ID:ReIt0VCE何だかんだと多彩な実装は可能なんだし
人の欲望はげに恐ろしい
0744名前は開発中のものです。
2006/12/03(日) 03:06:12ID:aNPfAlfuゲーム作るのに煩わしい処理を隠蔽する為にフレームワークを使うんだから。
ただ単に当初予測されていた以上の使い方が現れただけ。
だから本当にKAG3を捨てる時期なんだろ。
利用のされ方に応じた同じジャンルのゲーム作るフレームワークがあっても良いジャマイカ?
同じ車でも軽のタイヤとダンプカーのタイヤは違うんだから再開発は必要なんだろう。
題してKAG3を窓から投げ捨てるプロジェクト(笑)
0745名前は開発中のものです。
2006/12/03(日) 05:47:22ID:owAlk0Is機能的にはほとんど大差ないよね? こんな時はこっち使えとか暗黙のルールあるの?
0746名前は開発中のものです。
2006/12/03(日) 07:34:41ID:FY3hKabr大差あるよ
0747名前は開発中のものです。
2006/12/03(日) 10:38:19ID:ePu0k3WCというのが一番の違いなのでそこに着目して使い分けたい
決まった順番で順次入力するようにさせるときは input を使うといいし
自由な順番で何度も行ったり来たり直しながらのときは edit がいいね
0748名前は開発中のものです。
2006/12/03(日) 17:33:48ID:muely7jR自分は706じゃないし吉里吉里での制作は未経験なんだけど、
こういう経験者ならではの話も聞いてみたい。
最初に設計をしっかりしておくってのは大前提だと思うけど。
0749名前は開発中のものです。
2006/12/03(日) 17:48:19ID:cEddTvN0確かに細かいTipsは知りたいかな。
ガキのころからやってる人だと「基本中の基本」で説明するまでもない事でも、
最近始めた人にとっては「そ〜なんだ!」だったりするし。
0750名前は開発中のものです。
2006/12/03(日) 19:33:40ID:48tluaN00751名前は開発中のものです。
2006/12/04(月) 01:36:57ID:2FVTVP4c初心者向けに敢えて間違ってても理解し易く、とかじゃなくて本人の思い込みや脳内補完だらけだ
やる気のある中途半端ほど手に負えないもんはないな
0752名前は開発中のものです。
2006/12/04(月) 01:53:35ID:I4UFE7Q2>最初に設計をしっかりしておくってのは大前提だと思うけど。
冗長性もたせてたけど、その冗長性を忘れて結局組み直す俺がいる。
っていうか読み直すよりそっちのが断然早いし、
当時よりもいろいろわきまえて使い勝手良い物作れるし。
コーディング完璧、これ以上直す事はそうそうないって人じゃないと意味ない。
0753名前は開発中のものです。
2006/12/04(月) 02:12:24ID:DOv2qY8N一部の例外を除いて、今ある講座の多くはシナリオライター出身が
書いてるみたいだから仕方ないんじゃね?
気になるなら指摘してやればいいと思う
0754名前は開発中のものです。
2006/12/04(月) 03:36:52ID:0hrboRn9揚げ句の果てに人を悪者扱い。嘘八百が広まると究極的にweb pageがhome pageみたいな事になるから
嘘ばらまいてる奴のために言ってるんじゃなくて嘘を刷り込まれてる奴のために言ってんのに。
文だけじゃ分かり辛い話だな。
0755名前は開発中のものです。
2006/12/04(月) 03:41:02ID:+Vq7dsL5せっかくだからどのへんが間違ってるか例をあげてみてほしい。
そこのサイトをぱっと見た感じ、読んだ初心者が盲信しそうな雰囲気だと思った。
(きっぱりはっきり書いてあるあたりが)
ていうか初心者っておれだけど。
ぐぐって引っ掛かったのがこのページだったら100%参考にしてたと思う。
0756名前は開発中のものです。
2006/12/04(月) 04:04:01ID:jXY2nQsUまずこれの意味が分からない
0757名前は開発中のものです。
2006/12/04(月) 04:40:45ID:nlYneCz/そのサイトしらんから見てないけど好意的に解釈するなら
・前者は、出来ないことはないけど、初心者にはややこしいから出来ないことにしておく。
・後者は、厳密には違うけど説明が煩雑になるので一般的に広まってる言葉で統一。
スクリプト→プログラム ウェブサイト→ホームページみたいな。
ってところじゃないのかなぁ。
0758名前は開発中のものです。
2006/12/04(月) 07:04:37ID:DOv2qY8N基礎知識編
1.吉里吉里の定義
この時点ですでに怪しいorz
2.フォルダの中身を理解する
フォルダの名前が間違ってる
5.KAGと tjs
ksはKAGシナリオの略じゃ・・・
7.命令文の定義
@も[]もKAG2の頃から使えた
作成準備編
2.文字装飾をつける
R40% G90% B20% → 409020じゃねぇw
シナリオ編
3.別のシナリオに移動する
同一シナリオ内のラベルは全て違う名前を付ける必要があります→推奨なだけ
音声編
1.音声ファイルの種類
OGG(おっじ)形式→オッグですhttp://ja.wikipedia.org/wiki/Ogg
極め付けが企画管理編
8.動作環境
CPU 200MHz、メモリ64MBなんて、そもそもXPが動かねえw
この様子だとほとんどのページに何かしら間違いがあると思われ
0759名前は開発中のものです。
2006/12/04(月) 07:15:46ID:DOv2qY8N0760名前は開発中のものです。
2006/12/04(月) 08:46:55ID:2fSZ6ID3間違いが広まるのは何とも…
まぁ、ゲームは作れるだろうけどな
おっじ…
0761名前は開発中のものです。
2006/12/04(月) 09:19:26ID:tCxRQ/Loどいつもこいつもわざと言ってるとしか思えん・・・Plug-insとExtensionsを何故同一視するんだろうか?
俺のKAGにはKAGPluginクラスを継承したExtensionクラスがあるんだがw
因みにプラグインに必要なものをXP3に固めてスクリプトからXP3をロードすれば必要な処理と管理は勝手にやってくれるようになってる。
0762tom@
2006/12/04(月) 12:58:42ID:3g9V4ANI大体のことは、タグで間に合ってしまうけど、随所、tjsすると嬉しいこともあり・・・・・・
地道にノロノロ「吉里吉里&tjs」の腕を上げようか?小手先で済まそうか?思案の今日この頃。幾つか、質問させて下さい。
1.例えば、「MessageLayer.tjs」内の「setFocusToLink(n, true)」とか、KAGのtjsファイル内のメソッドとかで、
「もっとTJSを」に示唆はないけれど、シナリオファイルの中でも、
便利に使い回せそうなものを、まとめてあるみたいな文献ってWEB上で入手可能でしょうか?
解析の腕はないけど、手軽に利用できるものは、利用してみたいといったスタンスです。
2.「tjsマニュアル」を読んでも、「クロージャ」とか「incontextof」とか辺りの説明が、
ざっぱん理解できません、「猿でも解る」的な説明がどこかにないでしょうか?
3.もしかして、ストレージ(.mid)からファイルの属性(特にタイトルとコメントと作成者)を取得するプラグインとかってないでしょうか?
以上、よろしくお願いいたします。
(入手済みの資料には、「gutchie」氏の「TJS入門(ダンロード版)」があります)
0763名前は開発中のものです。
2006/12/04(月) 13:39:59ID:IY4w0iPo質以前にリファレンスとTJS入門の2ヶ所しかないのが現状。
0764名前は開発中のものです。
2006/12/04(月) 14:11:11ID:/pcfR+Pdclosure とか incontextof とかは、javascript やっていると理解しやすい……と思う
ある程度他のプログラム言語弄ったことがあれば、TJS にもそのまま応用利くよー
0765名前は開発中のものです。
2006/12/04(月) 16:07:12ID:Q8lVay/Qさせたいと思っています。
[button graphic="hoe.png" exp="kag.onShowHistoryMenuItemClick()"]
しかし文字が表示しきっていない時やトランジション中に実行すると
おかしなことになってしまうので、それらの動作中は実行しないように
したいのですが、どのようにしたらいいでしょうか?
上記タイミングだとメニューバーの文字がグレーになるので
それと同じようにしたいです。
過去ログでconductor関係が書かれていたのでそれをやってみましたが、
トランジションまで止めるわけではないんですね。
0766名前は開発中のものです。
2006/12/04(月) 16:40:59ID:9WENqyLjそのメニューバーのグレー処理を行っているところの判定文をまねればよろしい。
具体的には setMenuAccessibleAll() を覗くべし。
まあ、すでにそのメニューバーがグレーになってること自体をつかって
if (kag.showHistoryMenuItem.enabled) kag.onShowHisotyrMenuItemClick();
とやればいいんじゃないかと
0767名前は開発中のものです。
2006/12/04(月) 17:05:01ID:OHZOS6l+0768名前は開発中のものです。
2006/12/04(月) 17:14:55ID:JRHTujtHttp://kgs.tenkyu.com/s2/028.htm
まぁここまでせんでもボタン表示直後にロック、
クリック待ちの直前でアンロックしてやるマクロで充分な気もする
0769名前は開発中のものです。
2006/12/04(月) 18:03:57ID:/pcfR+PdonShowHistoryMenuItemClick じゃなくて showHistoryByKey を呼び出せば良いはず
この関数は、メニュー項目の有効・無効を調べて有効だったらクリックを呼び出しているから、ちょうど良いと思う
0770765
2006/12/04(月) 18:16:31ID:Q8lVay/Qみなさんありがとうございます!
>>768 さんに紹介していただいたプラグインで実現することができました。
確かに [l][s][p] で切り替えるマクロもありでしたね。
#発言番号「765(namco)」だったことに気付いてちょっと嬉しいw
0771名前は開発中のものです。
2006/12/04(月) 20:03:32ID:MRBciHhItjsのクロージャはjavascriptとはまったく別物だぞ
0772名前は開発中のものです。
2006/12/04(月) 20:45:31ID:JRHTujtH右クリックサブルーチンで行きつ戻りつしていると、
[s]タグで停止しているのにページ末に出るクリック待ちのアレが出現。
操作に支障はないけど見苦しいから飛ぶ直前に、
kag.lastClickGlyphVisible = false;
として回避した。もう、力技w
検索しても出てこなかったのでメモってことで。
…普通は別の手を使うのかもしれんが。
0773名前は開発中のものです。
2006/12/04(月) 21:48:24ID:/pcfR+Pd挙動は違っても、本質は同じだと思ってる
0774名前は開発中のものです。
2006/12/04(月) 21:57:34ID:jXY2nQsUサブルーチン中に無駄な改行かスペースがあるんじゃまい?
0775772
2006/12/04(月) 23:03:52ID:JRHTujtHえーと、俺も最初それを疑ったけどないっぽい。
ゲーム本編>右クリサブ>タイトル[s]>
コンフィグ(サブルーチン)>タイトル「▼出現」
と移動すると起こる現象で、ゲーム本編のクリック待ちサインをKAGが
覚えてて、ジャンプ前の状態復帰をしようとしてこうなるみたい。
安易にサブルーチンの戻り先いじるとはまるよって事すかね。
解決に二日かかったです。一日は原因の切り分けに無駄実験で浪費orz
0776名前は開発中のものです。
2006/12/04(月) 23:28:34ID:zL9FHGwpテキストの速度変更するのにこんな感じに書きました。
[button graphic="〜" exp="kag.chNoWaitMenuItem.click()"]
[button graphic="〜" exp="kag.chSlowMenuItem.click()"]
クリックするとメニューの「表示速度」は確かに目的のものに変わるのですが
実際の文字表示が変わってくれません。
もう一度クリックするとメニューのほうは同じように変わるのですが、
実際の文字表示は「直前にクリックした速度」になってしまいます。
なぜこんな現象になってしまうのでしょう?
メニューから選択すると目的の速度になってくれます。
0777772
2006/12/04(月) 23:51:15ID:JRHTujtH未検証だが
exp="kag.chNoWaitMenuItem.click();onChSpeedMenuItemClick()"
ではいかがか。
Menus.tjs
Mainwindow.tjs
を見た感じコレでいいかと
0778名前は開発中のものです。
2006/12/04(月) 23:54:09ID:JRHTujtH0779名前は開発中のものです。
2006/12/05(火) 00:07:04ID:yjUepm1Aでいいとおも
俺も始めて一ヶ月未満w
0780名前は開発中のものです。
2006/12/05(火) 00:21:51ID:nkFzTDNnちゃんと setUserSpeed やってるはずなんだけど……どうなんだろうね。
exp="kag.onChSpeedMenuItemClick(kag.chNoWaitMenuItem);"
↑できたら、これも試してみてくれ
0781名前は開発中のものです。
2006/12/05(火) 00:24:15ID:A3xeX1Wkああ、なるほど。
タイトルへはgotostartで戻ったほうがいいと思われ。
0782名前は開発中のものです。
2006/12/05(火) 00:24:16ID:eQmwQzcDtemploadとかしてるんじゃねえの
0783名前は開発中のものです。
2006/12/05(火) 00:28:36ID:yjUepm1Akag.setDelay(elm)
してやるしかないか。elmって何だ?どうやって投げるのかね。
つーか素直に[delay speed=user cond="kag.chUserMode"]
しろってかw
0784名前は開発中のものです。
2006/12/05(火) 00:32:43ID:yjUepm1Aあぁ、そんなタグもあったかw
その方が綺麗だ、うん。
確認ダイアログまで手作りした俺は何だったのか…
0785名前は開発中のものです。
2006/12/05(火) 00:40:13ID:nkFzTDNnelm なら、kag.setDelay(%[ speed => "user" ]) な感じで辞書渡してやれば OK
0786名前は開発中のものです。
2006/12/05(火) 00:46:57ID:YOT7OEiw0787名前は開発中のものです。
2006/12/05(火) 00:51:52ID:aqnstItM[tempload]が原因でした!!
設定画面の出し入れに [tempload] [tempsave] を入れていたのですが、
外しても特に問題なかったのでそれでいきたいと思います。
ありがとうございましたー。
0788名前は開発中のものです。
2006/12/05(火) 00:56:15ID:nkFzTDNn効率の良し悪しは別として、一応リファレンス見る限り
>invalidate 演算子を用いなくても、オブジェクトは必要とされなくなった時点で削除されます。
って書いてあるから、最低限のガベコレは実装されてるはず
0789名前は開発中のものです。
2006/12/05(火) 01:16:26ID:ix9JEZYL(d=%[]).d=d;
とかで消えないゴミができるんじゃないか
0790名前は開発中のものです。
2006/12/05(火) 01:24:09ID:7v/28G5f式中辞書配列
0791名前は開発中のものです。
2006/12/05(火) 02:25:52ID:nkFzTDNn確かに。kirikiri2 だと参照カウンタだったですね (´・ω・`)
ttps://sv.kikyou.info/trac/kirikiri/browser/kirikiri2/branches/2.28stable/kirikiri2/src/core/tjs2/tjsObject.cpp#L120
kirikiri3 だと、ちょっと賢くなるみたいだけど……
ttps://sv.kikyou.info/trac/kirikiri/browser/kirikiri3/branches/risse/src/core/risse/src/risseGC.h#L26
0792名前は開発中のものです。
2006/12/05(火) 05:11:32ID:yjUepm1A地味にすげぇ。エスパーw
0793762
2006/12/05(火) 08:58:05ID:55fIRaSq<A href="../test/read.cgi/gamedev/1160427850/763"
target=_blank>>>763</A>
KAG本体の.tjs
体系的な資料があれば、何かと便利ですが、コメント文もしっかり付いている
ことですし、随所の親切なTipsな翻弄されながら、溜めが出来たら、気長に暇をみて、
少ずつ、自分なりに整理してみることにします。
<A href="../test/read.cgi/gamedev/1160427850/764"
target=_blank>>>764</A>,771,773
「TJS入門」のサンプルコードをいじっていたら、少しだけ、イメージ涌いてきました。
incontextofで、余所のオブジェクトのメソッドをさらって来て、同化しちゃうみたいな。
クラスの定義の時点でオーバーライドとか、しなくても、オブジェクト作っちゃってから
でもいいよ、とかいう事なのか?何が嬉しいのか???
JavaScript、
手元にある資料はド素人用のものばかりで、説明がなかったので、そのうち、
本屋にでも行ってきます。
0795名前は開発中のものです。
2006/12/05(火) 09:26:04ID:sQZvZxZ90796名前は開発中のものです。
2006/12/05(火) 15:25:45ID:xsLKGqb1あとはmail欄に sage って入れればおk
0797名前は開発中のものです。
2006/12/05(火) 21:52:04ID:rb48VfHr教えてエロい人!
0798名前は開発中のものです。
2006/12/05(火) 22:38:26ID:eXNwmJDa俺もinStableで判別させてるけど、変な挙動はしてないよ。
waitclick時には呼び出せないけど。
0799名前は開発中のものです。
2006/12/05(火) 22:45:14ID:rb48VfHr○>>765の件だけど
ね、一応。
>>798
waitclickはinStableがfalseになるってこと?
0800名前は開発中のものです。
2006/12/05(火) 23:02:08ID:eXNwmJDaうお、ごめん。
>waitclickはinStableがfalseになるってこと?
そう、クリック待ちや[s]タグで停止中のみtrue(安定走行中)になるみたい。
ちなみにmove中でもクリック待ちがあればtrue返すね。
0801名前は開発中のものです。
2006/12/05(火) 23:15:11ID:rb48VfHrその時はトランジション判定(トランジション数が0か否か)も一緒にしておけばいいのかな。
0802名前は開発中のものです。
2006/12/06(水) 00:18:59ID:QbMNKU3+内部データは assignImages と同じように共有されるんですか?
0803名前は開発中のものです。
2006/12/06(水) 00:48:03ID:m893LVlH0804名前は開発中のものです。
2006/12/06(水) 01:06:23ID:HJku8YQM確かmoveはtransCountに数えられなかったと思うな。
俺はlocklinkかsetSelProcessLockか、waitclick使う手もあるかな、くらいしか思いつかないorz
呼び出し先で弄らない限りmoveには影響ないし、俺はそのまま使ってるけど。
特に765の履歴くらいなら問題なさそう。
0805名前は開発中のものです。
2006/12/06(水) 01:17:16ID:6xuN4ZJvmoveみたけりゃmoveCountで見れるんじゃね
0806名前は開発中のものです。
2006/12/06(水) 01:33:01ID:HJku8YQMおお、どうもです。…俺アフォスorz
0807名前は開発中のものです。
2006/12/06(水) 02:13:41ID:ZAY29R90されます(ただし前回読み込んだ画像が画像キャッシュに残ってる場合)
0808名前は開発中のものです。
2006/12/06(水) 09:50:07ID:9WO+8TY2どう書くのが効率良いですか?
visible=falseで全部指定?
0809名前は開発中のものです。
2006/12/06(水) 12:10:35ID:QbMNKU3+thx
数十個の ButtonLayer に対し、ほぼ同時に同じ画像を読み込もうとしてたので、
多分キャッシュされていますね。ありがとうございます。
0810名前は開発中のものです。
2006/12/06(水) 12:23:26ID:9GJnnXFF0811名前は開発中のものです。
2006/12/06(水) 12:24:44ID:T8IPH/88OUTFOCUS WikiのKAGマクロ集に
システム関連でtouchimagesという画像データをキャッシュするマクロがある
ttp://hpcgi1.nifty.com/gutchie/wifky/wifky.pl?p=KAG%A5%DE%A5%AF%A5%ED%BD%B8
ので、このマクロのstorages属性に、
キャッシュさせたい画像ファイル名を「;」で区切った文字列を指定すると
効率が良さそうです。
0812名前は開発中のものです。
2006/12/06(水) 13:16:18ID:qHyDUzo2効率もくそも確実にやるにはこれしかない。
それかキャッシュするネイティブコードを書くか
0813名前は開発中のものです。
2006/12/06(水) 13:41:37ID:ZAY29R90いやいやそこはVMじゃないし
>確実にキャッシュするならオフスクリーンに全部描画しかない。
「描画」という言葉のイメージから想像できるようなことは
やらんだろうなぁ
ttp://devdoc.kikyou.info/tvp/docs/kag3doc/contents/TJSTips.html#id276
ここ参照
0814名前は開発中のものです。
2006/12/06(水) 14:27:46ID:m893LVlH0815名前は開発中のものです。
2006/12/06(水) 14:31:43ID:m893LVlH0816名前は開発中のものです。
2006/12/06(水) 16:59:34ID:ZAY29R900817名前は開発中のものです。
2006/12/06(水) 17:11:15ID:BfWFwrkA画像に対して共有が解除されるような処理をしなければ
共有されますよ。
キャッシュは行わないようにも出来るので
共有とは別のお話しです。
0818名前は開発中のものです。
2006/12/06(水) 18:06:58ID:HjI+5jiOレイヤが画像へのポインタ持ってるだけならデータは一カ所にしてtouchImageとloadImagesでアクセスするメモリは同じでよさそうだけどそれだとキャッシュ用メモリの指定プロパティいらないし
問題はloadImagesとtouchImageがどういう処理してるかだろ。
>>807はただのバカと吉里吉里の実装知ってるのとどっちなんだ?
0819名前は開発中のものです。
2006/12/06(水) 18:52:16ID:m893LVlHtouchImagesでの画像キャッシュっていうのは
loadImagesで読み込む際に外部ファイルから読み込むのではなくて
メモリ上のデータを読み込むのに使われてます。
外部ファイルから読み込むよりメモリから読み込む方がずっと高速なので
予めキャッシュに入れておくことで画像読み込みを高速化できます。
この場合、ただ読み込み元が違うだけで個々のレイヤのグラフィックハンドルは別々に作成されるから
読み込めば読み込むほどメモリを消費することになります。
一方、assignImagesの場合は、グラフィックハンドルをコピーするだけなので
画像の読み込み自体が行われません。assignImagesで複数レイヤに画像を使っても、
画像自体の使用メモリは最初に読み込んだ画像のみです。
ポインタをコピーするだけだから、最も高速です。
実際の操作として何が違うのかというと、
例えば、layer1、layer2、layer3の画像をそれぞれassignImagesで共有させた場合、
layer1の画像をfillRectなどで塗り潰した場合、layer2、layer3の画像も変化します。
キャッシュからそれぞれに同じ画像を読み込ませた場合は、
それぞれ異なるグラフィックハンドルなわけで、
layer1の画像に変更を加えてもlayer2、layer3は変化しません。
どういうレベルとか関係なく、キャッシュと共有とでは内部処理そのものが違います。
ちなみに、通常loadImagesで同じ画像を読み込んだ場合には画像の共有はされていません。
0820名前は開発中のものです。
2006/12/06(水) 19:07:23ID:j3d23AZM0821名前は開発中のものです。
2006/12/06(水) 20:12:19ID:ZAY29R90>例えば、layer1、layer2、layer3の画像をそれぞれassignImagesで共有させた場合、
>layer1の画像をfillRectなどで塗り潰した場合、layer2、layer3の画像も変化します。
しません。というか変化したらたぶんバグです。
なぜかというと、画像に変更を加える直前に共有が解除されるからです。
(例)
tTJSNI_BaseLayer::FillRect()->tTVPBaseBitmap::Fill()->tTVPNativeBaseBitmap::GetScanLineForWrite()->
tTVPNativeBaseBitmap::Independ()
画像キャッシュと画像の共有は根本的には同じ処理です。
画像が読み込まれてキャッシュに入る場合は
ttps://sv.kikyou.info/trac/kirikiri/browser/kirikiri2/tags/2.29-dev.20061119/kirikiri2/src/core/visual/GraphicsLoaderIntf.cpp#L2464 TVPLoadGraphic()
ttps://sv.kikyou.info/trac/kirikiri/browser/kirikiri2/tags/2.29-dev.20061119/kirikiri2/src/core/visual/GraphicsLoaderIntf.cpp#L2081 tTVPGraphicImageData::AssignBitmap()
ttps://sv.kikyou.info/trac/kirikiri/browser/kirikiri2/tags/2.29-dev.20061119/kirikiri2/src/core/visual/LayerBitmapIntf.h#L133 tTVPBaseBitmap::tTVPBaseBitmap()
ttps://sv.kikyou.info/trac/kirikiri/browser/kirikiri2/tags/2.29-dev.20061119/kirikiri2/src/core/visual/win32/LayerBitmapImpl.cpp#L1749 tTVPNativeBaseBitmap::tTVPNativeBaseBitmap()
ここでBitmap=r.Bitmapとなっています。BitmapはtTVPBitmap *型で画像バッファを表しています。
つまり、実体であるtTVPBitmapへのポインタのコピーをしているだけです。
(TVPAllocGraphicCacheOnHeapはTVPAfterSystemInit()内で常にfalseに設定されている)
0822名前は開発中のものです。
2006/12/06(水) 20:13:45ID:ZAY29R90ttps://sv.kikyou.info/trac/kirikiri/browser/kirikiri2/tags/2.29-dev.20061119/kirikiri2/src/core/visual/GraphicsLoaderIntf.cpp#L2438 TVPLoadGraphic()
ttps://sv.kikyou.info/trac/kirikiri/browser/kirikiri2/tags/2.29-dev.20061119/kirikiri2/src/core/visual/GraphicsLoaderIntf.cpp#L2103 tTVPGraphicImageData::AssignToBitmap()
ttps://sv.kikyou.info/trac/kirikiri/browser/kirikiri2/tags/2.29-dev.20061119/kirikiri2/src/core/visual/win32/LayerBitmapImpl.cpp#L1855 tTBPNativeBaseBitmap::AssignBitmap()
ここでBitmap = rhs.Bitmapとなっています。ここでも実体であるtTVPBitmapへの
ポインタのコピーをしているだけです。
画像の共有をする場合はたとえば
ttps://sv.kikyou.info/trac/kirikiri/browser/kirikiri2/tags/2.29-dev.20061119/kirikiri2/src/core/visual/LayerIntf.cpp#2090 tTJSNI_BaseLayer::AssignImages()
ttps://sv.kikyou.info/trac/kirikiri/browser/kirikiri2/tags/2.29-dev.20061119/kirikiri2/src/core/visual/win32/LayerBitmapImpl.cpp#L1835 tTBPNativeBaseBitmap::Assign()
ここでBitmap = rhs.Bitmapとなっています。ここでも(ry
というわけでどの場合も画像の実体であるtTVPBitmapへのポインタをコピーしてる
だけで、根底にある動作はどれも同じです。グラフィックハンドルが異なるとか
そーいうことは無いということです。
0823名前は開発中のものです。
2006/12/07(木) 13:22:22ID:n7mXUS1Cソース読んできた。C++のソースがぐちゃぐちゃになりやすいのかDee氏のソースが汚いのか悩んだJava厨です・・・(°ω °)
メジャーver上げる度ソース捨てるのって保守性を確保する理由もあるんじゃ・・・w
バイナリだろうとテキストだろうとファイルにアクセスするクラスは実装されてるのにTJSから直接使えんのね。
#ところでお前ら実装の話になると黙るのに憶測で話すとレス伸びるなw
0824名前は開発中のものです。
2006/12/07(木) 13:36:55ID:39uamP1O0825名前は開発中のものです。
2006/12/07(木) 13:45:37ID:K0MkggTU0826名前は開発中のものです。
2006/12/07(木) 16:27:49ID:bTiMMteHロード画面を kag.callExtraConductor('savescreen.ks','*showLoad') で呼び、
*showLoad
[layopt layer="message0" visible="false"]
[layopt layer="message1" visible="true"]
[current layer="message1"]
ボタン表示
[s]
[return]
としています。実際はクロスフェード処理など入れてありますが省略します。
ここから栞のロードをするにしても、ロード画面を閉じるにしても、
[s] で止まったまま [return] に行かず、スタックが溜まったりしないのかと
心配になったのですが、実際はどうなのでしょうか?
0827名前は開発中のものです。
2006/12/07(木) 17:43:56ID:50ASmvyv0828名前は開発中のものです。
2006/12/07(木) 18:27:47ID:NPhMeSgl[return]で戻らないなら
kag.process('savescreen.ks','*showLoad');
でいいじゃないか
0829名前は開発中のものです。
2006/12/07(木) 18:59:51ID:gSsIT5lX瑣末な、気付き。
[style linespacing=40]
[link 〜]・・・[endlink][r]
[style linespacing=20]
[link 〜]・・・[endlink][r][s]
で、最後の[r]タグがないと、
リンクと半透明矩形の位置がずれるのネッ。
p.s.
>795,796
ツッコミ、サンキュー。
mail欄に sageですね。おk?
0830名前は開発中のものです。
2006/12/07(木) 20:39:12ID:X8gCVftT[locate x=50 y=50][link onenter="kag.process('','*画像on')" onleave="kag.process('','*画像off')"
exp="kag.restoreBookMark(0), kag.se[0].play(%[storage:'効果音.wav'])"][emb exp="kag.getBookMarkPageName(0)"][endlink]\(一行)
・
・
*画像on
@image layer=0 top=50 left=500 storage=画像 visible=true
@s
*画像off
@freeimage layer=0
@s
以上のようなタグでロード画面を作ったのですが、ある特定のラベルをここから読み込むと
「シナリオファイル ***.ks 内にラベル *画像off が見つかりません」
というエラーが出ます。そのラベルに特に変わった部分はなく、他の所と同じマクロで
記述しているものなのですが、他のラベルでは普通に飛べるのに、そこだけ何度やっても
ダメでした。試しに*画像offと同じksファイルにぶちこんでみたんですが、
エラーは出ずに止まりました。(*画像offのsタグのせいだと思われます)
onleave処理がズレてるのは想像つくのですが、何故ここだけなのかが解りません。
とりあえずラベルの前においてあったトランジションをラベルの後に移動したら
回避できたのですが、他のラベルも殆どがトランジション後に書いてあります。
もうさっぱり訳が解りません。
1000近くあるセーブラベルの全部で試したわけではないので、他にも同じ現象を
起こすラベルがありそうで怖いです。
tjsが解れば何とかなるかも、とリファレンスと格闘してみたのですが、
ちんぷんかんぷんでした……。
原因と対処方法をご存知の方がいらっしゃいましたら教えてください。
0831名前は開発中のものです。
2006/12/07(木) 21:38:46ID:WQMD2Jtt>>826がkag.processじゃなくてcallExtraConductor使ってるのは
ロード画面閉じてそのまま物語を進められるようにじゃないかと。
■ このスレッドは過去ログ倉庫に格納されています