「雪が降るプラグイン」について取り急ぎ

keito works で公開されている「雪が降るプラグイン」について、取り急ぎ。
セーブ/ロードで雪降り状況が保存/復元されない問題があるようなので、
解決策を検討しました。

検討した結果としてはおそらく、「snowfall.ks」と「make.ks」のふたつに
記述を加えることで解決できるのではないかなと思います
下にそれをメモとして残しておきます。

「ティラノスクリプトスタンダードパッケージ v.4.54c」に
「雪が降るプラグイン v.1.6.1」を統合して
下記の変更を行うと、セーブ時の雪降り状況をロード時に再現できることを確認しました。

また、この加筆によって [snowfall] タグに [kanim] タグ用のパラメータも渡せるようになります。
ここで渡した [kanim] 用のパラメータは降る雪に即座にアニメーションとして適用され、
ロード時に復元されるようデータが保存されます。




scenario/snowfall/snowfall.ks

	
	;
	; 雪が降る プラグイン v1.6.1
	; keito http://keito-works.com/
	;
	; <導入すると、以下の機能が追加されます>
	;   画面内に、雪が降ります。
	;   (画像指定で、色々な物を降らせることも可能です)
	;
	;
	; <使い方>
	;   最初に、snowfall.ksを読み込んでください。
	;   [call storage="snowfall/snowfall.ks"]
	;
	;   開始
	;   [snowfall]
	;   開始(画像指定)
	;   [snowfall image="flake.png" minSize="5" maxSize="12"]
	;
	;   終了
	;   [snowfall_clear]
	;
	;   ※iPhoneの場合は、flakeCountを10以下にして下さい。(ただし、Android端末の場合は、3以下でも厳しいと思われます)
	;   [snowfall flakeCount="8"]
	;
	; <パラメータ一覧>
	;   image     : 降らせる画像を指定します。(画像は、data\imageフォルダに格納して下さい)
	;   flakeCount: 数 を指定します。(デフォルト:30)
	;   flakeColor: 色 を指定します。(デフォルト:'#ffffff')
	;   minSize   : 最小サイズ を指定します。(デフォルト:3)
	;   maxSize   : 最大サイズ を指定します。(デフォルト:5)
	;   minSpeed  : 最小スピード を指定します。(デフォルト:2)
	;   maxSpeed  : 最大スピード を指定します。(デフォルト:4)
	;
	;
	; <注意点>
	;   ティラノスクリプトVer2.72 で動作確認
	;
	; <使用ライブラリ>
	;   Jason Brown (Snowfall jquery plugin version 1.6)
	;   https://github.com/loktar00/JQuery-Snowfall
	;   Licensed under the Apache License, Version 2.0.
	;
	[loadjs storage="snowfall/snowfall.jquery.js"]
	[macro name="snowfall"]
	[iscript]
	$('#tyrano_base').snowfall('clear');
	if (mp.image != null) {
	    mp.image =  './data/image/' + mp.image;
	}
	if (mp.flakeCount == null) {
	    mp.flakeCount = 30;
	}
	if (mp.flakeColor == null) {
	    mp.flakeColor = '#ffffff';
	}
	if (mp.minSize == null) {
	    mp.minSize = 3;
	}
	if (mp.maxSize == null) {
	    mp.maxSize = 5;
	}
	if (mp.minSpeed == null) {
	    mp.minSpeed = 2;
	}
	if (mp.maxSpeed == null) {
	    mp.maxSpeed = 4;
	}

	$('#tyrano_base').snowfall({
	    image      : mp.image,
	    flakeCount : mp.flakeCount,
	    flakeColor : mp.flakeColor,
	    flakeIndex : 1000,
	    minSize    : mp.minSize,
	    maxSize    : mp.maxSize,
	    minSpeed   : mp.minSpeed,
	    maxSpeed   : mp.maxSpeed,
	    round      : true,
	    shadow     : false
	});
	//nameの登録
	mp.name='snowfall-flakes';
	//mpの保存
	TYRANO.kag.stat['snowfall']=$.extend({},mp);
	[endscript]
	;kanim(keyframeが指定されていれば)
	[kanim * cond="mp.keyframe!=undefined"]
	[endmacro]

	[macro name="snowfall_clear"]
	[iscript]
	$('#tyrano_base').snowfall('clear');
	//保存してあったmpを削除
	var i,j='snowfall',a=TYRANO.kag.stat,b=a[j];for(i in b) delete b[i];
	delete a[j];
	[endscript]
	[endmacro]

[return]




scenario/make.ks

	
	;このファイルは削除しないでください!
	;
	;make.ks はデータをロードした時に呼ばれる特別なKSファイルです。
	;Fixレイヤーの初期化など、ロード時点で再構築したい処理をこちらに記述してください。
	;
	[iscript]
		//snowfallの削除
		$('#tyrano_base').snowfall('clear');
		//mpの復元
		var mp = TYRANO.kag.stat.snowfall;
		if ( mp ) {
			//snowfallの復元(mpになんか入ってれば)
			$('#tyrano_base').snowfall({
			    image      : mp.image,
			    flakeCount : mp.flakeCount,
			    flakeColor : mp.flakeColor,
			    flakeIndex : 1000,
			    minSize    : mp.minSize,
			    maxSize    : mp.maxSize,
			    minSpeed   : mp.minSpeed,
			    maxSpeed   : mp.maxSpeed,
			    round      : true,
			    shadow     : false
			});
		};
		tf.mp = mp;
	[endscript]
	[kanim cond="tf.mp!=undefined&&tf.mp.keyframe!=undefined" name=&tf.mp.name layer=&tf.mp.layer keyframe=&tf.mp.keyframe time=&tf.mp.time easing=&tf.mp.easing count=&tf.mp.count delay=&tf.mp.delay direction=&tf.mp.direction mode=&tf.mp.mode]
	;make.ks はロード時にcallとして呼ばれるため、return必須です。
	[return]




使用例(下記はfirst.ks)

	
	;一番最初に呼び出されるファイル

	[title name="ティラノスクリプト解説"]

	[stop_keyconfig]

	;ティラノスクリプトが標準で用意している便利なライブラリ群
	;コンフィグ、CG、回想モードを使う場合は必須
	@call storage="tyrano.ks"

	;ゲームで必ず必要な初期化処理はこのファイルに記述するのがオススメ
	@call storage="snowfall/snowfall.ks"
	[keyframe name="rotate"]
	[frame p="0%" rotate="0deg"]
	[frame p="100%" rotate="360deg"]
	[endkeyframe]
	[snowfall image="flake.png" keyframe="rotate" minSize="10" maxSize="50" count="infinite" time="1500" easing="linear"]
	
	;メッセージボックスは非表示
	@layopt layer="message" visible=false

	;最初は右下のメニューボタンを非表示にする
	[hidemenubutton]

	;タイトル画面へ移動
	@jump storage="title.ks"

	[s]
スポンサーサイト

コメント

非公開コメント