2008'05.13.Tue
吉里吉里でゲームを作る際、今まで tjs のスクリプトを書く(調べる)のがめんどくさかったため、ほとんどタグで済ませたり、素敵なサイトさまが配布しているサンプルスクリプトを利用・改変する程度だったわけですが、やはりパラメータ管理などにおいてはKAGのタグ打ちだけではつらいものがあるため、ちょっとくらい書いてみるか・・・というのがモチベーションのメモ。
様々なサイトさまからタダでお世話になっている分、ちょっとくらいフィードバックできたらいい・・・けれど基本バカなのでたいしたことじゃないのに思い付いたことをメモします。結局自分用です。
レベルは完全に初心者なので、色々間違っていること多いと思います。あまり参考にしないこと。
パラメータ管理する際、2つ以上の変数を結び付けたい場合がある。
その時、配列 arr[] を使い、たとえば name と value という変数を一つの組と考えたい。
イメージは arr[0].name = "hoge" ; arr[0].value = "0"; みたいな。
Tjs は Java に似た言語ということなので、まぁフィールドに変数 name と value を持つクラスをつくればいい、ということになるが(たぶん・・・) Tjs(Tjs2?) には辞書配列というものがあるのでこれを使えばちょっと楽に書けそう? でもない?
class Hoge{
var arr = [];
var name;
var value;
//コンストラクタ
function Hoge(){
var length = 2;//配列の長さ
for(var i = 0; i < length; i++){
//辞書配列
arr[i] = %["name","value"];
}
arr[0].name = "hoge";
arr[1].name = "moge";
for(var i = 0; i < arr.count; i++){
arr[i].value = 0;
}
}
//その他適当なメソッド
function getName(i){
return arr[i].name;
}
function getValue(i){
return arr[i].value;
}
function setValue(i, value){
arr[i].value += value;
}
}
簡略化できたのかは謎。nameやvalueが呼び出せるfunctionも作ってみたけど、こんなことしなくても呼び出せるんでしょうか?どうなんでしょうか。(調べろ)
シナリオ中ではこんなかんじ。インスタンスを作って、長いからゲーム変数(だっけ?)に代入してみた。
@eval exp="global.hoge = new Hoge(), f.hoge = global.hoge"
@emb exp="f.hoge.getName(0)"
まぁなんでこんなの作ったかというと、value(数値)が一番大きいname(人とか)を知りたかったわけで、上記以外に最大値を持つnameを返すfunctionを書いたわけですが、まぁ、あれですね。
好感度一番高いのは誰か、とか、そういうことですw
あと今までめんどくさくてやらなかったシステムボタンを作ってみたんですけど、最初、ボタンに
@button exp ="kag.~" みたいな感じでロードとかセーブとか呼び出す式を埋め込めばいいかと思ったんです。
けど、セーブ、ロードはいいとして、スキップはなぜかうまいこといかず・・・
次の選択肢・未読までスキップはどうやら
kag.skipToStop();
でいけそうなのですが・・・。
あとメッセージレイヤの上に並べていたんだけど、[cm]とかでクリアされるごとにボタンを表示しなおさなければならない。
ということで諦めて、kag3 > kag3plugin > sample に入っているsystembutton.ks を改変して使う事に。
最初からそうしろって感じです。
とっても簡単にできました。スキップも上記関数でおkでした。
しかしシステムボタンの親レイヤとか何も考えずにやったのでデフォルトのままで、最初は背景を親レイヤとしてボタンが表示されたので、メッセージレイヤの下に表示されちゃうことがありました。
何も知らない私は、あらやだ、と思い、検索してみたところ、
SystemButtonPluginクラスのコンストラクタに書かれている
creatButtonsの引数が(親レイヤ,表画面 or 裏画面)となっているのでここを変えればいい。
createButtons(kag.fore.base, foreButtons);
createButtons(kag.back.base, backButtons);
のkag.fore.base(背景レイヤ)をkag.fore.messages[0]とか、自分の表示させたいレイヤに変えればok.
その時、配列 arr[] を使い、たとえば name と value という変数を一つの組と考えたい。
イメージは arr[0].name = "hoge" ; arr[0].value = "0"; みたいな。
Tjs は Java に似た言語ということなので、まぁフィールドに変数 name と value を持つクラスをつくればいい、ということになるが(たぶん・・・) Tjs(Tjs2?) には辞書配列というものがあるのでこれを使えばちょっと楽に書けそう? でもない?
class Hoge{
var arr = [];
var name;
var value;
//コンストラクタ
function Hoge(){
var length = 2;//配列の長さ
for(var i = 0; i < length; i++){
//辞書配列
arr[i] = %["name","value"];
}
arr[0].name = "hoge";
arr[1].name = "moge";
for(var i = 0; i < arr.count; i++){
arr[i].value = 0;
}
}
//その他適当なメソッド
function getName(i){
return arr[i].name;
}
function getValue(i){
return arr[i].value;
}
function setValue(i, value){
arr[i].value += value;
}
}
簡略化できたのかは謎。nameやvalueが呼び出せるfunctionも作ってみたけど、こんなことしなくても呼び出せるんでしょうか?どうなんでしょうか。(調べろ)
シナリオ中ではこんなかんじ。インスタンスを作って、長いからゲーム変数(だっけ?)に代入してみた。
@eval exp="global.hoge = new Hoge(), f.hoge = global.hoge"
@emb exp="f.hoge.getName(0)"
まぁなんでこんなの作ったかというと、value(数値)が一番大きいname(人とか)を知りたかったわけで、上記以外に最大値を持つnameを返すfunctionを書いたわけですが、まぁ、あれですね。
好感度一番高いのは誰か、とか、そういうことですw
あと今までめんどくさくてやらなかったシステムボタンを作ってみたんですけど、最初、ボタンに
@button exp ="kag.~" みたいな感じでロードとかセーブとか呼び出す式を埋め込めばいいかと思ったんです。
けど、セーブ、ロードはいいとして、スキップはなぜかうまいこといかず・・・
次の選択肢・未読までスキップはどうやら
kag.skipToStop();
でいけそうなのですが・・・。
あとメッセージレイヤの上に並べていたんだけど、[cm]とかでクリアされるごとにボタンを表示しなおさなければならない。
ということで諦めて、kag3 > kag3plugin > sample に入っているsystembutton.ks を改変して使う事に。
最初からそうしろって感じです。
とっても簡単にできました。スキップも上記関数でおkでした。
しかしシステムボタンの親レイヤとか何も考えずにやったのでデフォルトのままで、最初は背景を親レイヤとしてボタンが表示されたので、メッセージレイヤの下に表示されちゃうことがありました。
何も知らない私は、あらやだ、と思い、検索してみたところ、
SystemButtonPluginクラスのコンストラクタに書かれている
creatButtonsの引数が(親レイヤ,表画面 or 裏画面)となっているのでここを変えればいい。
createButtons(kag.fore.base, foreButtons);
createButtons(kag.back.base, backButtons);
のkag.fore.base(背景レイヤ)をkag.fore.messages[0]とか、自分の表示させたいレイヤに変えればok.
Post your Comment
プロフィール
カレンダー
ブログ内検索
最古記事
最新CM
カウンター